python运行xpath
时间: 2025-01-01 22:30:58 浏览: 21
### 如何在 Python 中使用 XPath
#### 导入必要的模块
为了能够在 Python 中使用 XPath 表达式,需要先安装 `lxml` 库并导入相应的模块。
```bash
pip install lxml
```
```python
from lxml import etree
```
#### 解析 HTML 或 XML 文本
可以将字符串形式的 HTML 或 XML 转换成可查询的对象:
```python
html_content = """
<html>
<body>
<h1>Hello World</h1>
<p class="title">This is a paragraph.</p>
</body>
</html>
"""
parser = etree.HTMLParser()
tree = etree.fromstring(html_content, parser=parser)
```
#### 使用 XPath 查询节点
一旦有了解析后的对象,就可以利用 `.xpath()` 方法执行 XPath 查询。下面是一些常见的例子:
- **获取特定类别的所有 `<p>` 标签内的文本**
```python
paragraphs = tree.xpath('//p[@class="title"]//text()')
print(paragraphs) # 输出: ['This is a paragraph.']
```
- **提取具有指定属性值的元素的内容**
对于更复杂的场景,比如从医疗百科页面抓取疾病信息时,可以通过精确匹配标签及其属性来定位目标数据[^5]。
```python
def extract_disease_info(url):
html_text = get_html(url) # 假设此函数用于获取网页源码
doc_tree = etree.HTML(html_text)
aliases = doc_tree.xpath(
'//ul[@class="information_ul"]/li/i[text()="别名:"]/following-sibling::span/text()'
)
affected_parts = doc_tree.xpath(
'//ul[@class="information_ul"]/li/i[text()="发病部位:"]/following-sibling::span/a/text()'
)
departments = doc_tree.xpath(
'//ul[@class="information_ul"]/li/i[text()="挂号科室:"]/following-sibling::span/a/text()'
)
return {
"aliases": aliases,
"affected_parts": affected_parts,
"departments": departments
}
```
以上代码展示了如何定义一个函数去访问给定 URL 的网页内容,并从中抽取有关疾病的三个具体字段的信息——别名、发病部位和挂号科室。
XPath 提供了一种强大而灵活的方式来遍历文档结构,在处理 Web 抓取任务或其他涉及 DOM 操作的应用程序中非常有用。不过需要注意的是,尽管 XPath 功能强大,但在某些情况下可能不如 CSS Selectors 易于编写或维护;另外,由于浏览器渲染差异等因素的影响,实际应用过程中可能会遇到一些挑战[^4]。
阅读全文
相关推荐


















