python - 使用 BeautifulSoup 返回被双标签包围的文本
问题描述
我正在使用 url 遍历列表。在每一页上都有 1 到 n 个描述,它们被双 p 标签包围。
BeautifulSoup.find(class_='view-content')
# url 1
<div class="view-content">
<div class="row">
<div class="description">
<p><p>One animal</p>
</p>
</div>
</div>
</div>
# url 2
<div class="view-content">
<div class="row">
<div class="description">
<p><p>One person</p>
</p>
</div>
</div>
<div class="row">
<div class="description">
<p><p>Two people </p>
</p>
</div>
</div>
</div>
当我使用
for d in soup.find(class_='view-content').find_all('p'):
dd = d.contents[0]
print(dd)
我明白了
<p>One animal</p>One animal
<p>One person</p>One person
<p>Two people</p>Two people
而不是预期
One animal
One person
Two people
有什么方法可以检索被双 p 标签包围的内容?
编辑:以下返回相同,但至少没有 p 标签。
for d in soup.find_all("div",class_="view-content"):
print(' '.join(i.text for i in review.find_all('p')[1:]))
解决方案
另一种解决方案。
from simplified_scrapy import SimplifiedDoc
html = '''
# url 1
<div class="view-content">
<div class="row">
<div class="description">
<p><p>One animal</p>
</p>
</div>
</div>
</div>
# url 2
<div class="view-content">
<div class="row">
<div class="description">
<p><p>One person</p>
</p>
</div>
</div>
<div class="row">
<div class="description">
<p><p>Two people </p>
</p>
</div>
</div>
</div>
'''
doc = SimplifiedDoc(html)
divs = doc.selects('div.view-content')
datas=[]
for div in divs:
datas.extend ([p.text for p in div.ps])
print (datas)
结果:
['One animal', 'One person', 'Two people']
推荐阅读
- java - 删除具有特定子值的 Firebase 节点
- android - After Fragment transaction, new Fragment's UI is transparent and makes the entire application unresponsive
- php - Finding the right HTTP parameters to make request with PHP
- c - 错误:与字符串文字的比较结果未指定(使用 strncmp 代替)并且 Check50 显示信用问题错误
- javascript - Invalid Date error trying to parse a string containing AM or PM using npm date-and-time library in javascript
- gap-system - 从函数创建生成矩阵以检查 CCZ
- sql - 在 pgadmin/postgresql 中,如何处理文件未被读取且 SQL 状态如下的文件导入问题:58P01
- vue.js - 包含循环引用的对象图上的 Vue 反应性
- python - 我如何导入这些功能?属性错误
- java - 用 Java 确定最优交易行为的遗传算法