python “属性错误:“NoneType”对象没有属性“get_text”“

wvyml7n5  于 2023-03-16  发布在  Python
关注(0)|答案(8)|浏览(553)

每当我尝试运行这段代码时:

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'早些时候,这段代码工作正常。

lokaqttq

lokaqttq1#

import requests


from bs4 import BeautifulSoup 

url = 'https://www.amazon.com/Camera-24-2MP-18-135mm-Essential-Including/dp/B081PMPPM1/ref=sr_1_1_sspa?dchild=1&keywords=Canon+EOS+80D&qid=1593325243&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyU1M0M1JVTkY3WTBVJmVuY3J5cHRlZElkPUEwNDQzMjI5Uk9DM08zQkM1RU9RJmVuY3J5cHRlZEFkSWQ9QTAyNjI0NjkzT0ZLUExSRkdJMDYmd2lkZ2V0TmFtZT1zcF9hdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl'

headers = { "user-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}

page = requests.get(url,headers= headers)

soup = BeautifulSoup(page.content,"lxml")

title = soup.find(id = "productTitle").get_text()

print(title)

我试过这个,效果很好

gcxthw6b

gcxthw6b2#

productTitle id或priceblock_ourprice id在您所查询的页面中不存在。建议您执行以下两个步骤:- 检查浏览器上的URL并查找该ID-检查您在page.content中得到的内容,因为它可能与您在浏览器中看到的内容不同
希望能有所帮助

ahy6op9u

ahy6op9u3#

我假设您正在尝试分析亚马逊的产品。元素productTitlepriceblock_ourprice存在(我已经检查过了)。
你应该检查一下page.content。也许你的headers对网站来说是不可接受的。
试试看:

import requests
from bs4 import BeautifulSoup

URL = "https://www.amazon.de/COMIFORT-PC-Tisch-Studie-Schreibtisch-Mehrfarbig/dp/B075R95B1S"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "lxml")

title = soup.find(id="productTitle").get_text()
price = soup.find(id="priceblock_ourprice").get_text()

print(title)
print(price)

结果:

COMIFORT, Computerschreibtisch, Schreibtisch für das Arbeitszimmer, Schreibtisch, Maße: 90 x 50 x 77 cm                         
50,53 €
pw9qyyiw

pw9qyyiw4#

请检查它可能是产品缺货的原因,意味着价格不在网站上,这就是为什么它的无类型。尝试选择另一个产品与可见的价格。

fwzugrvs

fwzugrvs5#

我知道这晚了2.2年,但我现在正在浏览这个DevEd教程--“ourprice”现在是“id=“priceblock_dealprice”,但每15次尝试才运行一次。

hmtdttj4

hmtdttj46#

它工作一次,然后就停止工作了。我想亚马逊正在阻止请求。
id是正确的,如果你使用lxmlhtml.parser,或者html5lib,它不会改变。如果你使用print(soup),并查看其主体,你会看到一个来自amazon的验证码提示,基本上是说你必须证明你不是机器人。我不知道有什么方法可以解决这个问题。

k5hmc34c

k5hmc34c7#

如果你试图连续运行它,你会遇到这个错误。亚马逊如果阻止请求。一个技巧,让它再次工作是简单地打印html后,你得到它之前,试图解析。

response = requests.get(url=AMAZON_URI, headers={
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9"
})
response.raise_for_status()

data = response.text
# Adding this print will fix the issue for consecutive days.
print(data)
soup = BeautifulSoup(data, "html.parser")
price_dollar = soup.find(name="span", class_="a-price-whole").getText()
price_cents = soup.find(name="span", class_="a-price-fraction").getText()
total_price = (float(f"{price_dollar}{price_cents}"))

print(total_price)
dgtucam1

dgtucam18#

我试着打印total_price而不打印数据,结果成功了。

相关问题