bs4中etree的xpath语法如何获取标签内除去br标签以外的所有内容
时间: 2023-07-16 13:13:52 浏览: 45
可以使用`string()`函数获取标签内除去br标签以外的所有内容,示例代码如下:
```python
from bs4 import BeautifulSoup
html = """
<div>
This is some <br>text with<br> line breaks.
<p>And a paragraph.</p>
</div>
"""
soup = BeautifulSoup(html, 'html.parser')
div = soup.find('div')
text = div.xpath('string()').replace('\n', '').strip()
print(text)
```
输出结果为:
```
This is some text with line breaks. And a paragraph.
```
这里先使用`find()`方法获取目标`<div>`标签,然后使用`xpath()`方法结合`string()`函数获取标签内所有文本,并使用`replace()`和`strip()`方法去除换行符和首尾空格。这样就能够获取标签内除去br标签以外的所有内容了。
相关问题
python etree xpath如何获取div下面所有元素的text
你可以使用XPath表达式 `//div//text()` 来获取 `div` 元素下面所有的文本节点。具体方法如下:
```python
from lxml import etree
# 构建 HTML 解析器
parser = etree.HTMLParser()
# 解析 HTML 文本
html = '''
<div>
<p>Hello, World!</p>
<a href="https://www.example.com">Example Website</a>
<span>Goodbye!</span>
</div>
'''
# 将 HTML 文本转换为 Element 对象
root = etree.fromstring(html, parser)
# 获取 div 元素下面所有的文本节点
texts = root.xpath('//div//text()')
# 输出结果
print(texts)
```
输出结果为:
```
['\n ', 'Hello, World!', '\n ', 'Example Website', '\n ', 'Goodbye!', '\n']
```
其中,`texts` 列表中的每一个元素都是一个文本节点的字符串。如果你想要获取去除空白字符的文本内容,可以使用 `normalize-space()` 函数,例如:
```python
# 获取 div 元素下面所有的文本节点(去除空白字符)
texts = root.xpath('normalize-space(//div)')
```
这样就可以获取到 `div` 元素下面所有的文本内容,去除了空白字符。
怎么用xpath获取标签
以下是使用xpath获取标签的方法和示例代码:
1. 导入lxml库和requests库
```python
from lxml import etree
import requests
```
2. 获取HTML页面
```python
url = 'http://example.com'
response = requests.get(url)
html = response.text
```
3. 解析HTML页面
```python
tree = etree.HTML(html)
```
4. 使用xpath获取标签
```python
# 获取title标签的内容
title = tree.xpath('/html/head/title/text()')[0]
print(title)
# 获取class为song的div标签下的img标签的src属性值
img_src = tree.xpath('//div[@class="song"]/img/@src')[0]
print(img_src)
```