用Scraperwiki(Python)创建Google图表脚本

2024-04-23 22:40:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始用Python编写Scraperwiki。已经学会了如何从页面上刮表,每个月运行一次刮板,并将结果相互叠加保存。很酷。在

现在我想scrape this page提供Android版本的信息并每月运行该脚本。特别是,我想要一个版本、代码名、API和发行版的表。它不容易。在

这个表是用包装器div调用的。有什么方法可以获取这些信息吗?我找不到任何解决办法。在

计划B是刮去视觉化。我最终需要的是代号和百分比,这样就足够了。这些信息可以在Google图表脚本的HTML中找到。在

Google Chart API script

但是我用我的“增强”HTML找不到这些信息。我有a public scraper over here。你可以编辑它使它工作。在

有人能解释一下我如何解决这个问题吗?一个有评论的工作刮刀会很棒。在


Tags: 代码版本刮板div脚本api信息html
2条回答

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

ScraperWiki很好,但是我发现,如果你每个月只做一个页面,python脚本+cron要好得多,如果你需要进行JavaScript解析,使用Selenium和它的{a2}是一个更强大的解决方案。在

安装了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()

然后在每月的第一天运行脚本,如下所示:

^{pr2}$

这确实是一个困难的例子,因为正如kisamoto所提到的,数据是在嵌入的JavaScript中,而不是像您预期的那样在单独的JSON文件中。使用beauthulsoup是可能的,但它涉及一些难看的字符串处理:

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']

输出:

^{pr2}$

相关问题 更多 >