12 解析网页之XPath与CSS选择器的基本使用
在前一篇教程中,我们讨论了如何使用 BeautifulSoup 提取网页中的数据。作为爬虫开发者,除了熟悉如何提取数据,了解如何选择数据也是至关重要的。在本篇教程中,我们将深入探讨 XPath 和 CSS 选择器的基本用法,并结合实际案例帮助你更好地理解这些工具。
什么是XPath与CSS选择器
XPath
XPath(XML Path Language)是一种用于在XML文档中查找信息的语言。虽然它最初是为XML设计的,但在解析HTML网页时也相当有效。它通过导航文档的结构来选择节点。
CSS选择器
CSS选择器是一种用于选取HTML元素的语言,通常用于样式表中。它也可以被用作提取网页数据,因为它非常直观,容易学习。
XPath的基本用法
选择所有元素
使用//选择器可以选择文档中的所有元素。例如,选择所有的<div>元素:
//div
根据标签名选择
若想选择特定标签,例如所有的<h1>标签:
//h1
根据属性选择
XPath允许根据元素的属性进行查找。例如,选择所有具有class属性值为example的<div>:
//div[@class='example']
案例:使用XPath提取数据
假设我们有这样一个HTML结构,包含一些书籍信息:
<div class="book">
    <h1>书名一</h1>
    <p class="author">作者一</p>
</div>
<div class="book">
    <h1>书名二</h1>
    <p class="author">作者二</p>
</div>
使用XPath提取所有书名,可以使用以下代码:
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选择器的基本用法
选择所有元素
用*可以选择文档中的所有元素:
*
根据标签名选择
选择所有的<h1>标签十分简单:
h1
根据类选择
使用.前缀选择类名,如选择class为book的所有元素:
.book
案例:使用CSS选择器提取数据
使用与上述相同的HTML结构,我们可以用CSS选择器提取书名:
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)  # ['书名一', '书名二']
总结
在本篇教程中,我们讨论了 XPath 和 CSS 选择器的基本用法,并通过实例说明了如何在Python中使用这两种选择工具来提取网页数据。掌握这两种工具将为您在爬虫开发中提供更多灵活性和便利性。
在下一篇教程中,我们将介绍数据存储的相关内容,具体将会讲解如何将提取的数据存储为CSV格式。希望你能继续关注并学习!
