3.1 假设有两个文档集合,较小的集合中全部都是有用的、正确的、高质量的信息。较大的集合中含有一些高质量的文档,但还有一些低质量的、过时的、书写较差的文本。只对较小的集合建立搜索引擎的原因是什么?对两个集合都建立搜索引擎的原因是什么?
3.2 假设有一个网络连接,每秒可以传输10MB的数据。如果每个网页大小为10K,需要500毫秒进行传输,网络爬虫需要多少个线程才能完全利用网络连接?如果爬虫在对同一网络服务器发出的不同请求之间需要等待10秒钟,系统每秒钟最少需要连接多少台网络服务器,才能充分地利用网络连接?
答:传输速率10MB/s,网页平均大小为10K,那么爬虫程序每秒可以备份1K个页面。又每个页面需要500ms进行传输,用1K*500ms=500s,这意味着一秒内传输1K个页面需要使用500个连接,在礼貌策略下等待10s,因此系统每秒钟最少需要连接5000台网络服务器才能有效地利用网络连接。
3.3 在信息采集过程中,使用HEAD请求而不是GET请求的优点是什么?什么时候爬虫需要使用GET请求而不是HEAD请求?
答:1.HTTP协议有一个称为HEAD的特殊请求,使得检查页面是否发生变化更加容易了。HEAD请求只返回页面的头部信息,而不是页面的内容。2.在爬虫发现请求页面的内容发生变化的时候,需要通过GET请求获取目标页面的内容,此时使用GET请求,而不是HEAD请求。
注:HEAD请求中Last-Modified的值指出了页面内容最后一次发生变化的时间。可以看到,在对GET请求进行响应时,这个日期信息也随着响应一起发送。这就允许网络爬虫对上一次从GET请求接收的日期与HEAD请求中得到的Last-Modified的值进行比较。
3.4 爬虫为什么不使用POST请求?
答:虽然爬虫也可以通过使用POST请求获取网页。除了POST请求可以向服务器发送额外的请求信息之外,它和GET请求类似,习惯上,GET请求用于抓取已经在服务器上存在的数据,而POST请求用于告诉服务器一些事情。当你点击一个按钮购买商品或者对网页进行编辑时,就可以使用POST请求。如果运行一个爬虫程序,这个惯例是很有用的。由于只是发送了一个GET请求,就有助于确保网络爬虫不会再无意间去购买一件商品。
3.5 给出本章中提到的组成深层网络的三种站点类型的名字。
答:私人站点(private site)、表单结果(form result)、脚本页面(scripted page)。
3.6 为了实现对深层网络网页的信息采集,如何设计一个系统,能够自动地将数据填写到网页表单中?使用什么样的方法能保证爬虫的行为没有破坏性(例如,不会随机地增加博客评论)?
答:两种方法:1、分析网页中的form标签,其中action属性是提交请求的url,f