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
格式。希望你能继续关注并学习!