小能豆

可以与 BeautifulSoup 一起使用 XPath 吗?

python

我正在使用 BeautifulSoup 来抓取 URL,并且我有以下代码来查找td类为的标签'empformbody'

import urllib
import urllib2
from BeautifulSoup import BeautifulSoup

url =  "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
req = urllib2.Request(url)
response = urllib2.urlopen(req)
the_page = response.read()
soup = BeautifulSoup(the_page)

soup.findAll('td',attrs={'class':'empformbody'})

现在,我们可以使用上面的代码findAll来获取标签及其相关信息,但我想使用 XPath。是否可以将 XPath 与 BeautifulSoup 一起使用?如果可能,请提供示例代码。


阅读 36

收藏
2024-08-26

共1个答案

小能豆

BeautifulSoup 本身不支持 XPath 查询,但你可以使用 lxml 库,它支持 XPath 并且可以与 BeautifulSoup 配合使用。以下是如何将 lxml 与 BeautifulSoup 结合使用的示例:

  1. 安装 lxml(如果尚未安装):

bash pip install lxml

  1. 更新你的代码,使用 lxml 处理 XPath 查询:

```python
import requests
from bs4 import BeautifulSoup
from lxml import etree

url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html”
response = requests.get(url)
soup = BeautifulSoup(response.content, ‘lxml’)

# 使用 BeautifulSoup 和 lxml 结合处理 XPath 查询
tree = etree.HTML(str(soup))

# 使用 XPath 查找 class 为 ‘empformbody’ 的 td 标签
td_elements = tree.xpath(“//td[@class=’empformbody’]”)

for td in td_elements:
print(td.text_content())
```

说明:

  • requests.get(url): 从 URL 获取页面内容。
  • BeautifulSoup(response.content, 'lxml'): 使用 BeautifulSoup 解析 HTML 内容,'lxml' 解析器允许使用 lxml
  • etree.HTML(str(soup)): 将 BeautifulSoup 对象转换为 lxmlElementTree 对象。
  • tree.xpath("//td[@class='empformbody']"): 使用 XPath 查询,找到所有 class 为 empformbodytd 标签。

这样,你可以利用 XPath 在 BeautifulSoup 处理的 HTML 内容中进行更复杂的查询。

2024-08-26