2 回答
TA贡献1812条经验 获得超5个赞
在这一行中:
product_ok= l.find('div', class_= '_3wU53n').text
l.find('div', class_= '_3wU53n')
返回None
,意味着它没有找到 div。None
值没有text
属性,因此会引发AttributeError
异常。
解决方法是使用新的 walrus 运算符:
if product_ok := l.find('div', class_= '_3wU53n'): product_ok = product_ok.text
TA贡献1818条经验 获得超8个赞
假设您为“l”值收集了以下数据
项目1
<title>title1</title><div class_= '_3wU53n'>xyz</div>
项目2
<title>title1</title><div>xyz</div>
项目3
<title>title1</title><div class_= '_3wU53n'>xyz</div>
使用第一个代码,您的product_list
变量将包含 item1 和 item3。然后您就可以获取title
给定项目的可用信息。所以代码运行没有任何问题。
使用第二个代码,您的product_list
变量将包含 item1、item2 和 item3。但在这种情况下,您将无法获得所需的div
标签,因为第二个项目不存在该标签。这会导致属性错误。
简单的事情是数据库中的项目总是有一个标题,但很可能不会总是有所需的div
标签。
以下更改应该可以使其正常工作:
from bs4 import BeautifulSoup
import requests
pr= input("search: ")
source= requests.get('https://www.flipkart.com/search?q={}&otracker=search&otracker1=search&marketplace=FLIPKART&as-show=on&as=off'.format(pr)).content
soup = BeautifulSoup(source, 'html.parser')
url= soup.find_all('div', class_=('_3O0U0u'))
whole_product_list= []
whole_url_list= []
main_product_list= []
main_url_list= []
for i in url:
tag_a_data= i.find_all('a')
for l in tag_a_data:
product_list = l.get('title')
if product_list:
main_product_list.append(product_list)
else:
if l.find("div", class_='_3wU53n'):
product_ok= l.find('div', class_= '_3wU53n').text
main_product_list.append(product_ok)
print(main_product_list)
添加回答
举报