Python网络爬虫精解之XPath的使用说明
什么是XPath
XPath是一种XML路径语言,用于对XML或HTML文档中的元素进行定位和选择。在爬虫中,我们可以使用XPath来定位HTML中的元素,进而提取出我们需要的数据。
XPath的语法
XPath的语法由选择器和轴组成。选择器用于选择HTML中的某个元素,而轴用于指定元素之间的关系。以下是XPath的常见语法:
- 节点选择器:
nodename
,例如h1
- 属性选择器:
@attribute
,例如@class
- 标签定位:
//tagname
,例如//div
- 层级定位:
//parent_tagname/child_tagname
,例如//div/h1
- 兄弟节点:
//parent_tagname/following-sibling::tagname
,例如//div/following-sibling::p
- 相邻节点:
//parent_tagname/preceding-sibling::tagname
,例如//p/preceding-sibling::h1
根据需求不同,我们可灵活组合选择器和轴,来定位HTML中的元素。
XPath的使用
在Python中,我们可以使用lxml库的etree模块来实现XPath的解析。以下是使用XPath实现爬取网页信息的模板:
import requests
from lxml import etree
response = requests.get(url)
selector = etree.HTML(response.text)
data = selector.xpath(xpath)
其中,url为要爬取的网址,xpath为XPath表达式,可以是一个选择器,也可以是多个选择器组成的列表。xpath返回的结果是一个元素列表。
下面是两个使用XPath的示例:
示例一
假设我们需要爬取“电影天堂”网站中正在热映的电影名称和简介。以下是该网站的URL:
http://www.dytt8.net/index.htm
我们可以使用如下的XPath表达式来获取该网站中正在热映的电影信息:
import requests
from lxml import etree
url = 'http://www.dytt8.net/index.htm'
response = requests.get(url)
selector = etree.HTML(response.content)
# 获取正在热映的电影名称
movie_names = selector.xpath('//div[@id="menu"]/div/ul/li/a/text()')
# 获取正在热映的电影简介
movie_intros = []
for i in range(1, len(movie_names)+1):
movie_intro = selector.xpath('//div[@id="menu"]/div/ul/li[%s]/ul/li/a/text()' % i)
movie_intros.append(movie_intro)
输出结果:
print(movie_names)
# ['今日更新', '这周更新', '最新电影']
print(movie_intros)
# [['华语电影', '欧美电影', '日韩电视剧', '综艺娱乐视频', '国语电视剧', '港台电视剧', '海外电视剧', '动漫电视剧'], ['新推出', '最受期待', '经典电影'], ['新片', '经典旧片', '电视剧']]
示例二
假设我们需要爬取“糗事百科”网站中今日最热门的段子内容。以下是该网站的URL:
https://www.qiushibaike.com/hot/
我们可以使用如下的XPath表达式来获取该网站中今日最热门的段子内容:
import requests
from lxml import etree
url = 'https://www.qiushibaike.com/hot/'
response = requests.get(url)
selector = etree.HTML(response.content)
# 获取最热门的段子内容
texts = selector.xpath('//div[@id="content-left"]/div[@class="article block untagged mb15" and @id]/div/a[2]/text()')
print(texts)
# ['面试官问我:你能不能秒杀Java,我回答“能”(淡定)', '这样的Fe....嫩 ....真是难得啊',...]
输出结果:
print(texts)
# ['面试官问我:你能不能秒杀Java,我回答“能”(淡定)', '这样的Fe....嫩 ....真是难得啊',...]
以上两个示例均使用XPath来定位HTML中的元素,进而提取出我们需要的数据。在实际应用中,我们可根据需求使用灵活的选择器和轴,使爬虫更加高效和精准。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python网络爬虫精解之XPath的使用说明 - Python技术站