每当我尝试运行这段代码时:
page = requests.get(URL, headers = headers)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find(id="productTitle").get_text()
price = soup.find(id="priceblock_ourprice").get_text()
converted_price = price[0:7]
if (converted_price < '₹ 1,200'):
send_mail()
print(converted_price)
print(title.strip())
if(converted_price > '₹ 1,400'):
send_mail()
它给我一个错误AttributeError: 'NoneType' object has no attribute 'get_text'
早些时候,这段代码工作正常。
8条答案
按热度按时间lokaqttq1#
我试过这个,效果很好
gcxthw6b2#
productTitle
id或priceblock_ourprice
id在您所查询的页面中不存在。建议您执行以下两个步骤:- 检查浏览器上的URL并查找该ID-检查您在page.content
中得到的内容,因为它可能与您在浏览器中看到的内容不同希望能有所帮助
ahy6op9u3#
我假设您正在尝试分析亚马逊的产品。元素
productTitle
和priceblock_ourprice
存在(我已经检查过了)。你应该检查一下
page.content
。也许你的headers
对网站来说是不可接受的。试试看:
结果:
pw9qyyiw4#
请检查它可能是产品缺货的原因,意味着价格不在网站上,这就是为什么它的无类型。尝试选择另一个产品与可见的价格。
fwzugrvs5#
我知道这晚了2.2年,但我现在正在浏览这个DevEd教程--“ourprice”现在是“id=“priceblock_dealprice”,但每15次尝试才运行一次。
hmtdttj46#
它工作一次,然后就停止工作了。我想亚马逊正在阻止请求。
id是正确的,如果你使用
lxml
,html.parser
,或者html5lib
,它不会改变。如果你使用print(soup)
,并查看其主体,你会看到一个来自amazon的验证码提示,基本上是说你必须证明你不是机器人。我不知道有什么方法可以解决这个问题。k5hmc34c7#
如果你试图连续运行它,你会遇到这个错误。亚马逊如果阻止请求。一个技巧,让它再次工作是简单地打印html后,你得到它之前,试图解析。
dgtucam18#
我试着打印total_price而不打印数据,结果成功了。