2

我刚刚开始在 Python 中使用 Scraperwiki 进行抓取。已经想出了如何从页面中抓取表格,每月运行抓取器并将结果彼此重叠保存。很酷。

现在我想用有关 Android 版本的信息抓取此页面并每月运行脚本。特别是,我想要版本、代号、API 和分发的表格。这并不容易。

使用包装器 div 调用该表。有什么办法可以抓取这些信息吗?我找不到任何解决方案。

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

谷歌图表 API 脚本

但我无法用我的“souped”HTML 找到这些信息。我这里有一个公共刮刀。您可以对其进行编辑以使其正常工作。

谁能解释我如何解决这个问题?一个对正在发生的事情发表评论的工作刮板会很棒。

4

2 回答 2

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'}, ... ]
于 2013-05-04T22:20:52.870 回答
1

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

ScraperWiki 很棒,但是我一直发现,如果你每个月都做一个页面,python 脚本 + cron 会更好,如果你需要这个 JavaScript 解析,使用Selenium和它的python 驱动程序要多得多强大的解决方案。

安装 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
于 2013-05-04T12:54:00.913 回答