XPath语法

1.XPath 的介绍:

XPath(XML Path)是一种查询语言,它能在XML(Extensible Markup Language, 可扩展标记语言)和HTML的树状结构中寻找结点。形象一点来说,XPath就是一种根据“地址”来“找人”的语言。
用正则表达式来提取信息,经常会出现不明原因的无法提取想要内容的情况。最后即便是绞尽脑汁终于把想要的内容提取出来,却发现浪费太多时间。需要查找的内容越复杂,构造正则表达式所需要花费的时间也越多。而XPath却不一样,熟练使用XPath以后,构造不同的XPath,所需要花费的时间是一样的,所以用XPath从HTML源代码中提取信息可以大大提高效率。

在python中使用XPath,需要安装一个第三方库:lxml 。
在终端中输入: pip install lxml

2.XPath 语法:

使用XPath的代码如下:

import lxml html
selector = lxml.fromstring('网页源代码‘)
info = selector.xpath('一段xpath语句')

2.1 XPath 语句格式

获取文本:

//标签1[@属性1=“属性值1”]/标签2[@属性2=“属性值2”]/..../text()

获取属性值

//标签1[@属性1=“属性值1”]/标签2[@属性2=“属性值2”]/..../@属性n

[@属性1=“属性值1”]不是必需的,它的作用是过滤相同的标签。在不须要过滤相同标签的情况下可以省略。

2.2 xpath 提取想要的信息

XPath语法_第1张图片
获取的结果·:
XPath语法_第2张图片

2.2 XPath的特殊用法:

2.2.1 以相同字符串开头

在xpath中,属性以某些字符串开头,可以写为:

//标签[starts-with(@属性名, “相同的开头部分”)]

以“abc"开头:

XPath语法_第3张图片

结果如下:

XPath语法_第4张图片

2.2.2 属性值包含相同的字符串

//标签[contains(@属性名, “相同的开头部分”)]

XPath语法_第5张图片

结果如下:

XPath语法_第6张图片

2.3 对XPath返回的对象执行XPath

2.3.1使用string(.)关键字获取所有文本信息
XPath语法_第7张图片

结果如下所示:
XPath语法_第8张图片

2.3.2直接使用XPath 语句来提取
代码
XPath语法_第9张图片
结果
XPath语法_第10张图片

3 使用谷歌浏览器辅助构造XPath。

在构造XPath语句的过程中,需要寻找”标志性“标签。但是遇到混乱的代码,就不能单纯靠眼睛来看了。借助谷歌浏览器来协助分析网页结构,可以大大提高分析效率。

3.1Google Chrome自带的开发者工具可以将网页源代码转换为树状结构,大大提高网页的可读性。在网页上单击右键,在弹出的快捷菜单中选择”检查"命令,打开开发者工具,如下图所示结果:

XPath语法_第11张图片

3.2 打开开发者工具,使鼠标指针在开发者窗口中的HTML代码中移动,可以看到页面上不同地方会高亮,说明当前鼠标指针指向的这个标签,就对应了网页中高亮的这一部分的代码。XPath语法_第12张图片

3.3 除了根据代码找网页位置,还可以根据网页位置找代码。点击下图方框框住的按钮,并将鼠标指针在网页中移动,可以看到开发者工具窗口中的代码随之滚动。

XPath语法_第13张图片

3.4 此时开发者工具中高亮显示的这一行代码,即为这个想要获取内容所在的HTML源代码的位置。在上面单击右键,选择”Copy" 由 “Copy XPath"命令。

3.5 爬去豆瓣页面上的所有书名作者

import lxml.html
import requests
import re
html= requests.get('http://book.douban.com').content.decode()
selector = lxml.html.fromstring(html)
info = selector.xpath('//*[@id="content"]/div/div[1]/div[1]/div[2]/div/div/ul/li/div/div/a/text()')
author = selector.xpath('//div[@class="slide-list"]/ul/li/div//div[@class="author"]/text()')
print(info)
print('*'*50)
list1 = []
for n in author:
    a = re.sub('[\n ]', '',n)
    list1.append(a)
print(list1)

运行结果如下:

XPath语法_第14张图片

注:本书参考Python爬虫开发从入门到实站

你可能感兴趣的:(爬虫)