爬虫搜索神器BeautifulSoup和XPath 的使用

一、看官网上说明

“ Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库. 它能够通过你喜欢的转换器实现惯用的文档导航, 查找, 修改文档的方式. Beautiful Soup会帮你节省数小时甚至数天的工作时间.

“ XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。

二、从原理上区别

BeautifulSoup是一个第三方的Python库,BeautifulSoup是用python写的XPath是一门语言,技术。xpath是用c写的
BeautifulSoup和XPath的原理不一样,BeautifulSoup是基于DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多。而lxml只会局部遍历。

三、如何使用

xpath 要求一定清楚文档层次结构,它通过元素和属性进行导航,可以使用绝对路径或相对路径查找,而beautifulsoup 不必清楚文档结构,可以直接找某些标签,简单粗暴。

打个比方,如果我们要找这个地址:移动互联网创新园(上海)
如用正则表达式的话,是这样描述的:它是北边是复旦软件园,门口是高架轻轨线...
如用XPath来描述的话是:它在 上海市 宝山区 逸仙路 2816号。(从大到小,绝对路径)

举栗子说明,获取首页的热门文章:

首先分析一下首页html文档结构:


爬虫搜索神器BeautifulSoup和XPath 的使用_第1张图片
首页源代码

分析一下,我们看到:

  1. 文章标题是包含在h4标签下面的a标签中;
  2. 每篇文章信息(作者,标题,阅读量,喜欢)是在一个ul标签下,有两种样式article-list thumbnails 和have-img,即有缩略图和无图

实现:

  1. BeautifulSoup:
from bs4 import BeautifulSoup  #导入库

 #html 是爬取的网页源代码, 将一段文档传入BeautifulSoup 的构造方法,就能得到一个文档的对象
soup = BeautifulSoup(html,'html.parser',from_encoding='utf-8')
#查找所有的h4标签 
links = soup.find_all("h4")

 for link in links:
       print link
  1. XPath
  from lxml import etree

  selector = etree.HTML(html)
  links = selector.xpath('//h4/a/text()')
  for link in links:
      print link

可以使用Chrome的审核元素功能来找到我们所需要提取内容的xpath

爬虫搜索神器BeautifulSoup和XPath 的使用_第2张图片
copy xpath

注意:copy出来的path:
//*[@id="list-container"]/ul[2]/li[1]/div/h4/a
是指向一个指定的内容,对比一下文档结构,如果需要提取所有文章信息(需要循环的部分),如何修改?

以上两段代码都提取到首页所有文章,打印输出的形式也不一样,soup.find_all("h4")找到的是包含文章标题和链接的所有h4标签(包含标签),selector.xpath('//h4/a/text()')找到的是h4标签下a标签中的文字内容(text())。

你可能感兴趣的:(爬虫搜索神器BeautifulSoup和XPath 的使用)