12 解析网页之XPath与CSS选择器的基本使用

在前一篇教程中,我们讨论了如何使用 BeautifulSoup 提取网页中的数据。作为爬虫开发者,除了熟悉如何提取数据,了解如何选择数据也是至关重要的。在本篇教程中,我们将深入探讨 XPathCSS 选择器的基本用法,并结合实际案例帮助你更好地理解这些工具。

什么是XPath与CSS选择器

XPath

XPath(XML Path Language)是一种用于在XML文档中查找信息的语言。虽然它最初是为XML设计的,但在解析HTML网页时也相当有效。它通过导航文档的结构来选择节点。

CSS选择器

CSS选择器是一种用于选取HTML元素的语言,通常用于样式表中。它也可以被用作提取网页数据,因为它非常直观,容易学习。

XPath的基本用法

选择所有元素

使用//选择器可以选择文档中的所有元素。例如,选择所有的<div>元素:

1
//div

根据标签名选择

若想选择特定标签,例如所有的<h1>标签:

1
//h1

根据属性选择

XPath允许根据元素的属性进行查找。例如,选择所有具有class属性值为example<div>

1
//div[@class='example']

案例:使用XPath提取数据

假设我们有这样一个HTML结构,包含一些书籍信息:

1
2
3
4
5
6
7
8
<div class="book">
<h1>书名一</h1>
<p class="author">作者一</p>
</div>
<div class="book">
<h1>书名二</h1>
<p class="author">作者二</p>
</div>

使用XPath提取所有书名,可以使用以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from lxml import html

# 假设我们已经获取到网页的HTML内容
web_content = '''
<div class="book">
<h1>书名一</h1>
<p class="author">作者一</p>
</div>
<div class="book">
<h1>书名二</h1>
<p class="author">作者二</p>
</div>
'''

# 解析HTML
tree = html.fromstring(web_content)
titles = tree.xpath('//div[@class="book"]/h1/text()')

print(titles) # ['书名一', '书名二']

CSS选择器的基本用法

选择所有元素

*可以选择文档中的所有元素:

1
*

根据标签名选择

选择所有的<h1>标签十分简单:

1
h1

根据类选择

使用.前缀选择类名,如选择classbook的所有元素:

1
.book

案例:使用CSS选择器提取数据

使用与上述相同的HTML结构,我们可以用CSS选择器提取书名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from bs4 import BeautifulSoup

# 假设我们已经获取到网页的HTML内容
web_content = '''
<div class="book">
<h1>书名一</h1>
<p class="author">作者一</p>
</div>
<div class="book">
<h1>书名二</h1>
<p class="author">作者二</p>
</div>
'''

# 解析HTML
soup = BeautifulSoup(web_content, 'html.parser')
titles = [h1.get_text() for h1 in soup.select('.book h1')]

print(titles) # ['书名一', '书名二']

总结

在本篇教程中,我们讨论了 XPathCSS 选择器的基本用法,并通过实例说明了如何在Python中使用这两种选择工具来提取网页数据。掌握这两种工具将为您在爬虫开发中提供更多灵活性和便利性。

在下一篇教程中,我们将介绍数据存储的相关内容,具体将会讲解如何将提取的数据存储为CSV格式。希望你能继续关注并学习!

12 解析网页之XPath与CSS选择器的基本使用

https://zglg.work/crawler-zero/12/

作者

IT教程网(郭震)

发布于

2024-08-11

更新于

2024-08-11

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论