我收到此错误:AttributeError:'NoneType'对象没有属性'get_title'(在python中)

时间:2020-05-18 07:20:47

标签: python

这是我的代码:

from bs4 import BeautifulSoup
import requests
import smtplib

URL = 'https://www.amazon.com/Garmin-Forerunner-Contactless-Payments-Wrist-Based/dp/B07DPMQ59K?ref_=Oct_DLandingS_D_503e89e0_61&smid=ATVPDKIKX0DER'

headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 OPR/68.0.3618.112'}

page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, "html.parser")
title = soup.find(id="prodcutTitle").get_title()
print(title)

为什么总是出现此错误?有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

拉吉斯。 在您的代码中,他们曾经写过一个小的拼写错误-

title = soup.find(id="prodcutTitle").get_title()

您写了prodcutTitle,而它应该是productTitle。

我什至通过使用该页面上的JS控制台进行了检查。

答案 1 :(得分:0)

Lagis_YT YT

title = soup.find(id="prodcutTitle").get_title()中的问题,这里不是对象soup.find(id="prodcutTitle"),您可以使用该对象调用任何方法并检索数据,而不是获得一些字符串内容。

您必须更改基于对象的调用方法。

谢谢

答案 2 :(得分:0)

问题似乎在于亚马逊的网络抓取工具检测。为此,您可以使用请求库创建一个会话,以便可以存储cookie。由于某些原因,BS4找不到#productName。但是,它们可以从页面元数据中拉出

import requests
from bs4 import BeautifulSoup

URL = 'https://www.amazon.com/Garmin-Forerunner-Contactless-Payments-Wrist-Based/dp/B07DPMQ59K?ref_=Oct_DLandingS_D_503e89e0_61&smid=ATVPDKIKX0DER'
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 OPR/68.0.3618.112'}

# Create a new session and get the page
session = requests.Session()
page = session.get(URL, headers = headers)
soup = BeautifulSoup(page.content, "html.parser")

# Get the metadata but remove the "Amazon.com:" at the start.
title = soup.findAll("meta", {"name": "description"})[0]["content"].replace("Amazon.com: ", "")
print(title)

此解决方案似乎对我有用。希望对您有帮助