如何解析特定的wiki页面&自动化吗?

时间:2011-04-13 10:02:05

标签: python parsing screen-scraping

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

我之前没有真正做过这样的事情。我应该用什么脚本语言来做这件事?我一直在读一点&看起来像Python(使用urllib2& BeautifulSoup)应该做的工作,但它是解决问题的最佳方式。

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

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

2 个答案:

答案 0 :(得分:1)

  

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

Python会做,因为你已经标记了你的问题。

  

看起来像Python(使用urllib2& BeautifulSoup)应该完成这项工作,但它是解决问题的最佳方式。

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

  

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

这似乎是一个陈述和一个无关的议论问题。主观上,如果我正在接近你要问的问题,我会使用python。

  

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

Unix cron job。

  

还有没有像svn这样的外部工具进行版本控制的想法,以便在需要时可以轻松恢复更新?

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


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

答案 1 :(得分:0)

是的,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'}