泛域名解析网站如何避免被百度爬虫爬死(悬赏88元) - 搜外问答

优采云 发布时间: 2020-05-14 08:00

  话说爬虫为何会深陷循环呢?答案很简单,当我们重新去解析一个早已解析过的网页时,就会身陷无限循环。这意味着我们会重新访问哪个网页的所有链接,然后不久后又会访问到这个网页。最简单的事例就是,网页A包含了网页B的链接,而网页B又包含了网页A的链接,那它们之间都会产生一个闭环。

  那么我们怎么避免访问早已访问过的页面呢?答案很简单,设置一个标志即可。整个互联网就是一个图结构,我们一般使用DFS(深度优先搜索)和BFS(广度优先搜索)进行遍历。所以,像遍历一个简单的图一样,将访问过的结点标记一下即可。

  爬虫的基本思路如下:

  根据URL获取相应页面的HTML代码

  利用正则匹配或则JSoup等库解析HTML代码,提取须要的内容

  将获取的内容持久化到数据库中

  处理好英文字符的编码问题,可以采用多线程提升效率

  爬虫基本原理

  更笼统意义上的爬虫着重于若果在大量的URL中找寻出高质量的资源,如何在有限的时间内访问更多页面等等。网络爬虫的基本工作流程如下:

  首先选定一部分悉心选购的*敏*感*词*URL;

  将这种URL装入待抓取URL队列;

  从待抓取URL队列中取出待抓取的URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载出来,存储进已下载网页库中。此外,将这种URL放进已抓取URL队列。

  分析已抓取URL对应的网页,分析页面里包含的其他URL,并且将URL装入待抓取URL队列,从而步入下一个循环。

  有几个概念,一个是发http请求,一个是正则匹配你感兴趣的链接,一个是多线程,另外还有两个队列。

  爬虫难点1支路

  网络爬虫有时候会深陷循环或则支路中,比如从页面A,A链接到页面B,B链接到页面C,页面C又会链接到页面A。这样就深陷到支路中。

  环路影响:

  消耗网路带宽,无法获取其他页面

  对Web服务器也是负担,可能击垮该站点,可能制止正常用户访问该站点

  即使没有性能影响,但获取大量重复页面也造成数据冗余

  解决方案:

  简单限定爬虫的最大循环次数网页如何防止爬虫,对于某web站点访问超过一定阀值就跳出,避免无限循环

  保存一个已访问url列表,记录页面是否被访问过的技术

  1、二叉树和散列表,快速判断某个url是否访问过

  2、存在位图

  就是newint[length],然后把第几个数置为1,表示早已访问过了。可不可以再优化,int是32位,32位可以表示32个数字。HashCode会存在冲突的情况,

  两个URL映射到同一个存在位上,冲突的后果是某个页面被忽视(这比死循环的恶作用小)

  3、保存检测

  一定要及时把已访问的URL列表保存到硬碟上,防止爬虫崩溃,内存里的数据会遗失

  4、集群,分而治之

  多台机器一起爬虫,可以按照URL估算HashCode,然后按照HashCode映射到相应机器的id(第0台、第1台、第2台等等)

  难点2URL别称

  有些URL名称不一样,但是指向同一个资源。

  URl1URL2什么时候是别称

  默认端口是80

  %7F与~相同

  %7F与~相同

  服务器是大小写无关

  默认页面为

  ip和域名相同

  难点3动态虚拟空间

  比如月历程序,它会生成一个指向下一个月的链接,真正的用户是不会不停地恳求下个月的链接的。但是不了解这种内容特点的爬虫蜘蛛可能会不断向那些资源发出无穷的恳求。

  抓取策略

  一般策略是深度优先或则广度优先。有些技术能促使爬虫蜘蛛有更好的表现

  广度优先的爬行,避免深度优先深陷某个站点的支路中,无法访问其他站点。

  限制访问次数,限定一段时间内机器人可以从一个web站点获取的页面数目。

  内容指纹,根据页面的内容估算出一个校验和,但是动态的内容(日期,评论数量)会妨碍重复测量

  维护黑名单

  人工监视,特殊情况发出电邮通知

  动态变化,根据当前热点新闻等等

  规范化URL,把一些转义字符、ip与域名之类的统一

  限制URL大小,环路可能会促使URL宽度降低,比如/,/folder/网页如何防止爬虫,/folder/folder/……

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线