java抓取网页内容(写爬虫你一定要关注以下5个方面:1.如何抽象整个互联网)
优采云 发布时间: 2022-03-30 07:03java抓取网页内容(写爬虫你一定要关注以下5个方面:1.如何抽象整个互联网)
编写爬虫时,必须注意以下5个方面:
1.如何抽象整个互联网
抽象是一个无向图,网页是一个节点,网页中的链接是有向边。
2.爬取算法
采用优先级队列调度,不同于纯BFS。为每个网页设置一定的抓取权重,优先抓取权重较高的网页。对于权重的设置,要考虑的因素有: 1. 是否属于比较流行的网站 2. 链接长度3. 链接到的权重网页4. 页面被指向的次数等
进一步考虑,对于流行的网站,不能无限爬取,所以需要二次调度。首先调度要爬取哪个网站,然后在选择要爬取的网站 之后调度在那个网站 中爬取哪些网页。这样做的好处是限制单个网站的爬取非常有礼貌,同时也给了其他网站页面一些爬取的机会。
3.网络模型
分别考虑单机爬取和分布式爬取的情况。对于 Windows 单机,可以使用 IOCP 完成端口进行异步抓包。这种网络接入方式可以最大限度地利用空闲资源。因为网络访问需要等待,如果只是简单的同时开启多个线程,那么计算机在线程之间切换会花费大量时间,处理抓包结果的时间会非常少。IOCP可以实现几十个线程用几个线程同步抓取的效果。对于多机爬取,需要考虑机器的分布,比如爬取亚洲站点,使用亚洲范围内的计算机等等。
4.实时
新闻网页的爬取一般由单独的爬虫完成。抓取新闻网页的爬虫的权重设置与普通爬虫不同。首先,您需要筛选新闻来源。有两种方法。一是手动设置新闻来源,比如新浪首页,二是使用机器学习。新闻源可以定义具有大量链接和频繁更改链接内容的网页。从新闻源网页开始,向下爬取一定级别限制的网页,再根据网页中的时间戳信息判断,即可添加新闻网页。
5.网页更新
一个网页被抓到后,有些网页会继续变化,有些则不会。这里需要设置一些网页抓取的活力信息。当一个新的网页链接被发现时,它的生命力时间戳信息应该是它被发现的时间,表示需要立即爬取。当一个网页被爬取时,其生命力时间戳信息可以设置为x分钟以后,那么在x分钟后,可以根据这个时间戳判断该网页,需要立即再次爬取。一个网页被第二次抓取后,需要与之前的内容进行对比。如果内容一致,下次爬取的时间会延长。例如,在爬行之前将其设置为 2x 分钟,直到达到有限的长度,例如半年或三年。月(这个值取决于你的爬虫能力)。如果更新了,需要缩短时间,比如x/2分钟再爬取。