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)
添加回答
舉報