这次主要是对 XPath、BeautifulSoup 和 re(正则表达式)三种网页解析方式进行总结。

XPath表达式

首先来看XPath表达式。维基百科中对XPath表达式的解释是,最常见的XPath表达式是路径表达式(XPath这一名称的另一来源)。路径表达式是从一个XML节点(当前的上下文节点)到另一个节点、或一组节点的书面步骤顺序。这里可以以一个树形结构来理解。来查看浏览器网页代码,按下 F12 可以查看网页,这里以百度搜索首页为例进行分析。常用的两种方法可以直接复制 XPath 也可以自己手动选择路径。

 Copy XPath

可以通过右键标签,依次选择 Copy-Copy XPath 对标签路径进行复制,如下图

python爬虫爬取数据分析 python爬虫分析_python爬虫爬取数据分析

 可以得到标签路径:

//*[@id="u_sp"]/a[2]

手动选择路径

在手动选择之前,先了解一下 XPath 语法。下面用一个列表简单展示一下语法及其用法。这里需要用到一个插件可能更加方便地去查找路径:XPath Helper 或者 极简插件(Google商店的国内镜像版)

descendant-or-self

自身引用及子孙节点

//

child

子节点

/

attribute

属性

@

self

自己

.

 //tag 可以查找网页中所有的tag节点。在本例中,例如://a 可以查看首页的所有 a 标签,利用 XPath Helper 可以得到标签中的非标签字符内容。这里需要注意的是,当利用 python 进行提取的时候,此种方法提取的是整个 a 标签,如果想提取 a 标签下的所有非标签内容需要在后面加上/text(),即: //a/text() 来进行提取。

python爬虫爬取数据分析 python爬虫分析_python爬虫爬取数据分析_02

/tag 可以查看某节点下的子节点。在本例中,例如://div/a 可以查看所有 div 标签下的 a 标签,这里就不放图来占篇幅了。

tag[@attr="value"] 可以用来通过限定标签属性来更加精确的提取标签,也可以用来提取标签属性的值。例如://div[@id="u_sp"]/a 可以提取属性 id 为 u_sp 的 div 标签下的所有 a 标签,即下图这一条的内容。

python爬虫爬取数据分析 python爬虫分析_标签属性_03

 另外是 tag/@attr 标签在提取标签属性的值上的用法,例如://div[@id="u_sp"]/a/@href 可以提取属性 id 为 u_sp 的 div 标签下的所有 a 标签中的 href 属性的值。

python爬虫爬取数据分析 python爬虫分析_路径表达式_04