这阵子写了点爬虫,目前已顺利将目标网站数据爬下来。现在我想要给程序的请求加个 ip 代理池。
初次学习,产生了两个疑惑,可能问题太过小白,因此没能在网上找到答案,在此特来请教下各位大佬。
1 、如果我们使用的 ip 代理池中某个 ip 失效了,requests 请求是否会自动帮我们从 IP 代理池换个新的 ip 重新进行请求,还是直接就挂掉?
2 、同个 session 下进行有不同的 post 请求,如果前后请求 ip 出现不一样,是否会翻车(后面的是否会请求失败)
3 、求大佬推荐免费的代理池,因为目前只是个人学习乐趣,暂不考虑收费代理池。
以下是我爬虫程序的核心代码:
session = requests.Session()
proxies = {
"http":"http://ip:端口号"
"https":"https://ip:端口号"
}
session.get(url, proxies=proxies)
session.post(url, data, proxies=proxies)
session.close()
1
mckelvin 2020-06-26 22:24:02 +08:00
先考虑下能不能通过 x-forwarded-for 头来伪造 IP
|
2
jeeyong 2020-06-26 23:25:54 +08:00
不是直接人采集任务去判断代理 IP 是否可用吧?
我都是先判断 ip 是否可用, 可用的话压入一个队列. 需要用的时候取出来... 当然每个 ip 的生命周期有多长就要看你选的 ip 怎么样了. 推荐能用的在 30 秒内用完. |
3
Cy86 2020-06-27 07:18:10 +08:00
1. 貌似没有, 我都是 try 保护自己写换 ip 逻辑
2. 最好不要, 如果有反爬注意这块的话 会翻车, 可以先测试下容忍度 3. Github 上搜 ip 代理池, 有一堆, 最好从中获取这些网站, 然后自己爬下来写代理池 老白建议: 先给你个 开放代理:ip.ihuan.me 最好按一楼说的试一下, 比如爬 91 这招就贼好使, 但也要控制速度, 每秒 1000 的话 会封 ip 如果要爬的域名是大厂 or 比较有价值,这种反爬比较严重,那还是直接买代理吧, 开放代理都差不多封完了 |
4
xingshu1990 2020-06-27 08:33:01 +08:00
建议还是用阿布云的收费(1 元 1 小时的那种可以玩玩),这里还有接入文档: https://www.abuyun.com/http-proxy/dyn-manual.html
![QQ 截图 20200627082317.png]( https://i.loli.net/2020/06/27/spVvoz239ydeKxt.png) ![QQ 截图 20200627082339.png]( https://i.loli.net/2020/06/27/lLA2zHMCJux1yYp.png) 我看了一下网络上的教程 好像没有说 requests 自带更换 IP 请求。 那只能是写 try except,另外阿布云目前只是提供国内 IP. |
5
freakxx 2020-06-27 11:19:17 +08:00
1 、如果我们使用的 ip 代理池中某个 ip 失效了,requests 请求是否会自动帮我们从 IP 代理池换个新的 ip 重新进行请求,还是直接就挂掉?
requests 不会, 但你可以自己封多一层 每次随机从 ip 池中拿, 写个修饰器,或者用 partial 事先把 headers 包好。 2 、同个 session 下进行有不同的 post 请求,如果前后请求 ip 出现不一样,是否会翻车(后面的是否会请求失败) 这个一般不会,看反爬的容忍度,你就直接试下不就好咯。 |
7
Kvip OP @mckelvin x-forwarded-for 是确实是一种不错的解决思路,我查看了下其原理,应该可以更简便地解决我的问题,明天深入测试下,感谢您提供了一个非常不错的思路。
|
9
Kvip OP @xingshu1990 谢谢您的提供的网站,我会考虑的
|