小白请教各大佬点 Python requests 库的 ip 代理池的知识

2020-06-26 22:14:31 +08:00
 Kvip

这阵子写了点爬虫,目前已顺利将目标网站数据爬下来。现在我想要给程序的请求加个 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()
2667 次点击
所在节点    Python
10 条回复
mckelvin
2020-06-26 22:24:02 +08:00
先考虑下能不能通过 x-forwarded-for 头来伪造 IP
jeeyong
2020-06-26 23:25:54 +08:00
不是直接人采集任务去判断代理 IP 是否可用吧?
我都是先判断 ip 是否可用, 可用的话压入一个队列.
需要用的时候取出来...
当然每个 ip 的生命周期有多长就要看你选的 ip 怎么样了.
推荐能用的在 30 秒内用完.
Cy86
2020-06-27 07:18:10 +08:00
1. 貌似没有, 我都是 try 保护自己写换 ip 逻辑
2. 最好不要, 如果有反爬注意这块的话 会翻车, 可以先测试下容忍度
3. Github 上搜 ip 代理池, 有一堆, 最好从中获取这些网站, 然后自己爬下来写代理池
老白建议:
先给你个 开放代理:ip.ihuan.me
最好按一楼说的试一下, 比如爬 91 这招就贼好使, 但也要控制速度, 每秒 1000 的话 会封 ip
如果要爬的域名是大厂 or 比较有价值,这种反爬比较严重,那还是直接买代理吧, 开放代理都差不多封完了
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.
freakxx
2020-06-27 11:19:17 +08:00
1 、如果我们使用的 ip 代理池中某个 ip 失效了,requests 请求是否会自动帮我们从 IP 代理池换个新的 ip 重新进行请求,还是直接就挂掉?
requests 不会,
但你可以自己封多一层
每次随机从 ip 池中拿,
写个修饰器,或者用 partial 事先把 headers 包好。

2 、同个 session 下进行有不同的 post 请求,如果前后请求 ip 出现不一样,是否会翻车(后面的是否会请求失败)
这个一般不会,看反爬的容忍度,你就直接试下不就好咯。
Kvip
2020-06-28 00:00:42 +08:00
@jeeyong 感谢您提供的思路,这是一个不错的解决方案
Kvip
2020-06-28 00:03:55 +08:00
@mckelvin x-forwarded-for 是确实是一种不错的解决思路,我查看了下其原理,应该可以更简便地解决我的问题,明天深入测试下,感谢您提供了一个非常不错的思路。
Kvip
2020-06-28 00:08:02 +08:00
@Cy86 谢谢您提供的见解,一楼提供的方案确实不错,明天试下
Kvip
2020-06-28 00:09:32 +08:00
@xingshu1990 谢谢您的提供的网站,我会考虑的
Kvip
2020-06-28 00:11:38 +08:00
@freakxx 谢谢您提供的处理思路,我测试了下同 session 不同 ip 进行请求后,有效,谢谢您的解答

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/684946

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX