当前位置:首页 > 资讯 > 正文

[笔记]搜索引擎-实验报告-实验一

[笔记]搜索引擎-实验报告-实验一

  • 熟悉常用的搜索引擎
  • 熟练使用搜索引擎检索信息
  • 掌握爬虫实现的基本原理
  • 掌握主题爬虫的实现技术
  • 掌握动态页面的采集技术
  • 掌握深度页面的采集技术

1. Web 服务器连接器

DNS 缓存

使用python 第三方库 可以实现对任意域名的DNS解析,在对网页的爬取过程中,为了减小每次爬取时对域名DNS的解析这一过程的网络消耗,可以预处理出所有的域名的实际ip地址,完成一个对域名解析的DNS缓存,可以使用列表的另一个类似的容器:字典实现(当然也可以自己用列表实现字典),具体的代码如下:

 
 
Robots文件解析
错误和异常处理
  • 对于前一个网址的访问,程序返回的是 404,页面不存在 ,因为该请求文件不存在
  • 对于后一个网址的访问,程序返回的是 Error 请求错误,url中没有指定访问的方式,添加 既可以正常访问,返回200

2. 超链接(URL)提取和过滤

URL 提取方法

为了能够提取出所有的超链接,可以将正则表达式中的 去掉,即将匹配的规则扩大到所有 a标签中的 href 属性的值,对于那些相对链接,可以在已知当前页面地址的情况下,使用 来实现相对地址向绝对地址的转换。

3. 爬行策略搜索

通过整合上面各个模块,分别使用dfs和bfs实现一个爬虫:

公共模块部分
RobotsParse.py 对网站robots.txt的解析
 
URLRequest.py 对指定url的抓取

对于这个项目,仅爬取所有的html文件,故对其他二进制文件将不会请求下载,可以通过 来控制对文件的下载。

 
HTMLParse.py 对给定的html页面进行分析,获得所有超链接

使用正则表达式: 提取出所有的a标签后的超链接,剔除不符合要求的链接,并对相对链接进行拼接得到绝对链接。

 
DFSspider.py 深度优先搜索爬虫

使用深搜的思想,爬取页面的所有链接:

 
BFSspider.py 广度优先搜索爬虫

使用广搜的思想进行爬取网页:

 
mian.py 项目入口

初始化测试等必要的参数,分别调用深搜和广搜的爬虫对同一网站进行爬取页面:

 
测试结果
 

可以看出,深搜会不断的对网页的最开始的链接进行优先爬取,深度不断地递增,直到最深的页面所有链接都被访问后才会返回上一个指向它的页面进行爬取;对于广搜爬虫,会爬完一个页面的所有连接后,才会爬取第二个页面下的所有链接;深搜的过程可以看出从网站的某一根目录到其他页面的深度,而广搜的过程可以看出每一个页面所包含的页面。

4. 页面内容提取

html.parser 的使用
 

运行结果:

 

可以看出三个函数分析出了每一个标签的开始、内容以及结束等信息

lxml 的使用
 
 

使用lxml提取出第一个html中所有的h1标签的值,提取出后一个html中所有的表格信息以及单独提取出最后一行

BeautifulSoup 的使用
 
 

通过bs4来提取每一个标签内的值

对于计算余弦相似度,可以利用公式: 来计算

 
 

(1) 构造带参数的 URL,利用参数传递动态请求;

一些网页的数据请求通过对url赋值来实现数据的传输,所以只需要观察构造出符合的url即可:

 
 

对于参数间使用 来连接,url和参数间使用 来连接

(2) 构造 Cookie 携带参数,利用 HTTP 头部传递动态请求的参数;

 
 

将浏览器中的cookie保存到本地,使用cookie对网页请求,可以模拟登录爬取网页

(3) Ajax 的动态请求技术;

对于一些网站,其页面的数据是动态变化的,网页的部分数据是通过ajax等动态请求的:

 
 

(4) 模拟浏览器技术

在爬取一些可能针对不懂访问者的页面,需要模拟真实登录者来爬取数据,此时要规定 以及 等参数

 
 

因为可能时间比较久,实验指导书上的示例代码实际上因为目标网站的页面更新已经不能使用了,需要修改一些地方:

  • 原来的请求后的页面是分页的,所以有一步获取分页个数的操作,现在页面没有分页了,所以注释掉了该部分代码(也有可能是测试关键字返回的页面内容不够)
  • 新的页面的一些数据,如书名、作者、评论数等等在html中的class属性已经被更改,所以要重新观察,改变bs中的操作
 

最后查看同一目录下的结果文件:

最新文章