怎么使用xpath取到div标签下的所有p标签的文本
时间: 2024-02-26 16:59:24 浏览: 476
可以使用以下的 XPath 表达式来获取 `div` 标签下的所有 `p` 标签的文本:
```python
div_element.xpath('.//p/text()')
```
其中,`//` 表示从当前节点开始,查找所有符合条件的节点,而 `.` 表示当前节点,所以 `.//p` 表示查找所有的 `p` 标签节点,`text()` 表示获取节点的文本内容。最终,`div_element.xpath('.//p/text()')` 将返回一个包含所有 `p` 标签文本内容的列表。
相关问题
python用xpath拿div标签下所有p标签的所有文本以及p标签包含的strong标签的文本
可以使用下面的代码实现:
```python
import requests
from lxml import etree
url = '网页链接'
html = requests.get(url).text
selector = etree.HTML(html)
div_list = selector.xpath('//div') # 获取所有 div 标签
for div in div_list:
p_list = div.xpath('.//p') # 获取当前 div 标签下所有 p 标签
for p in p_list:
text_list = p.xpath('.//text()') # 获取当前 p 标签下所有文本
strong_list = p.xpath('.//strong/text()') # 获取当前 p 标签下所有 strong 标签的文本
all_text_list = text_list + strong_list # 合并文本
print(''.join(all_text_list)) # 输出合并后的文本
```
注意,需要将 `网页链接` 替换成实际网页的链接。
如何使用xpath同时选取div节点下的p节点和div节点(div节点下的p和div是同级的)
要同时选取`<div>`节点下的所有`<p>`节点和`<div>`元素,你可以使用XPath表达式来指定它们的层次关系。在这种情况下,因为你提到的`<p>`和`<div>`是同级的,你可以直接选择它们。假设这两个元素都在同一个祖先元素下,可以这样写:
```xpath
//div/p | //div
```
这表示选择所有的`<div>`元素下的`<p>`子元素和所有的`<div>`元素本身。
这里是使用Python示例,结合LXML库来实现这个查询:
```python
import lxml.etree as ET
# 假设我们有如下的HTML结构
html_content = """
<div>
<p>这是一个段落</p>
<div>
<p>这是另一个段落</p>
<div>
...
</div>
</div>
</div>
"""
# 使用lxml解析HTML
root = ET.fromstring(html_content)
# 选取所有的p节点和div元素
context = root.xpath('//div/p | //div')
for item in context:
print(item.text or item.tag)
```
这段代码会打印出每个`<p>`元素的内容以及每个`<div>`元素的标签名。如果你想要的是完整的HTML元素,而不是文本,可以直接打印`item`。
阅读全文