【问题标题】:How to parse a specific wiki page & automate that?如何解析特定的 wiki 页面并使其自动化?
【发布时间】:2011-04-13 10:02:04
【问题描述】:

我正在尝试制作一个 Web 应用程序,它需要解析一个特定的维基百科页面并提取一些以表格格式存储在页面上的信息。然后需要将提取的数据存储到数据库中。

我以前从来没有做过这样的事情。我应该使用什么脚本语言来做到这一点?我一直在读一点,看起来 Python(使用 urllib2 和 BeautifulSoup)应该可以完成这项工作,但它是解决问题的最佳方法吗?

我知道我也可以使用 WikiMedia api,但使用 python 是解决一般解析问题的好主意吗?

维基百科页面上的表格数据也可能会改变,所以我需要每天解析。如何为此自动化脚本?还有没有像 svn 这样的外部工具的版本控制的任何想法,以便在需要时可以轻松地恢复更新?

【问题讨论】:

  • 这确实是几个问题(尤其是关于版本控制的部分)。基本上不可能客观地回答,你可能只需要尝试一下。一旦你发现某些事情很难处理,例如Python,你可以回来寻求替代方案。

标签: python parsing screen-scraping


【解决方案1】:

我应该使用哪种脚本语言来执行此操作?

Python 会做,就像您标记了您的问题一样。

看起来 Python(使用 urllib2 和 BeautifulSoup)应该可以完成这项工作,但它是解决问题的最佳方法吗?

这是可行的。我会亲自使用lxml.etree。另一种方法是以原始格式获取页面,然后您将执行不同的解析任务。

我知道我也可以使用 WikiMedia api,但使用 python 是解决一般解析问题的好主意吗?

这似乎是一个陈述和一个不相关的争论问题。主观上,如果我正在解决您要问的问题,我会使用 python。

维基百科页面上的表格数据也可能会改变,所以我需要每天解析。如何为此自动化脚本?

Unix cron 作业。

还有什么想法可以在没有外部工具(如 svn)的情况下进行版本控制,以便在需要时轻松恢复更新?

Subversion 存储库可以与您编写的脚本在同一台机器上运行。或者,您可以使用分布式版本控制系统,例如git.


奇怪的是,你没有提到你打算用这些数据做什么。

【讨论】:

    【解决方案2】:

    是的,Python 是网络抓取的绝佳选择。

    维基百科经常更新内容,但很少更新结构。如果表有一些独特的东西,比如 ID,那么您可以更自信地提取数据。

    这是一个使用this library 抓取维基百科的简单示例:

    from webscraping import common, download, xpath
    html = download.Download().fetch('http://en.wikipedia.org/wiki/Stackoverflow')
    attributes = {}
    for tr in xpath.search(html, '//table//tr'):
        th = xpath.get(tr, '/th')
        if th:
            td = xpath.get(tr, '/td')
            attributes[common.clean(th)] = common.clean(td)
    print attributes
    

    这是输出:

    {'Commercial?': 'Yes', 'Available language(s)': 'English', 'URL': 'stackoverflow.com', 'Current status': 'Online', 'Created by': 'Joel Spolsky and Jeff Atwood', 'Registration': 'Optional; Uses OpenID', 'Owner': 'Stack Exchange, Inc.', 'Alexa rank': '160[1]', 'Type of site': 'Question & Answer', 'Launched': 'August 2008'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多