python 用xpath 提取 ‘<div><tr>fwe<fwe</tr></div>’ 内容 得到结果 ‘fwe<fwe’
时间: 2023-11-28 07:50:56 浏览: 40
你可以使用 Python 的 lxml 库中的 etree 模块来解析 HTML 或 XML 文本,并使用 XPath 来提取所需的内容。以下是一个示例代码:
```python
from lxml import etree
html = '<div><tr>fwe<fwe</tr></div>'
tree = etree.HTML(html)
result = tree.xpath('//div/tr/text()')[0]
print(result)
```
输出结果为:
```
fwe<fwe
```
这里的 XPath 表达式 `//div/tr/text()` 表示选取 `<div>` 标签下的 `<tr>` 标签内的文本内容。注意,这里使用了 `text()` 函数来获取文本内容,而不是标签内的 HTML 代码。最后使用 `[0]` 来获取列表中的第一个元素,即所需的文本内容。
相关问题
python 用xpath 提取内容 内容中有特殊符号 小于号如何处理 例如提取 ‘<div><tr>fwe<fwe</tr></div>’ 内容 得到结果 ‘fwe<fwe’
在XPath中,小于号 `<` 是一个特殊字符,它被解释为开始一个新的标签。如果要提取包含小于号的内容,可以使用CDATA(Unparsed Character Data)来将特殊字符转义。
示例代码:
```python
from lxml import etree
# 定义包含小于号的HTML字符串
html_str = '<div><tr>fwe<fwe</tr></div>'
# 将HTML字符串转换为Element对象
root = etree.fromstring(html_str)
# 构造XPath表达式
xpath_expr = "//tr/text()"
# 使用XPath表达式提取文本内容
result = root.xpath(xpath_expr)
# 输出结果
print(result[0])
```
输出结果为:
```
fwe<fwe
```
在这个例子中,我们使用了XML CDATA语法(`<![CDATA[...]]>`)来将特殊字符转义。具体来说,我们将HTML字符串包装在CDATA标签中,这样XPath表达式才能正确地解析小于号字符。
html = """ <!DOCTYPE html> <html> <head> <title>xpath test</title> </head> <body> <div price="99.8"> <div> <ul> <li>时间</li> <li>地点</li> <li>任务</li> </ul> </div> <div id='testid' data-h="first"> <h2>这里是个小标题</h2> <ol> <li data="one">1</li> <li data="two">2</li> <li data="three">3</li> </ol> <ul> <li code="84">84</li> <li code="104">104</li> <li code="223">223</li> </ul> </div> <div> <h3>这里是H3的内容 <a href="http://www.baidu.com">百度一下</a> <ul> <li>test1</li> <li>test2</li> </ul> </h3> </div> <div id="go"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> <h3> 这里是H3 -2的内容 </h3> </div> </div> </body> </html> """ 三、实验步骤 分别使用css与xpath语法解析获得yi下内容 (1)获得title标签的内容 (2)获取所有的li标签的内容 (3)获取id="go"的后代节点中的第一个li标签的内容 (4)获取id="go"的后代节点中的最后一个li标签的内容 (5)获取id="go"的后代节点中的第五个li标签的内容 (6)获取head标签的所有后代节点 (7)获取head标签的所有兄弟节点 (8)获取存在id属性的所有标签 (9)获取存在id='testid'的所有标签 (10)获取属性值中存在‘t’的所有标签
(1) CSS语法:
title_content = soup.select_one('title').text
XPath语法:
title_content = tree.xpath('//title/text()')[0]
(2) CSS语法:
li_contents = [li.text for li in soup.select('li')]
XPath语法:
li_contents = tree.xpath('//li/text()')
(3) CSS语法:
first_li_content = soup.select_one('#go li:first-child').text
XPath语法:
first_li_content = tree.xpath('//*[@id="go"]/ul/li[1]/text()')[0]
(4) CSS语法:
last_li_content = soup.select_one('#go li:last-child').text
XPath语法:
last_li_content = tree.xpath('//*[@id="go"]/ul/li[last()]/text()')[0]
(5) CSS语法:
fifth_li_content = soup.select_one('#go li:nth-child(5)').text
XPath语法:
fifth_li_content = tree.xpath('//*[@id="go"]/ul/li[5]/text()')[0]
(6) CSS语法:
head_descendants = [descendant.name for descendant in soup.select('head *')]
XPath语法:
head_descendants = tree.xpath('//head//*')
(7) CSS语法:
head_siblings = [sibling.name for sibling in soup.select('head ~ *')]
XPath语法:
head_siblings = tree.xpath('//head/following-sibling::*')
(8) CSS语法:
id_tags = [tag.name for tag in soup.select('[id]')]
XPath语法:
id_tags = tree.xpath('//*[@id]')
(9) CSS语法:
testid_tags = [tag.name for tag in soup.select('#testid')]
XPath语法:
testid_tags = tree.xpath('//*[@id="testid"]')
(10) CSS语法:
t_tags = [tag.name for tag in soup.select('[*="t"]')]
XPath语法:
t_tags = tree.xpath('//*[contains(@*,"t")]')