- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
之前没有 Python 经验,所以这可能是非常基础的。
我正在尝试记录加拿大零售商 SportChek 销售的所有曲棍球棒的名称和后来的价格。
到目前为止,我的代码如下所示:
# Import libraries
import requests
from bs4 import BeautifulSoup
# Collect the page
page = requests.get('https://www.sportchek.ca/categories/shop-by-sport/hockey/hockey-sticks.html?cid=search-hockey-sticks')
# Create BeautifulSoup object
soup = BeautifulSoup(page.text, 'html.parser')
# Pull all text from product-title-text class
stick_name_list = soup.find_all(class_='product-title-text')
# Pull all text from product-price-text
stick_price_list = soup.find_all(class_='product-price-text')
我相信这段代码应该收集适当的数据,但我不确定现在如何显示变量。
使用变量名(即“stick_name_list”)返回“[]”,“print stick_name_list”需要括号,但显然“print 'stick_name_list'”是不正确的。
任何指导表示赞赏。
最佳答案
正如其他人所说,您可以直接获取 json(而不是必须解析它)
import requests
import math
from pandas.io.json import json_normalize
url = 'https://www.sportchek.ca/services/sportchek/search-and-promote/products'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
payload = {
'x1': 'c.category-level-1',
'q1': 'Gear',
'x2': 'c.category-level-2',
'q2': 'Hockey',
'x3': 'c.category-level-3',
'q3': 'Hockey Sticks',
'preselectedCategoriesNumber': '3',
'preselectedBrandsNumber': '0',
'page': '1',
'count': '200'}
jsonData = requests.get(url, headers=headers, params=payload).json()
total_products = jsonData['resultCount']['total']
total_pages = math.ceil(total_products / 200)
for page in range(2, total_pages+1):
payload = {
'x1': 'c.category-level-1',
'q1': 'Gear',
'x2': 'c.category-level-2',
'q2': 'Hockey',
'x3': 'c.category-level-3',
'q3': 'Hockey Sticks',
'preselectedCategoriesNumber': '3',
'preselectedBrandsNumber': '0',
'page': page,
'count': '200'}
products = requests.get(url, headers=headers, params=payload).json()['products']
jsonData['products'] = jsonData['products'] + products
print ('Processed page: %s' %page)
df = json_normalize(jsonData['products'])
您可以按照自己喜欢的方式操作表格,或者直接使用 json 文件。不过,我只是将其转换为表格。
输出:
print (df[['title', 'price']])
title price
0 Bauer Supreme 1S Griptac Senior Hockey Stick -... 339.99
1 Warrior Covert QRL SE Grip Senior Hockey Stick 329.99
2 Bauer Vapor X600 Lite Griptac Senior Hockey Stick 69.99
3 Gift Cards NaN
4 Bauer Supreme 1S Clear Senior Hockey Stick - G... 339.99
5 Bauer Vapor 1X Lite Griptac Senior Hockey Stick 339.99
6 Bauer NEXUS 1N Griptac Gen II Senior Hockey Stick 254.97
7 Flash Sale NaN
8 Sher-Wood Project 9 Sticks NaN
9 Bauer Supreme 2S Team Griptac Senior Hockey Stick 159.99
10 Bauer Supreme S160 Griptac Junior Hockey Stick... 44.97
11 Bauer Nexus 2N Pro Senior Hockey Stick 319.99
12 Warrior Alpha QX Grip Intermediate Hockey Stick 184.88
13 TRUE XC5 ACF Grip Junior Hockey Stick 79.99
14 Warrior Covert QRE ST2 Grip Senior Hockey Stick 89.99
15 Mother's Day Gift Guide NaN
16 Bauer Supreme S190 Griptac Senior Hockey Stick... 156.97
17 Bauer Vapor X700 Lite Griptac Senior Hockey Stick 119.99
18 Bauer Supreme 2S Pro Griptac Senior Hockey Stick 319.99
19 Bauer Nexus 2N Pro Junior Hockey Stick 199.99
20 Bauer Vapor 1X Lite Griptac Intermediate Hocke... 319.99
21 Bauer Supreme 1S Griptac Intermediate Hockey S... 223.97
22 Bauer Nexus 2N Pro Intermediate Hockey Stick 299.99
23 TRUE XC9 ACF Grip Junior 30 Hockey Stick 119.99
24 TRUE XC9 ACF Youth 20 Hockey Stick 99.99
25 Bauer Nexus 2N Senior Hockey Stick 224.99
26 Bauer Supreme 1S Youth Hockey Stick - Gen II 69.97
27 TRUE XC9 ACF Grip Gen II Senior Hockey Stick 319.99
28 Bauer Supreme 2S Pro Griptac Junior Hockey Stick 199.99
29 Bauer NEXUS N7000 Griptac Gen II Intermediate ... 89.97
.. ... ...
408 Warrior Covert QRL Grip Senior Hockey Stick 159.97
409 Bauer Vapor X800 Griptac Gen II Senior Hockey ... 109.97
410 Graf G95 Revolt Grip Senior Hockey Stick - GP0... 109.88
411 CCM Ribcor 47K Grip Senior Hockey Stick 79.97
412 Sher-Wood BPM 060 Grip Senior Hockey Stick 51.97
413 CCM RBZ Revolution Grip Senior Hockey Stick 149.88
414 CCM Premier R1.5 Senior Goalie Stick - Crawfor... 89.97
415 Bauer Vapor 1X Senior Goalie Stick - P31 25" 289.99
416 Sher-Wood GS350 Senior Goalie Stick 24" - PP41 96.97
417 Sher-Wood GS350 Senior Goalie Stick - PP41 27" 96.97
418 Bauer Vapor X900 Senior Goalie Stick - P31 26" 199.99
419 Sher-Wood GS150 Senior Goalie Stick - 24" 74.97
420 Sher-Wood GS150 Senior Goalie Stick - 25" 74.97
421 CCM 1060 Senior Goalie Stick - Price 27" 89.88
422 Sher-Wood GS150 Senior Goalie Stick - 26" 74.97
423 Sher-Wood GS150 Senior Goalie Stick - 27" 74.97
424 CCM Premier R1.9 Senior Goalie Stick - Crawfor... 119.97
425 Sher-Wood BPM 090 Grip Intermediate Hockey Stick 81.97
426 Warrior Covert QRL5 Grip Intermediate Hockey S... 63.97
427 Warrior Covert DT1 LT Grip Intermediate Hockey... 111.88
428 Warrior Covert Super Dolomite Grip Intermediat... 189.88
429 Warrior Dynasty HD1 Intermediate Stick - Grip ... 123.88
430 Easton Stealth CX Grip Intermediate Hockey Sti... 159.88
431 Easton Synergy 20 Intermediate Stick - Grip - ... 34.88
432 Sherwood T120 Intermediate Grip Hockey Stick -... 99.97
433 GRAF G75 Intermediate 70 Flex Hockey Stick - GP22 99.88
434 Bauer Vapor X700 Griptac Gen II Intermediate H... 79.97
435 Easton Synergy HTX Intermediate Stick - Grip -... 115.88
436 Sherwood T120 Intermediate Grip Hockey Stick -... 99.97
437 Sher-Wood BPM 060 Grip Intermediate Hockey Stick 51.97
[438 rows x 2 columns]
关于python - 如何打印 BeautifulSoup 收集的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55822336/
引用网址 http://hi.baidu.com/quiteuniverse/blog/item/9f3f043d46ad1e07bba16716.html 以下函数调用方式:&nbs
我什至不确定如何描述我正在尝试做的事情,因为我对 cookie 了解不多,但就这样吧。 是否可以使用PHP从浏览器缓存中收集一个cookie(或cookie文件),将其保存到数据库中,然后清除缓存并重
我正在使用 Room(v. 2.2.1)和协程支持(v. 1.3.2)并进行以下设置 @Entity(tableName = "simple_table") data class SimpleEnti
我正在尝试编写一个基于时间运算符收集/累积值的规则。 rule "Zone6 Overlap" when $i1 : Instance ($e1 : event == " Vel : 20.9
我有一个简单的 BST,定义了节点结构: struct node { int key_value; struct node *left; struct node *right; }; ty
我有这个对象: public class MenuPriceByDay implements Serializable { private BigDecimal avgPrice; p
我正在开发一个应用程序,需要访问给定传感器的“最后 5 秒有值(value)的数据”。我的计划是以某种方式存储这些数据,然后当我请求数据时,它将返回最近 5 秒内获得的所有数据。鉴于以下情况,我不确定
在 Ruby 中,您可以对数组使用 map/collect 方法来修改它: a = [ "a", "b", "c", "d" ] a.collect! {|x| x + "!" } a
我即将开始实时收集大量数字数据(对于那些感兴趣的人,各种股票和 future 的出价/要价/最后或“磁带”)。稍后将检索数据以进行分析和模拟。这一点都不难,但我想高效地做到这一点,这会带来很多问题。我
我提出这个问题是为了寻求有关如何设计系统的实用建议。 像 amazon.com 和 pandora 这样的网站拥有并维护着庞大的数据集来运行他们的核心业务。例如,亚马逊(以及所有其他主要电子商务网站)
假设我们有一个数据数组和另一个带索引的数组。 data = [1, 2, 3, 4, 5, 7] index = [5, 1, 4, 0, 2, 3] 我们想从 index 的 data 元素创建一个
好的,我已经阅读了几个关于它的主题,但现在就开始吧。假设我有一个应用程序,基本上我会时不时地点击一个按钮,几分钟内会发生很多事情,然后它可能会再闲置一个小时,或者可能只是 1 分钟。难道不是在整个结束
我有一个数据框,例如 Seq Chrm start end length score 0 A C1 1 50 49 12 1 B
我正在考虑在 Object[] 数组中收集泛型方法的所有方法参数以进行记录。我知道使用方面可以更好地实现这一点,但是我不允许使用它,并且如果可能的话我正在寻找一种基于纯反射的方法 为了澄清, 假设一个
快速提问: 如果 Socket 对象(及其本地缓存的 InputStream 和 OutputStream 对象)超出范围并被垃圾收集,连接是否在 JVM 中保持打开状态? (即,不会在监听服务器上抛
是否有用于收集 facebook 公共(public)数据作为实时提要的 API。我阅读了关于用于收集数据的公共(public)提要 API,但我现在不能申请,而且它不是免费的,还有 Open str
摘要 :我使用自定义收集器收集给定搜索的所有命中的文档 ID(它使用 ID 填充 BitSet)。根据我的需要,搜索和获取文档 ID 的速度非常快,但是当涉及到从磁盘实际获取文档时,事情变得非常缓慢。
我正在寻找一种方法来从自定义 Gradle 插件收集给定项目的所有依赖约束(通过常规 platform 和/或 enforcedPlatform 和/或“手动”强制执行)。 在 Maven 世界中,您
我有一个 CSV 格式的用户列表,但我需要按广告中的名称从每个用户收集 SamAccount 属性。 CSV 模型 脚本 Get-ADObject -Filter 'ObjectClass -eq "
我得到了一个非常大的列表,其中包含大约 200 个带有文本和图像的项目。 ng-repeat 是一种缓慢渲染的方式。它尝试过这个 solution 。效果很好。但不适合重复收集。 我的网络服务返回此:
我是一名优秀的程序员,十分优秀!