我需要实现数据抓取任务并从动态图中提取数据。图表的更新时间与您查看公司股票图表时的结果类似。我在python中使用请求和beautifulsoup4库,但我只想出了如何刮取文本和链接数据。似乎无法弄清楚如何将图形的值转换为csv文件
相关图表可在 - http://www.apptrace.com/app/instagram/id389801252/ranks/topfreeapplications/36
找到答案 0 :(得分:1)
如果您拥有正确的网址,则可以轻松获取图表中的数据。你可以很容易地找到这个地址,例如"开发者工具"在firefox中(查看" Network" XHR请求的选项卡)。
您将看到正在进行的电话:
src = 'http://www.apptrace.com/api/app/389801252/rankings/country/?country=CAN&start_date=2014-08-08&end_date=&device=iphone&list_type=normal&chart_subtype=iphone'
如果你打电话给你,你将收到一个JSON回复,你可以轻松加载到python中:
import json
import urllib
>>> data = urllib.urlopen(src).read()
>>> reply = json.loads(data)
>>> ranks = reply['rankings'][0]['ranks']
>>> res = {'date': [], 'rank': []}
>>> for d in ranks:
... res['date'].append(d['date'])
... res['rank'].append(d['rank'])
...
>>> res['date'][:3]
[u'2014-08-08', u'2014-08-09', u'2014-08-10']
>>> res['rank'][:3]
[10, 14, 13]
然后,您可以使用python的内置csv module将数据存储到csv中。
答案 1 :(得分:1)
@Oliver W.已经提供了一个很好的答案,但是使用requests
(link here)可以避免必须记录网络呼叫,并且整体上比urllib
更好。
如果您想更灵活地使用代码,可以编写一个带有国家/地区名称以及开始和结束日期的函数。
import requests
import pandas as pd
import json
def load_data(country='', start_date='2014-08-09', end_date='2014-11-1'):
base = "http://www.apptrace.com/api/app/389801252/rankings/country/"
extra = "?country={0}&start_date={1}&end_date={2}&device=iphone&list_type=normal&chart_subtype=iphone"
addr = base + extra.format(country, start_date, end_date)
page = requests.get(addr)
json_data = page.json() #gets the json data from the page
ranks = json_data['rankings'][0]['ranks']
ranks = json.dumps(ranks) #Ensures it has valid json format
df = pd.read_json(ranks, orient='records')
return df
更改网页中的内容以查看您可以从国家/地区获取的其他值(例如,加拿大是'CAN')。空字符串用于美国。
df看起来像这样
date rank
0 2014-08-09 10
1 2014-08-10 10
2 2014-08-11 9
3 2014-08-12 8
4 2014-08-13 8
5 2014-08-14 7
6 2014-08-15 6
7 2014-08-16 8
掌握了pandas数据框后,您可以导出到csv
或在导出之前合并多个数据框
df = load_data()
df.to_csv("file_name.csv")
答案 2 :(得分:0)
您能提供一个参考链接吗?这取决于图表的存储和显示方式。从它像股票代码一样动态来判断,某些标签之间应该有一些文字你可以抓住某个地方。我已经看过使用漂亮的汤从网站获取图像和其他内容的例子,所以这不是不可能的。
昨天我正在努力将数据格式化为CSV格式,并获得了一些非常有用的响应。
检查出来:How can I format every other line to be merged with the line before it? (In Python)
我在这里学到的另一件事是,如果您需要经常收集数据,那么自动运行脚本的好方法就是CRON工作。