python爬虫 定位和选择网页内容的几种方式比较 正则表达式\libxml、bs4、lxml和xpath、css选择器

1. 首先摘抄一下之前的教程内容,确定一下这些概念之间的逻辑关系,如果看过就可以略去

    A. 爬虫定位网页信息的步方法分为两种:匹配文本、建树搜索;下面我们按照这两类方  法,具体介绍一下各个工具:

  • 两类工具
    • 第一类:匹配文本
      • 匹配文本的意思是直接在文本内容上做匹配;
      • 例子:正则表达式;正则表达式就是直接按照一个特定的规则去匹配文本,不需要对网页的结构进行分析,只需要对需要定位的信息的上下文进行分析;
    • 第二类:建树搜索
      • 建树搜索的流程分为两步:第一步是建树,也就是解析;第二步是搜索,搜索的方法是根据树的结构,搜索想要的内容。
      •  解析大体上有两个方法:dom,sax;各个浏览器大多采用这两个标准去自己实现一个方法,也有libxml,libxslt,python内置的解析库等(对java不太熟悉,在网上查阅过程中,发现java有很多解析库);
      • 搜索的例子:在搜索上,我们有两类方法,一类是xpath,一类是css选择器;这两个方法其实对应解析器的两类作用对象:文本和样式表;在chrome、firefox浏览器里面可以直接选择这两类方法所对应的路径;
      • 最后我们经常使用的比较成熟的库:lxml,bs4,xquery,xpoint:

     B. 根据网页类型的不同,我们再来确定我们使用的工具:

  • 静态网页
    • 我们获取的信息由于是html或者css里面的,我们直接通过匹配文本或者是建树搜索都可以完成定位信息的功能;
    • 但是注意上面提到的一种特殊情况
    •  如果信息是在js代码的内部一次性发送过来(注意这里是一次性发送过来,不是异步发送),我们需要用匹配文本的方式去匹配;
    • 如果这种情况下我们用了当时的渲染js代码的方法,我们就也可以用建树搜索了;
  • 动态网页
    • 如果获取网页信息是用分析api的方法:我们从json数据中拿到信息;
    • 如果我们的网页信息是用js引擎渲染的方法,我们又有两种处理方法:
    • 第一种是我们用文本匹配、或者建树搜索;
    • 第二种是我们使用js引擎直接操作dom api,找出相应的内容;这种方法在上面介绍定位信息的工具的时候没有讲,适合js比较熟练的同学;
    • 第三种是我们用模拟请求法获取信息时,这个时候用文本匹配、或者建树搜索都可以;

2. 然后对比一下这几个的具体的关系

A. 正则表达式

由上面的概念可知,正则表达式是独立的一个体系,使用文本匹配的方式,剩下的都是先建树再搜索的一环;

优点是速度快,准确程度高;

缺点是可读性差,不宜修改,编写困难;

B. libxml、lxml、bs4

这些是用来解析网页成为树的,并可以附加xpath、css选择器来寻找文档内容;

  • libxml的特点是用编写成的;
    • 优点是速度快;
    • 缺点是用C 写爬虫的人比较少;
  • lxml的特点是在python中继承了libxml:
    • 优点是速度相对快,
    • 缺点是xpath的表达式比较复杂,当然lxml也支持选择器,这个可能也就不是个缺点了;
  • bs4
    • 优点是:bs4支持多种解析器,其中包括lxml,也方便配合css选择器;
    • 缺点是:性能上和lxml有一定的差距;

C. xpath,css选择器

这两个内容是用来选择树中的内容的,个人觉得xpath和css如果单纯说编写难度的话,前者更高,速度上前者略慢,但是准确性上前者更强。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章