老鱼Python数据分析——篇二:系统设计(找代理IP)
2019-03-28 16:21
405 查看
版权声明:©著作权归作者所有:来自CSDN博客作者十方上下的原创作品,如需转载,请注明出处,否则将追究法律责任 https://blog.csdn.net/xy229935/article/details/88814979
开发环境:win7 x64版本,python 3.6,Anaconda3 (64-bit)
因为频繁访问容易被封IP,所以我们需要使用代理来进行数据的爬取(当然你也可以放慢节奏,比如每5秒爬一条记录)。
经过测试,发现http://www.66ip.cn/比较好用,接下来,先把到66ip上把所有能用的代理IP都保存下来。
66ip网站代理IP的HTML源码如上图所示,所以,首先要找到该table,再遍历table中的所有tr即可。
实现步骤如下:
- 导入相关模块
- 爬取66ip网页指定table的tr
- 读取tr中td的内容,拼接成代理IP地址
- 测试该IP地址是否可用,将可用IP保存到本地TXT文件
- 循环读取每个页面的代理IP
一、导入相关模块
[code]import urllib import requests from bs4 import BeautifulSoup import time import random
二、爬取66ip首页指定table的tr
[code]# 模拟浏览器 heads = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'} url = "http://www.66ip.cn/1.html" response = requests.get(url,headers=heads) soup = BeautifulSoup(response.content.decode("gbk"),"lxml") # 找到属性"bordercolor"为"#6699ff"的table中的所有tr trs = soup.find("table", attrs={"bordercolor":"#6699ff"}).find_all("tr")
三、读取tr中td的内容,拼接成代理IP地址
[code] for tr in trs[1:]: ip = tr.find_all("td")[0].get_text() port = tr.find_all("td")[1].get_text() proxy = "http://"+ip+":"+port print(proxy)
显示结果如下:
四、测试该IP地址是否可用,将可用IP保存到本地TXT文件
[code] # 验证代理IP是否可用,如果IP不可用会抛异常 try: proxies = {"http":proxy} test_url = "http://blog.csdn.net" rsp = requests.get(test_url, headers=heads, proxies=proxies,timeout=3) if(response.status_code==200): # 如果可用则保存地址 with open("ipList.txt", "a", encoding="utf-8") as f: f.write(proxy+"\n") f.close() except: pass
五、循环读取每个页面的代理IP(加间隔时间)
[code]import urllib import requests from bs4 import BeautifulSoup import time import random heads = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'} for i in range(1,1000): url = "http://www.66ip.cn/"+str(i)+".html" response = requests.get(url,headers=heads) soup = BeautifulSoup(response.content.decode("gbk"),"lxml") # 找到属性"bordercolor"为"#6699ff"的table中的所有tr trs = soup.find("table", attrs={"bordercolor":"#6699ff"}).find_all("tr") for tr in trs[1:]: ip = tr.find_all("td")[0].get_text() port = tr.find_all("td")[1].get_text() proxy = "http://"+ip+":"+port print(proxy) # 验证代理IP是否可用,如果IP不可用会抛异常 try: proxies = {"http":proxy} test_url = "http://blog.csdn.net" rsp = requests.get(test_url, headers=heads, proxies=proxies,timeout=3) if(response.status_code==200): # 如果可用则保存地址 with open("ipList.txt", "a", encoding="utf-8") as f: f.write(proxy+"\n") f.close() except: pass # 验证结束 # 间隔时间为3~5秒 time.sleep(random.randint(3,5))
通过以上步骤,把66ip网前1000页能用的代理IP下载到本地,为后期爬取指定页面做准备。
相关文章推荐
- 研读《基于Hadoop的海量业务数据分析平台的设计与实现》----flume的数据收集系统的设计
- python模拟浏览器登录人人网,并使用代理IP和发送表单数据
- 系统设计以及javascript笔记:用户行为分析研究之数据采集
- Linux 系统应用编程——网络编程(利用TCP/IP 模型分析数据传输过程)
- 数据分析:基于Python的自定义文件格式转换系统
- python数据分析笔记(1):搭建python的数据分析环境(Mac系统下)
- Java课程设计——博客作业教学数据分析系统(201521123082 黄华林)
- 一个数据分析系统的技术架构设计浅析
- Linux 系统应用编程——网络编程(利用TCP/IP 模型分析数据传输过程)
- Python数据分析之真实IP请求Pandas详解
- Java课程设计——博客作业教学数据分析系统(201521123091 李嘉廉)
- Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)
- Python数据抓取爬虫代理防封IP方法
- Java课程设计——博客作业教学数据分析系统(201521123084 林正晟)
- Python:实用抓图工具开发介绍(含需求分析、设计、编码、单元测试、打包、系统测试、发布各环节)
- 基于Hadoop、HBase的数据分析挖掘管理平台-舆情预警监控系统 (系统总体设计图)
- 多维联机数据分析模型和系统设计方法[转]
- 银行影像内容大数据系统设计与实例问题分析
- 系统设计以及javascript笔记:用户行为分析研究之数据采集
- Python:实用抓图工具开发介绍(含需求分析、设计、编码、单元测试、打包、系统测试、发布各环节)