如何检查 al 标签是否<li>包含<img>标签,然后运行代码(如果存在)



我承担了一个网页抓取项目。有一个由几个li标签组成的ul标签。我的任务是仅在特定li标记包含img标记时才打印li标记的内容。我不能这样做。不知道我的代码有什么问题。这是我的代码

from bs4 import BeautifulSoup
import requests
#get the url of the site
url = 'https://devices.ubuntu-touch.io/'
#make a GET request
req = requests.get(url)
#print stau code
print(req.status_code)
# parse the html document
soup = BeautifulSoup(req.content, 'html.parser')
device_list = soup.find_all('li', class_ = 'device-name')
for device in device_list:
device = device.find('div', class_ = 'text-center col-4')
if device == 'none':
model_name = device.find('div', class_ = 'col-8').text
print(model_name)
else:
print('failure')

您需要检查是否在您的设备对象中找到<img>:

...
for device in device_list:
if device.find('img'):
...

作为替代,您可以选择更具体的选择,仅通过css selectors选择<img>:

for device in soup.select('li.device-name:has(img)'):
print(device.find('div', class_ = 'col-8').text.strip())
from bs4 import BeautifulSoup
import requests
url = 'https://devices.ubuntu-touch.io/'
req = requests.get(url)
soup = BeautifulSoup(req.content)
device_list = soup.find_all('li', class_ = 'device-name')
for device in device_list:
if device.find('img'):
model_name = device.find('div', class_ = 'col-8').text.strip()
print(model_name)
else:
print('failure')

Google Pixel 3a/3a XL
failure
failure
failure
failure
failure
failure
Oneplus One
failure
Volla Phone
failure
failure
failure
failure
failure
Sony Xperia X (F5121 & F5122)
failure
...