我的if语句在bs4标签元素中查找失败有什么理由吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的if语句在bs4标签元素中查找失败有什么理由吗?相关的知识,希望对你有一定的参考价值。
我试图找到并打印包含我感兴趣的月份的所有h3标签。为此,我尝试制作我的bs4对象(head
)的for循环,并在其中的if语句指定打印满足的行条件;在这种情况下,如果一个字符串(月份)在行中。我遇到的问题是,即使我指定的月份存在于bs4对象/行中,它们也不会在我的if语句中打印出来。
我已经尝试将这一年添加到这几个月,这似乎解决了这个问题虽然不理想。另外,我测试了我的方法背后的逻辑,通过制作一些行的简短列表(手动)并运行带有该列表的for循环而不是bs4对象(head
)
import requests
from bs4 import BeautifulSoup
page=requests.get('https://www.england.nhs.uk/statistics/statistical-work-areas/delayed-transfers-of-care/statistical-work-areas-delayed-transfers-of-care-delayed-transfers-of-care-data-2018-19/')
soup=BeautifulSoup(page.text,'html.parser')
text=soup.find(class_='rich-text')
head = text.find_all('h3')
for row in head:
for r1 in ['January','February']:
if r1 in row:
print(row)
else:
continue
预期的结果是<h3>February 2019</h3>
<h3>January 2019</h3>
我得到的结果是不存在的,因为没有打印出来
答案
使用bs4 4.7.1获取DTOC月刊的另一种方法
import requests
from bs4 import BeautifulSoup as bs
url = 'https://www.england.nhs.uk/statistics/statistical-work-areas/delayed-transfers-of-care/statistical-work-areas-delayed-transfers-of-care-delayed-transfers-of-care-data-2018-19/'
r = requests.get(url)
soup = bs(r.content, 'lxml')
publications = [item.next_sibling.next_sibling.text for item in soup.select('#main-content p:has(+h3)')][1:]
print(publications)
对于页面:
#main-content p:has(+h3)
p
标签的过滤器,父元素具有id main-content
,具有相邻的兄弟h3
标签。 [1:]
忽略了返回列表中的第一项,因为这不是一个月,而是Statistical Press Notice
标题
另一答案
这是因为row
不是字符串类型,但它是<class 'bs4.element.Tag'>
。因此in
检查失败。
一个解决方法将在检查中转换为字符串:
if r1 in str(row): # or row.text
码:
for row in head:
for r1 in ['January','February']:
if r1 in str(row): # or row.text
print(row)
我故意避免else
到if
,因为这不起任何作用。
(可选)
for row in head:
if any(r1 in row.text for r1 in ['January','February']):
print(row)
以上是关于我的if语句在bs4标签元素中查找失败有什么理由吗?的主要内容,如果未能解决你的问题,请参考以下文章