我一直在使用BeautifulSoup来刮取亚马逊的产品数据。 整个程序一直运行良好,直到出现此错误消息为止
price = soup.find(id="priceblock_ourprice").get_text()
AttributeError:“ NoneType”对象没有属性“ get_text”
执行此操作时,我发现我使用beautifulsoup的每个版本和程序也会出现相同的故障,即使自上次运行以来未更改的版本和程序也是如此。当其中一个再次工作时,它们全部开始工作,直到所有程序再次失败。 这包括我编写的新程序或我尝试的其他程序。 它让我很困惑地重写语法以尝试发现问题,有一次我认为正是头文件的更改使它再次可以正常工作,但随后不久就停止了。
def check_price(URL, headers):
page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
price = soup.find(id="priceblock_ourprice").get_text()
converted_price = price[:-3]# -3 removes the .99 pence value from product
float_price = ''
for c in converted_price:
if c.isdigit():
float_price = float_price + c
#loop that removes the £$,. from product so the string can convert to float
return float(float_price)
谢谢!
答案 0 :(得分:0)
根据您的问题:
请注意,AMAZON
不允许自动访问其数据!因此,您可以通过检查r.status_code
的响应来再次检查!这可能会导致您遇到该错误MSG:
To discuss automated access to Amazon data please contact api-services-support@amazon.com
这就是为什么您的脚本有时可能无法工作的原因。
因此,您可以使用AMAZON API
,也可以通过GET
将代理列表传递给proxies = list_proxies
请求。
我已更正了您的代码中的一些错误,并对其进行了简化。
import requests
from bs4 import BeautifulSoup
headers = {
'Host': 'www.amazon.co.uk',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'TE': 'Trailers'
}
r = requests.get('https://www.amazon.co.uk/Sony-ILCE7M3B-Mirrorless-Compact-System/dp/B07B4L1PQ8/ref=sr_1_fkmr1_1?keywords=sony+camera+ilce-7m3+6000+alpha&qid=1574887164&sr=8-1-fkmr1', headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
for item in soup.findAll('span', attrs={'class': 'a-size-medium a-color-price priceBlockBuyingPriceString'}):
item = str(item.text[1:]).split('.')[0]
print(item)
输出:
1,753
在线测试:Click Here