使用Scraperwiki(Python)刮取Google Chart脚本

时间:2013-05-04 11:14:11

标签: python web-scraping scraperwiki

我刚刚在Python中使用Scraperwiki。已经弄清楚如何从页面刮取表格,每月运行刮刀并将结果保存在彼此之上。很酷。

现在我希望scrape this page提供有关Android版本的信息并每月运行该脚本。特别是,我想要用于版本,代号,API和分发的表。这不容易。

使用包装器div调用该表。有没有办法搞这些信息?我找不到任何解决方案。

计划B是抓取可视化。我最终需要的是代号和百分比,这样就足够了。此信息可在Google Chart脚本的HTML中找到。

Google Chart API script

但是我无法用我的'sled'HTML找到这些信息。我有a public scraper over here。您可以对其进行编辑以使其正常工作。

任何人都可以解释我如何解决这个问题吗?一个工作刮刀,对正在发生的事情发表评论将是非常棒的。

2 个答案:

答案 0 :(得分:1)

由于它是在JavaScript中存储和呈现的,因此原始Python scraper无法执行此代码并查看可视化或表格。

ScraperWiki非常好但是我总是发现,如果你每个月都在做一个页面,那么python脚本+ cron要好得多,如果你需要使用Selenium进行这种JavaScript解析,它python driver是一个更强大的解决方案。

如果安装了selenium服务器,您可以粗略地以下(以伪代码形式)

#!/bin/env python
from selenium import webdriver

browser = webdriver.Firefox() 
# Load page with all Javascript rendered in the DOM for you.
browser.get("http://developer.android.com/about/dashboards/index.html") 
# Find the table
table = browser.find_element_by_xpath("/html/body/div[3]/div[2]/div/div/div[2]/div/div/table") 
# Do something with the table element
# Save the data
browser.close()

然后只需要在一个月的第一天运行脚本的cron作业,如下所示:

0 0 1 * * /path/to/python_script.py

答案 1 :(得分:1)

这实际上是一个很难的案例,因为正如kisamoto所提到的,数据在嵌入式JavaScript中,而不是像您期望的那样在单独的JSON文件中。有可能使用BeautifulSoup,但它会产生一些丑陋的字符串处理:

last_paragraph = soup.find_all('p', style='clear:both')[-1]
script_tag = last_paragraph.next_sibling.next_sibling
script_text = script_tag.text

lines = script_text.split('\n')
data_text = ''
for line in lines:

    if 'SCREEN_DATA' in line: break
    data_text = data_text + line

data_text = data_text.replace('var VERSION_DATA =', '')
# delete semicolon at the end
data_text = data_text[:-1]

data = json.loads(data_text)
data = data[0]
print data['data']

输出:

[{u'perc': u'0.1', u'api': 4, u'name': u'Donut'}, ... ]