本文主要介绍Python爬虫构建代理ip池。文章围绕主题,介绍细节,具有一定的参考价值。可以参考需要的小伙伴,希望对你的工作有所帮助。
目录
前言1、用户代理2、发送请求3、解析数据4、建立ip代理池、检查ip是否可用5、完成代码摘要
前言
在使用爬虫时,很多网站都有一定的反爬措施,甚至在爬取大量数据或者多次频繁访问网站时,可能会面临ip封禁,所以这时候我们通常可以找一些代理ip继续爬虫测试。
下面就开始来简单地介绍一下爬取免费的代理ip来搭建自己的代理ip池:这个免费ip代理的网址:http://www.ip3366.net/free/
提示:以下是本文正文,以下案例可供参考。
一、User-Agent
在发送请求时,我们通常会进行简单的反爬行。这时可以用fake_useragent模块设置一个请求头,可以伪装成浏览器。可以使用以下两种方法。
从fake_useragent导入用户代理
标题={
#' user-agent': useragent()。常见浏览器(如Firefox、Google)的随机# Request头伪装
' User-agent': useragent()。谷歌浏览器
}
二、发送请求
response=requests . get(URL=' http://www . IP 3366 . net/free/',headers=request_header())
# text=response . text . encode(' ISO-8859-1 ')
# print(text.decode('gbk '))
三、解析数据
我们只需要解析ip和端口。
使用xpath解析(我个人比较喜欢)(当然还有很多解析方法,比如正则化,css选择器,BeautifulSoup等等)。
#使用xpath解析并提取数据ip和端口
html=etree。HTML(响应.文本)
tr _ list=html . XPath('/html/body/div[2]/div/div[2]/table/tbody/tr ')
对于tr_list中的td:
ip_=td.xpath('。/td[1]/text()')[0] #ip
Port _=td.xpath('。/td [2]/text ()') [0] # port
proxy=IP _ ':' port _ # 115 . 218 . 5 . 5:9000
四、构建ip代理池,检测ip是否可用
#构建代理ip
proxy=ip ':'端口
代理={
http': 'http://'代理,
https': 'http://'代理,
# 'http ':代理,
# 'https ':代理,
}
尝试:
response=requests . get(URL=' 3359www.baidu.com/',headers=请求标题()、代理=代理、超时=1) #设置超时,使响应等待1秒
response.close()
如果响应.状态_代码==200:
打印(代理,' \033[31m可用\033[0m '))
否则:
打印(代理,“不可用”)
除了:
打印(代理,“请求例外”)
五、完整代码
导入请求#导入模块
从lxml导入etree
从fake_useragent导入用户代理
#简单的反抓取,设置一个请求头伪装成浏览器
定义request_header():
标题={
#' user-agent': useragent()。常见浏览器(如Firefox、Google)的随机# Request头伪装
' User-agent': useragent()。谷歌浏览器
}
返回标题
'''
创建两个列表来存储代理ip。
'''
All_ip_list=[] #用于存储从网站抓取的ip。
Usable_ip_list=[] #用于存储ip通过检测后是否可以使用。
#发送请求并获得响应
def发送请求():
#抓取7页,可自行修改。
对于范围(1,8)内的I:
打印(f '正在抓取页面{i} …')
response=requests . get(URL=f ' http://www . IP 3366 . net/free/?page={i} ',headers=request_header())
text=response . text . encode(' ISO-8859-1 ')
# print(text.decode('gbk '))
#使用xpath解析并提取数据ip和端口
html=etree。HTML(文本)
tr _ list=html . XPath('/html/body/div[2]/div/div[2]/table/tbody/tr ')
对于tr_list中的td:
ip_=td.xpath('。/td[1]/text()')[0] #ip
Port _=td.xpath('。/td [2]/text ()') [0] # port
proxy=IP _ ':' port _ # 115 . 218 . 5 . 5:9000
all_ip_list.append(代理)
Test_ip(proxy) #开始检查获取的ip是否可以使用。
打印(“抓取完成!”)
打印(f '抓取到的互联网协议(互联网协议的缩写)个数为:{len(all_ip_list)} ')
打印(f '可以使用的互联网协议(互联网协议的缩写)个数为:{len(usable_ip_list)} ')
打印('分别有:\n ',可用互联网协议(Internet Protocol的缩写)列表)
#检测互联网协议(互联网协议的缩写)是否可以使用
定义测试ip(代理):
#构建代理互联网协议(互联网协议的缩写)
代理={
http': 'http://'代理,
https': 'http://'代理,
# 'http ':代理,
# 'https ':代理,
}
尝试:
响应=请求。获取(URL=' https://www。百度一下。com/',headers=request_header(),proxies=proxies,timeout=1) #设置超时,使响应等待1s
response.close()
如果响应。状态_代码==200:
可用ip列表附加(代理)
打印(代理,' \033[31m可用\ 033[0m ']
否则:
打印(代理不可用)
除了:
打印(代理请求异常)
if __name__=='__main__ ':
发送请求()
总结
到此这篇关于计算机编程语言爬虫实现搭建代理互联网协议(互联网协议的缩写)池的文章就介绍到这了,更多相关计算机编程语言代理互联网协议(互联网协议的缩写)池内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。