【发布时间】:2021-02-06 21:06:50
【问题描述】:
我会从头开始,因为我觉得自己迷失了所有不同的可能性。我将谈论的是排行榜,但也可以应用于价格跟踪。
我的目标是从website(一直以来的排行榜/隐藏)中抓取数据,将其放入 .csv 文件并每天中午更新。
到目前为止我取得的成功:抓取数据。
- 尝试抓取with BS4,但由于数据被隐藏,我无法具体到仅获得所有时间点。我发现这是成功的,因为我能够获得一个包含我需要的所有数据和日期作为标题的表格。我对这个解决方案的问题是 1) 填充 csv 的无用数据 2) 表格是垂直的而不是水平的
- 抓取数据with CSS selector 但我放弃了这个想法,因为有时页面不会加载并且数据没有被抓取。马上发现有一个json文件包含了数据
- Json 抓取似乎是最佳选择,但无法创建可以用来制作图表的 csv 文件。
这就是让我陷入困境的原因:将数据存储在一个看起来像这样的表格中,其中灰色区域是点,而 DATE1 是数据被抓取的时刻:
我不想过多地操作 csv 文件中的数据。如果表格看起来像我上面的图片,那么之后制作图表会更容易,但我遇到了麻烦。我所做的最好的事情是创建一个看起来像这样并且是垂直而不是水平的表格。
name,points,date
Dennis,52570,10-23-2020
Dinh,40930,10-23-2020
name,points,date
Dennis,52570,10-23-2020
Dinh,40930,10-23-2020
name,points,date
Dennis,52570,10-23-2020
Dinh,40930,10-23-2020
感谢您的帮助。
这是代码
import pandas as pd
import time
timestr = time.strftime("%Y-%m-%d %H:%M")
url_all_time = 'https://community.koodomobile.com/widget/pointsLeaderboard?period=allTime&maxResults=20&excludeRoles='
data = pd.read_json(url_all_time)
table = pd.DataFrame.from_records(data, index=['name'], columns=['points','name'])
table['date'] = pd.Timestamp.today().strftime('%m-%d-%Y')
table.to_csv('products.csv', index=True, encoding='utf-8')
如果我想要的东西是不可能的,我可能只是为每个成员单独抓取,为每个成员制作一个 CSV 文件并制作一个引用这些不同文件的图表。
【问题讨论】:
-
我强烈建议使用轻量级数据库(例如 SQLite),以便将来轻松更新、检索和查询。目标表应该像(日期、排名、用户、分数)一样简单。
-
你能用这个进行网页抓取吗?
-
网页抓取(数据检索)、数据预处理和数据存储是三个独立的步骤。如果我理解正确,您的问题是关于数据预处理和存储。我假设您将独立处理抓取部分(
pd.read_json部分已经工作)。
标签: python pandas dataframe web-scraping