soup.find_all 获取 div 中的文字
时间: 2024-02-12 13:03:02 浏览: 213
如果您想获取所有 div 标签中的文字,可以使用 BeautifulSoup 的 find_all 方法。以下是一个例子:
```python
from bs4 import BeautifulSoup
html = '''
<div class="content">
<p>Hello, World!</p>
</div>
<div class="content">
<p>How are you?</p>
</div>
'''
soup = BeautifulSoup(html, 'html.parser')
divs = soup.find_all('div', class_='content')
for div in divs:
text = div.text.strip()
print(text)
```
输出:
```
Hello, World!
How are you?
```
在这个例子中,我们首先将 HTML 代码传递给 BeautifulSoup 对象,并使用 find_all 方法查找所有 class 为 "content" 的 div 标签。然后,我们遍历每个 div 标签,并使用 text 属性获取 div 中的文字,并使用 strip 方法去掉多余的空格和换行符。
相关问题
改进这段python代码:for p in soup.find_all('div', {'class': 'article-detail'})[0].find_all('p'):
可以考虑加入异常处理,以应对找不到指定元素的情况。
改进后的代码如下:
```
try:
article_detail = soup.find_all('div', {'class': 'article-detail'})[0]
for p in article_detail.find_all('p'):
# 处理 p 元素
except IndexError:
# 处理找不到 article-detail 元素的情况
```
这样,在找不到指定元素时,程序不会因为 `IndexError` 异常而崩溃,而是会执行 `except` 块中的代码,从而提高了程序的健壮性。
data = soup.find('div', {'class': 'report-list report-list__item'}).find_all('div')[1].find_all('table')[0].find_all('tr')[1:-1] AttributeError: 'NoneType' object has no attribute 'find_all'
这个错误提示通常是因为`find()`或`find_all()`方法没有找到指定的标签或属性,返回了`None`对象,而`None`对象并没有`find_all()`方法。
你可以在运行`find()`或`find_all()`方法之前,先判断一下对象是否为`None`,避免这个错误的发生。例如:
```
data_div = soup.find('div', {'class': 'report-list report-list__item'})
if data_div:
data_table = data_div.find_all('div')[1].find_all('table')[0]
if data_table:
data = data_table.find_all('tr')[1:-1]
```
这样就可以避免对`None`对象调用`find_all()`方法导致的错误。
阅读全文