【问题标题】:"AttributeError: 'NoneType' object has no attribute 'get_text'"“AttributeError:‘NoneType’对象没有属性‘get_text’”
【发布时间】:2019-08-12 13:31:58
【问题描述】:

每当我尝试运行此代码时:

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' 之前这段代码工作正常。

【问题讨论】:

  • UI 可能会发生变化。 ID:priceblock_ourprice 可能不再在新 UI 中可用。
  • soup.find(id="productTitle")soup.find(id="priceblock_ourprice") 返回 None

标签: python


【解决方案1】:
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)

我试过了,效果很好

【讨论】:

  • 欢迎来到 Stack Overflow!请正确格式化您的代码,click here to learn how
  • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
【解决方案2】:

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

希望对你有帮助

【讨论】:

    【解决方案3】:

    我假设您尝试分析亚马逊产品。 元素 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 €
    

    【讨论】:

      【解决方案4】:

      请检查这可能是产品缺货的原因意味着网站中没有价格,这就是它的 Nonetype 的原因。尝试选择其他价格可见的产品。

      【讨论】:

        【解决方案5】:

        我知道这已经晚了 2.2 年,但我现在正在阅读这个 DevEd 教程 - 'ourprice' 现在是 'id="priceblock_dealprice"。但每 15 次尝试仅运行一次。

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        【解决方案6】:

        它工作一次然后停止工作。亚马逊正在阻止我认为的请求。

        ID 是正确的,如果您使用 lxmlhtml.parserhtml5lib,它不会改变。如果你print(soup) 并查看身体,你会看到来自亚马逊的验证码提示,基本上说你必须证明你不是机器人。我不知道有什么办法。

        【讨论】:

          猜你喜欢
          • 2015-04-07
          • 2017-12-28
          • 1970-01-01
          • 2020-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-25
          • 1970-01-01
          相关资源
          最近更新 更多