- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url = 'https://www.newegg.com/Video-Cards-Video-Devices/Category/ID-38?Tpk=graphics%20cards'
# opening up connection, grabbing the page
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
#html parsing
page_soup = soup(page_html, "html.parser")
#grabs each product
containers = page_soup.findAll("div", {"class":"item-container"})
for container in containers:
brand = container[0].img["title"].title()
title_container = container.findAll("a", {"class":"item-title"})
product_name = title_container[0].txt
shipping_container = container.findAll("li", {"class":"price-ship"})
shipping = shipping_container[0].text.strip()
print("Brand: "+ brand)
print("product name: "+ product_name)
print("shipping: "+ shipping)
运行该程序后,出现以下错误。
Traceback (most recent call last): File "my_first_websraper.py", line 18, in brand = container[0].img["title"].title() File "C:\Users\MyUserName\AppData\Local\Programs\Python\Python38-32\lib\site-packages\bs4\element.py", line 1368, in getitem return self.attrs[key] KeyError: 0
当他在教程中运行它时,它不仅正确地列出了所有内容,而且以相同的方式列出了网站上的所有内容。关于如何解决此问题的任何想法?
要了解该视频的外观,请观看 28:55:https://www.youtube.com/watch?v=XQgXKtPSzUI
最佳答案
我知道这不是使用与您相同的包,甚至不是接近相同的代码,但我能够使用 selenium 获取每件商品及其价格!我在使用其他库时遇到过问题,因为它们只能获取 html 内容而不能使用 headless 浏览器(通常)。这会导致呈现的网页出现问题,因为它们会在呈现所有产品之前获取页面。
我使用这个 selenium 脚本在页面上获取了价格:
编辑:添加排序
编辑:添加了 excel 输出和数字格式
url = "https://www.newegg.com/Video-Cards-Video-Devices/Category/ID-38?Tpk=graphics%20cards"
driver.get(url)
# let the page load
time.sleep(5)
get_price = lambda x: x.text.split(' ')[0].replace('$', '').replace('Free', '0')
# get all the prices of the products on the page
prices = [{'product': item.find_element_by_class_name('item-title').text,
'price': get_price(item.find_element_by_class_name('price-current')),
'shipping': get_price(item.find_element_by_class_name('price-ship'))}
for item in driver.find_elements_by_class_name('item-info')]
prices_sorted = sorted(prices, key=lambda x: x['price'])
# prettify the output with json
import json
print(json.dumps(prices_sorted, indent=4))
# -------------- export to excel --------------
from openpyxl import Workbook
# create the workbook
wb = Workbook()
# select the first sheet
ws = wb.active
# write the header row
ws.append([key for key in prices_sorted[0].keys()])
for row in prices_sorted:
# write each row
ws.append([value for value in row.values()])
path = './prices.xlsx'
# save the file
wb.save(filename = path)
输出:
[
{
"product": "GIGABYTE Radeon RX 570 DirectX 12 GV-RX570GAMING-4GD REV2.0 Video Card",
"price": "$119.99",
"shipping": "Free"
},
{
"product": "ASRock Phantom Gaming D Radeon RX 570 DirectX 12 RX570 4G Video Card",
"price": "$119.99",
"shipping": "Free"
},
{
"product": "MSI Radeon RX 570 DirectX 12 RX 570 8GT OC Video Card",
"price": "$135.99",
"shipping": "Free"
},
{
"product": "XFX Radeon RX 580 DirectX 12 RX-580P8RFD6 Video Card",
"price": "$189.99",
"shipping": "$5.99"
},
{
"product": "MSI GeForce GTX 1660 SUPER DirectX 12 GTX 1660 SUPER VENTUS XS OC Video Card",
"price": "$249.99",
"shipping": "Free"
},
{
"product": "SAPPHIRE PULSE Radeon RX 5600 XT DirectX 12 100419P6GL Video Card",
"price": "$289.99",
"shipping": "$3.99"
},
{
"product": "EVGA GeForce GTX 1660 Ti SC ULTRA GAMING, 06G-P4-1667-KR, 6GB GDDR6, Dual Fan, Metal Backplate",
"price": "$299.99",
"shipping": "Free"
},
{
"product": "EVGA GeForce RTX 2060 KO ULTRA GAMING Video Card, 06G-P4-2068-KR, 6GB GDDR6, Dual Fans, Metal Backplate",
"price": "$319.99",
"shipping": "Free"
},
{
"product": "MSI GeForce RTX 2060 DirectX 12 RTX 2060 VENTUS XS 6G OC Video Card",
"price": "$339.99",
"shipping": "Free"
},
{
"product": "ASUS GeForce RTX 2060 Overclocked 6G GDDR6 Dual-Fan EVO Edition Graphics Card (DUAL-RTX2060-O6G-EVO)",
"price": "$349.99",
"shipping": "Free"
},
{
"product": "ASUS ROG Strix Radeon RX 5700 XT ROG-STRIX-RX5700XT-O8G-GAMING Video Card",
"price": "$459.99",
"shipping": "Free"
},
{
"product": "GIGABYTE GeForce RTX 2070 Super WINDFORCE OC 3X 8G Graphics Card, GV-N207SWF3OC-8GD",
"price": "$499.99",
"shipping": "Free"
}
]
Excel输出:
这是 Colab 工作表的链接,您可以自己运行它:https://drive.google.com/open?id=1LLTyZ0ATiUS3f-WJdGvnlaUXv0h8U4i-
关于python - python web scraper 中的错误无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61626554/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!