python - 我想用 bs4 从亚马逊获取产品的标题
问题描述
我想通过 BeuatifulSoup 和请求获得这个亚马逊产品的标题。当我运行时,这是说:
Traceback (most recent call last):
File "scraper.py", line 15, in <module>
title = soup.find('span', id='productTitle').get_text()
AttributeError: 'NoneType' object has no attribute 'get_text'
请帮助我
import bs4
import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen
url = 'https://www.amazon.de/OnePlus-Smartphone-Almond-Display-Speicher/dp/B07RWL3K1Y/ref=sr_1_2? __mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=oneplus+7+pro&qid=1598088298&sr=8-2'
headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36'
}
page = requests.get(url, headers = headers)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.find('span', id='productTitle').get_text()
print(title)
解决方案
问题是使用“html.parser”作为您的 bs4 解析器。改用 lxml (它将更优雅地处理损坏的 html)。该错误试图告诉您它从未找到<span id='productTitle'>
- 我们可以看到它在那里,因此它可能是与非标准 HTML 相关的解析失败。
import requests
from bs4 import BeautifulSoup
url = 'https://www.amazon.de/OnePlus-Smartphone-Almond-Display-Speicher/dp/B07RWL3K1Y/ref=sr_1_2? __mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=oneplus+7+pro&qid=1598088298&sr=8-2'
headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36'
}
page = requests.get(url, headers = headers)
soup = BeautifulSoup(page.content, 'lxml')
title = soup.find('span', id='productTitle').get_text().strip()
print(title)
输出:
OnePlus 7 Pro Smartphone Almond (16,9 cm) AMOLED Display 8 GB RAM + 256 GB Speicher, Triple Kamera (48 MP) Pop-up Kamera (16 MP) – Dual SIM Handy
推荐阅读
- c# - SpeakSsmlAsync 返回 BadRequest
- excel - 加载行为 3 Excel 加载项在打开文件后加载,在慢速计算机上通过命令行启动时
- tensorflow - 有什么作用?张量形状?
- android-espresso - 返回布尔值是否可见
- javascript - 运行样板反应导航应用程序时“未定义不是对象(评估'Component.router')”
- mysql - SQL:我需要为表中的每组数据选择具有最大列的行
- angular - AutoRest 的 TypeScript 客户端的 HttpInterceptor
- php - 如何从自定义 Laravel CMS 创建新页面
- c# - 有没有办法通过提示选项将选项选项显示为 Web 频道机器人中的按钮,以便使用 C# 在 V4 SDK 中进行多选?
- slickgrid - 是否有可能在另一个 slickgrid 中有一个 slickgrid?