Python 爬虫的代理 IP 设置方法汇总
本文转载自:Python 爬虫的代理 IP 设置方法汇总 https://www.makcyun.top/web_scraping_withpython15.html
需要学习的地方:如何在爬虫中使用代理IP
Requests 和 Scrapy 中的代理 IP 设置。
摘要:对于采取了比较强的反爬措施网站来说,要想顺利爬取网站数据,设置随机 User-Agent 和代理 IP 是非常有效的两个方法,继上一篇文章介绍了随机 UserAgent 的设置方法之后,本文接着介绍如何在 Requests 和 Scrapy 中设置代理 IP。
上一篇文章见:
∞ Scrapy 中设置随机 User-Agent 的方法汇总
本文的目标测试网页选择下面这个 URL,请求该网页可以返回当前的 IP 地址:
下面,我们就先来说说 Requests 中如何设置代理 IP。
Requests
▌不使用代理
首先,先来看一下不使用代理 IP 的情况:
import requests |
运行上面的程序,会返回我们电脑本机的 IP,可以通过百度查询 IP 地址对比一下就知道了。
200 |
▌使用代理
然后,我们测试一下使用代理后的情况。
常见的代理包括 HTTP 代理和 SOCKS5 代理,前者可以找一些免费代理 IP 进行测试,由于我电脑上使用的是 Shadowsocks,所以就介绍一下 SOCKS5 代理的设置。
首先,电脑上要安装有 Shadowsocks ,如果你还没听过或者使用过这个神器,可以参考下我之前写的篇文章:
启动该软件后默认会在 1080 端口下创建 SOCKS5 代理服务,代理为:127.0.0.1:1080
,然后我们在 Requests 中使用该代理,方法很简单只需要添加一项 proxies 参数即可:
proxies = [ |
这里,proxies 参数是字典类型,键名'http'
表示协议类型,键值 'socks5://127.0.0.1:1080'
表示代理,这里添加了 http 和 https 两个代理,这样写是因为有些网页采用 http 协议,有的则是采用 https 协议,为了在这两类网页上都能顺利使用代理,所以一般都同时写上,当然,如果确定了某网页的请求类型,可以只写一种,比如这里我们请求的 url 使用的是 http 协议,那么使用 http 代理就可以,random 函数用来随机选择一个代理,我们来看一下结果:
{'http': 'socks5://127.0.0.1:1080'} |
可以看到,这里随机选择了 http 协议的代理后,返回的 IP 就是我真实的 IP 代理地址,成功代理后就可以爬一些墙外的网页了。
延伸一下,假如随机选择的是 https 代理,那么返回的 IP 结果还一样么?我们尝试重复运行一下上面的程序:
{'https': 'socks5://127.0.0.1:1080'} |
可以看到这次使用了 https 代理,返回的 IP 却是本机的真实 IP,也就是说代理没有起作用。
进一步地,我们将 url 改为 https 协议 'https://icanhazip.com'
,然后再尝试分别用 http 和 https 代理请求,查看一下结果:
#http 请求 |
可以看到,两种请求的结果和之前的刚好相反了,由于 url 采用了 https 协议,则起作用的是 https 代理,而 http 代理则不起作用了,所以显示的是本机 IP。
因此,可以得到这样的一个结论:
HTTP 代理,只代理 HTTP 网站,对于 HTTPS 的网站不起作用,也就是说,用的是本机 IP。
HTTPS 代理则同理。
▌使用付费代理
上面,我们只使用了一个代理,而在爬虫中往往需要使用多个代理,那有如何构造呢,这里主要两种方法,一种是使用免费的多个 IP,一种是使用付费的 IP 代理,免费的 IP 往往效果不好,那么可以搭建 IP 代理池,但对新手来说搞一个 IP 代理池成本太高,如果只是个人平时玩玩爬虫,完全可以考虑付费 IP,几块钱买个几小时动态 IP,多数情况下都足够爬一个网站了。
这里推荐一个付费代理「阿布云代理」,最近使用了一下,效果非常不错,5 块钱买了 5个小时,爬完了一个网站,所以没有必要为了省 5 块钱,而费劲地去搞 IP 代理池。
首次使用的话,可以选择购买一个小时的动态版试用下,点击生成隧道代理信息作为凭证加入到代码中。
将信息复制到官方提供的 Requests 代码中,运行来查看一下代理 IP 的效果:
import requests |
可以看到每次请求都会使用不同的 IP,是不是很简单?比搞 IP 代理池省事多了。
以上,介绍了 Requests 中设置代理 IP 的方法,下面我们接着介绍在 Scrapy 中如何设置。
Scrapy
▌middlewares.py 中设置
这种方法需要先在 middlewares.py 中设置代理 IP 中间件:
import random |
接着,需要在 settings.py 添加几个在西刺上找的代理 IP,格式如下:
PROXIES = [ |
然后,我们仍然以 “http://icanhazip.com" 为目标网页,运行 Scrapy 项目重复请求 5 次,查看一下每次返回的 IP 情况:
def start_requests(self): |
结果如下:
可以看到部分 IP 成功请求得到了相应,部分 IP 则无效请求失败,因为这几个 IP 是免费的 IP,所有失效很正常。
▌使用付费代理
接下来我们使用阿布云付费代理,继续尝试一下,在 middlewares.py 中添加下面的代码:
""" 阿布云ip代理配置,包括账号密码 """ |
由于,在阿布云购买的是最基础的代理,即每秒 5 个请求,因为 Scrapy 默认的并发数是 16 个,所以需要对 Scrapy 请求数量进行一下限制,可以设置每个请求的延迟时间为 0.2s ,这样一秒就刚好请求 5 个,最后启用上面的代理中间件类即可:
""" 启用限速设置 """ |
然后同样地请求 5 次,查看每次请求返回的 IP :
可以看到,每个 IP 都顺利请求成功了,所以说付费地效果还是好。
▌使用 scrapy-proxies 库代理
除了上述两种方法,我们还可以使用 GitHub 上的一个 IP 代理库:scrapy-proxies,库的使用方法很简单, 三个步骤就可以开启代理 IP。
首先,运行下面命令安装好这个库:
pip install scrapy_proxies |
然后,在 Scrapy 项目中的 settings.py 文件中,添加下面一段代码:
RETRY_TIMES = 3 # 自定义请求失败重试次数 |
最后,需要提供多个代理 IP,我们在西刺上随便找几个 IP,然后存放在 PROXY_LIST 指定的 txt 文件中即可,格式如下:
https://119.101.112.176:9999 |
然后重复之前的操作,查看代理 IP 的设置效果。
我在使用该库的过程中,发现有一些问题,不知道是配置不对还是怎么回事,效果不是太好,所以推荐使用前两种方法。
好,以上就是在 Requests 和 Scrapy 中使用代理 IP 的方法总结,如果爬虫项目不大、追求稳定且不差钱的话,建议直接上付费代理。
Python 爬虫的代理 IP 设置方法汇总的更多相关文章
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
- 代理服务器基本知识普及代理IP使用方法!
本文并未从专业角度进行详细讲解,而是从应用的角度出发来普及一些代理服务器的基本知识.文章明显是搜集多方资料的拼凑,而且比较老了,但往往越老的东西越接近事物的本质,更容易窥探到原理,对于刚接触的人来说, ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
- 第一种SUSE Linux IP设置方法
第一种SUSE Linux IP设置方法ifconfig eth0 192.168.1.22 netmask 255.255.255.0 uproute add default gw 192.168. ...
- [Linux] - CentOS IP设置方法
CentOS 7的IP设置方法: 1.手动设置IP方法 a) 运行命令,cd到目录: cd /etc/sysconfig/network-scripts/ b) 运行命令:ls -l 找到类似这个文件 ...
- python 爬虫数据存入csv格式方法
python 爬虫数据存入csv格式方法 命令存储方式:scrapy crawl ju -o ju.csv 第一种方法:with open("F:/book_top250.csv" ...
- Python爬虫beautifulsoup4常用的解析方法总结(新手必看)
今天小编就为大家分享一篇关于Python爬虫beautifulsoup4常用的解析方法总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧摘要 如何用beau ...
- python爬虫scrapy之downloader_middleware设置proxy代理
一.背景: 小编在爬虫的时候肯定会遇到被封杀的情况,昨天爬了一个网站,刚开始是可以了,在settings的设置DEFAULT_REQUEST_HEADERS伪装自己是chrome浏览器,刚开始是可以的 ...
- Python爬虫6-利用ProxyHandler设置代理服务器
GitHub代码练习地址:https://github.com/Neo-ML/PythonPractice/blob/master/SpiderPrac09_ProxyHandler.pyProxyH ...
随机推荐
- [Node.js] Setup Local Configuration with Node.js Applications
Github To stop having to change configuration settings in production code and to stop secure informa ...
- [Jest] Write data driven tests in Jest with test.each
Often, we end up creating multiple unit tests for the same unit of code to make sure it behaves as e ...
- sap scriptfom 多语言翻译
在某项目中,因为客户上线较早,非常多打印程序的form是由scriptform制做,又因为美国工厂要上线.免不了对scriptform进行多语言翻译.以下是对当中的一个交货单打印进行的多语言翻译,分享 ...
- hdu 1050 Moving Tables(迷之贪心...)
题意:有400间房间按题目中图片所给的方式排列,然后给出要移动的n张桌子所要移动的范围,每张桌子要移动的范围不能出现重叠的区域:问最少要多少次才能移动完所有的桌子. 题解思路:把题目转换下,就是有n个 ...
- hihoCoder - 1079 - 离散化 (线段树 + 离散化)
#1079 : 离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho在回国之后,又一次过起了朝7晚5的学生生活.当然了.他们还是在一直学习着各种算法 ...
- 动手分析安卓仿QQ联系人列表TreeView控件
因项目需要需要用到仿QQ联系人列表的控件样式,于是网上找到一个轮子(https://github.com/TealerProg/TreeView),工作完成现在简单分析一下这个源码. 一. 需要用 ...
- B1024 生日快乐 递归。。。
bzoj1024叫生日快乐,其实很简单,但是没看出来就很尴尬... Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括win ...
- 比较两个Json对象是否相等
一个前端同事遇到的面试题,抽空写了写,也算是个积累 1.先准备三个工具方法,用于判断是否是对象类型,是否是数组,获取对象长度 function isObj(object) { return objec ...
- HTTP权威协议笔记-10.HTTP-NG
1.HTTP发展中存在的问题 复杂性 其连接.报文.及功能逻辑之间的混合使用相当复杂,使用容易出错 可扩展性 传统流行下来的http应用很难实现扩展性,且无法兼容 性能 高延时.低吞吐 ...
- PCB Genesis加邮票孔(邮票孔增加方向判断--左右上下)实现算法
之前没解决的问题,当时一下卡在用户界面选择邮票孔增加的方向(上下左右) 与邮票孔实际方位之前的逻辑与非判断上卡壳了,导致一下没进展下去. 回头看原来如此简单 ,将此点记录一下. 1.垂直线定义:80- ...