笔记-大规模爬虫实现逻辑,问题及解决办法

笔记-大规模爬虫实现逻辑,问题及解决办法

1.     简单爬虫的实现逻辑

第一步:爬取种子urls;

第二步:解析response,获得新的urls;

第三步:重复1、2步,达到指定条件后结束爬取。

2.     爬取100000个网页的实现逻辑

如果仍然按上述方法处理,问题来了:

  1. 总耗时太长:解决办法是使用多线程,分布式;
  2. url管理:使用多线程,分布式以后,应该设计一个数据结构(LIFO,FIFO)来管理,而不仅仅是列表;功能至少包括去重,失败后重入队列;
  3. url优先情况,对不同的url,应该使用不同的优先级;
  4. 爬取深度问题:深度与url数是指数上涨的;
  5. ban问题:对于规模够大的爬虫,很容易被识别然后禁止访问,具体详见下文:

爬虫识别方法及反反爬方法:

  1. headers识别:简单来说就是非正常http头识别:

    解决办法:当然是伪装headers;

    关键词:多个header随机,refer,禁cookie;

  2.动态网页:很多网站使用动态加载技术,流行SPA;

  解决办法:破解js,也可以使用浏览器模拟;

3.IP访问频率识别:对于爬虫,一般情况是大规模访问的,网站可以根据这一特点对高频访问的IP进行禁止

  解决办法:总而言之,换IP,控制频率;

  建立代理池然后轮询;

  ADSL重拨;

4.蜜罐:部分网页会在网页中放置正常用户不可见或不会触发的控件,链接,爬虫一旦触发就被ban;

  解决办法:人工识别然后在代码中避免触发,或使用浏览器模拟;

5.人类行为鉴别:部分网站使用人类行为轨迹鉴别爬虫,比如浏览网页停留时长,鼠标移动轨迹;

  解决办法:使用浏览器模拟:Selenium,PHANTOMJS

6.验证码:简单的可以使用图片处理解决,正规有价值的项目可以接入打码平台;

7.封账号:

  对于个人项目这个真没办法,解决成本太高,但一般通过降低频率可以避开;

  对于正式项目,只要收益足够,总会有解决办法的。

猜你喜欢

转载自www.cnblogs.com/wodeboke-y/p/9072453.html