为爬虫构建代理池

2016-07-15 18:10:31 +08:00
 tikazyq

为了避免爬虫被封 IP ,网上搜索教程说需要建立代理池。但是付费代理都好贵。。。不过好在网上已经有不少免费提供代理的网站了。因此,我打算写个爬虫去获取这些免费 IP ~

策略

难点

  1. 如何去验证维护这些代理地址
  2. 如何知道哪些代理地址适合哪些网站(可用性,响应时间)
  3. 效率问题(之前写过简单的验证脚本,但是效率非常低)

小伙伴们有不有什么好的办法能解决这些问题呢?

13767 次点击
所在节点    Python
49 条回复
rapospectre
2016-07-16 13:26:06 +08:00
恰好之前做过一样的工作,当时也是需要代理,然后自己写了爬虫做自动获取和自动更新。

代理地址的话我没有去让爬虫自己选网站,而是人工筛选了几个提供免费代理的网站然后分别写了一些爬虫去爬不同的代理网站;

针对你说的难点:

1. 验证的话初次爬到的地址会直接先验证是否可用,能用再存入数据库或持久化;因为代理的不可靠性,需要定时检查抓到的代理是否可用,我是直接在 uWSGI 服务器起了一个定时任务,每半小时会检查一次,每一小时会抓一次新的代理,当然你也可以用 crontab 之类的定时任务做;
2. 直接用抓到的代理访问需要访问的网站,如果需要针对不同网站提供不同代理可以验证后把相关验证信息一起储存;
3. 效率问题好处理,网络验证操作都是 i/o 密集型任务,用协程、多线程、多进程都可以解决, python 的 gil 不影响多线程提高 i/o 密集型任务的效率

https://github.com/bluedazzle/multithreading-spider 之前我用 多线程 + queue 做的一个简单的代理爬虫, src 的 demo 里是具体例子,使用了简单的生产者消费者模型,爬到代理地址的爬虫当做生产者,验证代理可用性的爬虫当做消费者,可以显示具体任务进度。
dikensrover
2016-07-16 13:42:06 +08:00
学习了
hunk
2016-07-16 14:21:47 +08:00
大量的还是购买省事,小量的可以抓取免费服务器,需要多测试可用性。

PS :一直好奇这些代理是哪来的。曾想过写些工具软件,在其中加入代理服务的代理,出售代理服务器。
kohnv
2016-07-16 14:35:51 +08:00
@hunk 购买的其实也是不可靠的代理, 只不过人家帮你做了一个 api 封装, 你可以直接使用 api 来获取而不用自己抓了. 这些代理很多都不能用.

貌似网上的代理都是他们开了几台 vps 然后 24 小时全网连接代理常用的端口一个个试出来, 很多是网络中某个人开了代理给自己用的, 也因此可能很快这个代理就没用了.
coolloves
2016-07-16 16:13:50 +08:00
我是这样做的,先找代理网站爬下代理,然后定义验证地址来验证是否有限,然后存取
在正式用的时候,遇到无效的就记录无效次数加 1 ,成功的也记录次数加 1 ,然后一段时间内根据成功失败记录来清理代理池,留下定义多少概率的代理,
loalj
2016-07-16 22:38:46 +08:00
@kslr 我自己用的时候开过几十个并发,好像没多大问题。
lbp0200
2016-07-16 23:51:06 +08:00
长城宽带、方正宽带,自带动态 ip
regeditms
2016-08-07 10:55:47 +08:00
@jnduan 请问。付费代理那里找呢、要可用性很高的。
ji4ozhu
2017-10-10 17:22:52 +08:00

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

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

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

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

© 2021 V2EX