XPath是XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的计算机语言。XPath可以用来在xml文档中对元素和属性进行遍历。利用XPath,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素。在爬虫中使用XPath可以快速查找到你想要的内容。
XPath的开发工具也有不少,我用的是以下两个,分别是Chrome插件 XPath Helper和Firefox插件 XPath Checker,使用这些开发工具只是帮我们学习XPath语法,并不是用它去提取数据。
XPath语法:
1、选择节点(标签):
“/html/head/meta“:能够选择head下所有的meta标签
2、"//":能够从任意节点开始选择
eg:“//li“:选择当前页面的所有“li”标签
3、@符号的用途:
选择具体某个元素:“//div[@class='indent']/ul/li” 选择class=indent下的ul下的所有li,获取其内容
4、获取文本
“/a/text()”:获取a下的文本
"/a//text()":获取a下的全部文本
lxml模块
在python中,一般使用lxml模块来使用XPath
下载:pip install lxml
但是在python中并不是直接使用lxml模块,而是使用这个模块里面的etree这个类
from lxml import etree #导入模块
#这并不是个完整代码,仅供演示
html = etree.HTML("html字符串")
html.xpath("Xpath语法")
下面是一个爬虫小例子,利用了Xpath去爬取豆瓣上电影的url地址。一般来说我们可以现在谷歌浏览器中使用 XPath Helper使用Xpath来获取到想要的内容,然后在粘贴到代码中使用。
from lxml import etree
import requests
#爬取网站的url
url = "https://movie.douban.com/chart"
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
#发送请求
response = requests.get(url,headers=headers)
#获取数据
html_str = response.content.decode()
# print(html_str)
#构造Xpath解析对象
html = etree.HTML(html_str)
# print(html)
# 获取所有电影的url地址,注意双引号中的引号要是用单引号
url_list = html.xpath("//div[@class='indent']/div/table//div[@class='pl2']/a/@href")
print(url_list)