如何解决使用 Web Scraping 获取商品价格
我想制作一个 Python 脚本,但不幸的是,当我想查看价格时,我得到的是 NONE
而不是价格本身(如果我更改了价格,则为 00.00 美元)代码)。
我找到了很多例子,其中 HTML 与 id
一起使用,但我不知道我应该如何使用 class
。
到目前为止我所拥有的:
import requests
from bs4 import BeautifulSoup
URL = 'https://www.banggood.com/BlitzWolf-BW-LT32-2M-USB-RGB-TV-Strip-Light-Kit-Sync-with-TV-Screen-Color-3-Sides-Cover-for-TV-Vivid-RGB-Color-Lighting-Effect-and-Dual-Simple-Control-p-1785284.html?akmClientCountry=HU&channel=facebookads&utm_source=facebookads&utm_medium=cpc&utm_campaign=app-dpa-all-ww-sm-afpur180-0407_prdshare_msg&utm_content=suki&utm_design=-&fbclid=IwAR3cAovrze4opttuwwpUxnXZ6dkRjhau3RqmDqASPW0mSEOI8sJgn9Cqss8&_branch_match_id=850392564428961100&cur_warehouse=CN&ID=45764'
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/87.0.4280.88 Safari/537'}
page = requests.get(URL,headers=headers)
soup = BeautifulSoup(page.content,'html.parser')
title = soup.find("span",{"class":'product-title-text'}).get_text()
price = soup.find("span",{"class":'main-price'}).get_text()
converted_price = price[0:5]
print(converted_price)
print(title)
解决方法
当网站使用 Javascript 并动态更改时,
BeautifulSoup
对网页抓取的用处很小。如今,大多数网站都使用 Javascript,因此很难抓取数据。另一种选择是使用 Selenium
。
如果你已经使用过Selenium
,那么直接跳转到下面的代码块。如果没有,请按照以下说明操作。
- 在选项菜单(浏览器的右上角)下的
About Chrome
中检查您使用的 Chrome 版本。 - 转到 this 网站并下载相同版本的驱动程序。
- 创建一个文件夹
C:\webdrivers
并将下载的驱动程序复制到该文件夹中。 - 复制文件路径
C:\webdrivers\chromedriver.exe
并将其添加到environment variables
中的 PATH (
现在执行下面的代码:
from selenium import webdriver
opts = webdriver.ChromeOptions()
# The below line will make your browser run in background when uncommented
# opts.add_argument('--headless')
driver = webdriver.Chrome(options= opts,executable_path = 'C:\webdrivers\chromedriver.exe')
driver.get("https://www.banggood.in/BlitzWolf-BW-LT32-2M-USB-RGB-TV-Strip-Light-Kit-Sync-with-TV-Screen-Color-3-Sides-Cover-for-TV-Vivid-RGB-Color-Lighting-Effect-and-Dual-Simple-Control-p-1785284.html?akmClientCountry=HU&channel=facebookads&utm_source=facebookads&utm_medium=cpc&utm_campaign=app-dpa-all-ww-sm-afpur180-0407_prdshare_msg&utm_content=suki&utm_design=-&_branch_match_id=850392564428961100&cur_warehouse=CN&ID=45764")
prices = driver.find_elements_by_class_name('main-price')
for price in prices:
print(price.text)
driver.quit()
输出:
₹1,712.63
有关 Selenium
的更多详细信息,请参阅 documentation,这是一个令人印象深刻的模块!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。