【问题标题】:Scrape a Google Chart script with Scraperwiki (Python)使用 Scraperwiki (Python) 抓取 Google Chart 脚本
【发布时间】:2013-04-28 17:27:03
【问题描述】:

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

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

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

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

但我无法使用我的“souped”HTML 找到此信息。我有a public scraper over here。您可以对其进行编辑以使其正常工作。

谁能解释我如何解决这个问题?一个带有 cmets 的工作刮板会很棒。

【问题讨论】:

    标签: python web-scraping scraperwiki


    【解决方案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'}, ... ]
    

    【讨论】:

      【解决方案2】:

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

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

      安装 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
      

      【讨论】:

      • 你能解释一下它是如何在 Scraperwiki 中完成的吗?对学习很有帮助。然后,我可以稍后再采用上述解决方案。谢谢!
      • 嗨@JerryVermanen - 遗憾的是 ScraperWiki 还不支持这种 JavaScript 解析功能。虽然还在筹备中!查看使用 Selenium 的开放 BitBucket issue 和潜在的未来 example scraper。 (虽然请注意 - 刮刀还不能工作)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2013-01-26
      相关资源
      最近更新 更多