gpt4 book ai didi

python - BeautifulSoup不提取特定标签文本

转载 作者:行者123 更新时间:2023-12-01 03:03:46 26 4
gpt4 key购买 nike

我在使用BeautifulSoup收集特定标签的信息时遇到问题。我想在标记html之间提取“项目4”的文本,但是下面的代码获取与“项目1”相关的文本。我做错了什么(例如切片)?

码:

primary_detail = page_section.findAll('div', {'class': 'detail-item'})
for item_4 in page_section.find('h3', string='Item 4'):
if item_4:
for item_4_content in page_section.find('html'):
print (item_4_content)


HTML:

<div class="detail-item">
<h3>Item 1</h3>
<html><body><p>Item 1 text here</p></body></html>
</div>

<div class="detail-item">
<h3>Item 2</h3>
<html><body><p>Item 2 text here</p></body></html>
</div>

<div class="detail-item">
<h3>Item 3</h3>
<html><body><p>Item 3 text here</p></body></html>
</div>

<div class="detail-item">
<h3>Item 4</h3>
<html><body><p>Item 4 text here</p></body></html>
</div>

最佳答案

看来您想根据<p>文本值打印<h3>标记内容,对吗?

您的代码必须:


加载html_source
搜索包含等于'div''class'的所有'detail-item'标记
对于每次出现,如果.text标记的<h3>值等于字符串'Item 4'
然后代码将print相应.text标记的<p>


您可以通过使用以下代码来实现所需的功能。

码:

s = '''<div class="detail-item">
<h3>Item 1</h3>
<html><body><p>Item 1 text here</p></body></html>
</div>

<div class="detail-item">
<h3>Item 2</h3>
<html><body><p>Item 2 text here</p></body></html>
</div>

<div class="detail-item">
<h3>Item 3</h3>
<html><body><p>Item 3 text here</p></body></html>
</div>

<div class="detail-item">
<h3>Item 4</h3>
<html><body><p>Item 4 text here</p></body></html>
</div>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(s, 'lxml')

primary_detail = soup.find_all('div', {'class': 'detail-item'})

for tag in primary_detail:
if 'Item 4' in tag.h3.text:
print(tag.p.text)


输出:

'Item 4 text here'




编辑:在 provided website中的第一个循环出现没有 <h3>标记,只有一个 <h2>,所以它没有任何 .text值,对吗?

您可以使用 try/except子句来绕过此错误,如以下代码所示。

码:

from bs4 import BeautifulSoup
import requests


url = 'https://fortiguard.com/psirt/FG-IR-17-097'
html_source = requests.get(url).text

soup = BeautifulSoup(html_source, 'lxml')

primary_detail = soup.find_all('div', {'class': 'detail-item'})

for tag in primary_detail:
try:
if 'Solutions' in tag.h3.text:
print(tag.p.text)
except:
continue


如果代码遇到异常,它将继续循环中的下一个元素。因此,代码将忽略不包含任何 .text值的第一项。

输出:

'Upgrade to FortiWLC-SD version 8.3.0'

关于python - BeautifulSoup不提取特定标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43593468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com