python-3.x - BeautfilSoup 返回“无”
问题描述
我尝试制作一个脚本来跟踪亚马逊的价格。但我不明白为什么它给我这个错误:
Traceback (most recent call last):
File "scraping_amazon.py", line 12, in <module>
price = soup.find('span', class_ = 'a-size-medium a-color-price priceBlockBuyingPriceString').text
AttributeError: 'NoneType' object has no attribute 'text'
到目前为止,这是我的脚本:
import requests
from bs4 import BeautifulSoup
URL = 'https://www.amazon.de/Sony-Vollformat-Digitalkamera-Megapixel-SEL-2870/dp/B00FWUDEEC/ref=sr_1_4?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=sony+a7&qid=1604245969&quartzVehicle=5-672&replacementKeywords=sony&sr=8-4'
page = requests.get(URL)
soup = BeautifulSoup(page.text, 'html.parser')
price = soup.find('span', class_ = 'a-size-medium a-color-price priceBlockBuyingPriceString').text
print(price)
我遵循与我的其他网络抓取脚本相同的过程,他们正在工作,但不是他。
有任何想法吗 ?谢谢。
解决方案
页面内容是使用动态加载的javascript
。您必须使用类似selenium
的东西才能抓取动态加载的页面。这是执行此操作的完整代码:
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
import time
URL = 'https://www.amazon.de/Sony-Vollformat-Digitalkamera-Megapixel-SEL-2870/dp/B00FWUDEEC/ref=sr_1_4?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=sony+a7&qid=1604245969&quartzVehicle=5-672&replacementKeywords=sony&sr=8-4'
driver = webdriver.Chrome()
driver.get(URL)
time.sleep(4)
soup = BeautifulSoup(driver.page_source,'html5lib')
price = soup.find('span', class_ = 'a-size-medium a-color-price priceBlockBuyingPriceString').text
print(price)
driver.close()
输出:
962,16 €
推荐阅读
- python - 用于文本搜索的 Python REST Service Now API
- python - 在使用 iloc 的 python 中,您将如何检索数据框中特定列的最后 12 个值?
- r - excelR包R编程中的excelTable没有显示出来
- cmake - 在宏内使用带有 CMake 的 find_package 的 Qt4 出现问题
- asp.net-mvc - 传递给局部视图的模型不正确
- javascript - 从 UTC 时区确定 DST 或 CST 时区
- java - 如何遍历等于圆形对象的字符串数组?
- python - 尝试将对象属性映射到不同名称的数据库列
- android - 是否可以进行多个并行调用并接受使用 Kotlin Flow 返回的第一个?
- c# - 如何在单元测试中验证 Flurl Http 中的请求正文内容?