Python之爬虫 搭建代理ip池
文章目录
- 前言
- 一、User-Agent
- 二、发送请求
- 三、解析数据
- 四、构建ip代理池,检测ip是否可用
- 五、完整代码
- 总结
前言
在使用爬虫的时候,很多网站都有一定的反爬措施,甚至在爬取大量的数据或者频繁地访问该网站多次时还可能面临ip被禁,所以这个时候我们通常就可以找一些代理ip来继续爬虫测试。下面就开始来简单地介绍一下爬取免费的代理ip来搭建自己的代理ip池:
本次爬取免费ip代理的网址:http://www.ip3366.net/free/
提示:以下是本篇文章正文内容,下面案例可供参考
一、User-Agent
在发送请求的时候,通常都会做一个简单的反爬。这时可以用fake_useragent模块来设置一个请求头,用来进行伪装成浏览器,下面两种方法都可以。
from fake_useragent import UserAgent
headers = {# 'User-Agent': UserAgent().random #常见浏览器的请求头伪装(如:火狐,谷歌)'User-Agent': UserAgent().Chrome #谷歌浏览器}
二、发送请求
response = requests.get(url='http://www.ip3366.net/free/', headers=request_header())# text = response.text.encode('ISO-8859-1')# print(text.decode('gbk'))
三、解析数据
我们只需要解析出ip、port即可。
使用xpath解析(个人很喜欢用)(当然还有很多的解析方法,如:正则,css选择器,BeautifulSoup等等)。
#使用xpath解析,提取出数据ip,端口html = etree.HTML(response.text)tr_list = html.xpath('/html/body/div[2]/div/div[2]/table/tbody/tr')for td in tr_list:ip_ = td.xpath('./td[1]/text()')[0] #ipport_ = td.xpath('./td[2]/text()')[0] #端口proxy = ip_ + ':' + port_ #115.218.5.5:9000
四、构建ip代理池,检测ip是否可用
#构建代理ipproxy = ip + ':' + portproxies = {"http": "http://" + proxy,"https": "http://" + proxy,# "http": proxy,# "https": proxy,}try:response = requests.get(url='https://www.baidu.com/',headers=request_header(),proxies=proxies,timeout=1) #设置timeout,使响应等待1sresponse.close()if response.status_code == 200:print(proxy, '\033[31m可用\033[0m')else:print(proxy, '不可用')except:print(proxy,'请求异常')
五、完整代码
import requests #导入模块
from lxml import etree
from fake_useragent import UserAgent
#简单的反爬,设置一个请求头来伪装成浏览器
def request_header():headers = {# 'User-Agent': UserAgent().random #常见浏览器的请求头伪装(如:火狐,谷歌)'User-Agent': UserAgent().Chrome #谷歌浏览器}return headers'''
创建两个列表用来存放代理ip
'''
all_ip_list = [] #用于存放从网站上抓取到的ip
usable_ip_list = [] #用于存放通过检测ip后是否可以使用#发送请求,获得响应
def send_request():#爬取7页,可自行修改for i in range(1,8): print(f'正在抓取第{i}页……')response = requests.get(url=f'http://www.ip3366.net/free/?page={i}', headers=request_header())text = response.text.encode('ISO-8859-1')# print(text.decode('gbk'))#使用xpath解析,提取出数据ip,端口html = etree.HTML(text)tr_list = html.xpath('/html/body/div[2]/div/div[2]/table/tbody/tr')for td in tr_list:ip_ = td.xpath('./td[1]/text()')[0] #ipport_ = td.xpath('./td[2]/text()')[0] #端口proxy = ip_ + ':' + port_ #115.218.5.5:9000all_ip_list.append(proxy)test_ip(proxy) #开始检测获取到的ip是否可以使用print('抓取完成!')print(f'抓取到的ip个数为:{len(all_ip_list)}')print(f'可以使用的ip个数为:{len(usable_ip_list)}')print('分别有:\n', usable_ip_list)
#检测ip是否可以使用
def test_ip(proxy):#构建代理ipproxies = {"http": "http://" + proxy,"https": "http://" + proxy,# "http": proxy,# "https": proxy,}try:response = requests.get(url='https://www.baidu.com/',headers=request_header(),proxies=proxies,timeout=1) #设置timeout,使响应等待1sresponse.close()if response.status_code == 200:usable_ip_list.append(proxy)print(proxy, '\033[31m可用\033[0m')else:print(proxy, '不可用')except:print(proxy,'请求异常')if __name__ == '__main__':send_request()
总结
以上就是要讲的内容,很简单,但希望可以帮助到大家。
Python之爬虫 搭建代理ip池相关推荐
- 利用多线程爬虫搭建代理ip池的两种方法(含源码)
搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...
- Python搭建代理IP池(一)- 获取 IP
使用爬虫时,大部分网站都有一定的反爬措施,有些网站会限制每个 IP 的访问速度或访问次数,超出了它的限制你的 IP 就会被封掉.对于访问速度的处理比较简单,只要间隔一段时间爬取一次就行了,避免频繁访问 ...
- python爬虫设置代理ip池
在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,那如何解决呢?使用代 ...
- Python爬虫添加代理IP池(新手)
给爬虫添加代理IP池 我们在运行爬虫的过程中由于请求次数过多经常会遇到被封IP的情况,这时就需要用到代理IP来解决.代理IP的原理,简单来说就像在本机和web服务器之间开一个中转站,把本机的请求交给代 ...
- Python搭建代理IP池(三)- 检测 IP
在获取 IP 时,已经成功将各个网站的代理 IP 获取下来了,然后就需要一个检测模块来对所有的代理进行一轮轮的检测,检测可用就设置为满分,不可用分数就减 1,这样就可以实时改变每个代理的可用情况,在获 ...
- python爬虫设置代理ip池——方法(一)
""" 在使用python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术,高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网 ...
- Python搭建代理IP池(二)- 存储 IP
上一文写了如何从代理服务网站提取 IP,本文就讲解如何存储 IP,毕竟代理池还是要有一定量的 IP 数量才行.存储的方式有很多,直接一点的可以放在一个文本文件中,但操作起来不太灵活,而我选择的是 My ...
- 搭建代理IP池的方法
突破次数的限制就可以使爬虫更高效的工作,代理IP是突破次数限制,提高爬虫高效工作的最好的工具.所以,很多人都想通过建立IP池的方法,实现换IP突破限制,那么这IP池如何进行搭建呢? 一,免费搭建代理I ...
- 使用爬虫实现代理IP池之放弃篇
2019独角兽企业重金招聘Python工程师标准>>> 啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的) ...
最新文章
- 产生指定长度的随机字符串
- re.findall为什么返回的元素会是个元素为元组的列表类型呢
- 认识 MySQL 和 Redis 的数据一致性问题
- hue迁移数据库到mysql
- 09-Windows Server 2012 R2 会话远程桌面-标准部署-使用PowerShell进行部署2-2
- HTML中淡入的动画效果,CSS3实现页面淡入动画特效代码
- db2dual_db2 oracle 创建 序列 | 学步园
- Android开发指南(39) —— Testing Fundamentals
- gimp 抠图_gimp软件如何实现抠图?
- 亿图图示输入文字后画面自动缩小
- 联想Lenovo手机平板安装谷歌服务框架Google, Play商店,安装套件GMS
- 抖音小店怎么去添加淘宝链接?哪种推广适合淘客丨国仁网络资讯
- win7与xp 字体命名问题影响打印
- 推荐一款笔记软件 Notion
- play.html文件,playframework – 如何使用play框架渲染一个简单的html页面?
- Everything研究之快速获取USN记录的文件路径
- EMS是中国邮政提供的一种快递服务。
- 解决fatal error C1859: “Debug\thread5.pch”意外的预编译头错误的方法
- Centos7 docker完美卸载
- 如何使用Python爬取基金数据,并可视化显示