这是我的代码:
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)
为什么总是出现此错误?有人可以帮我吗?
答案 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)
此解决方案似乎对我有用。希望对您有帮助