如何解析特定维基页面并实现自动化?

2 投票
2 回答
946 浏览
提问于 2025-04-16 15:38

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

我之前没有做过这样的事情。我应该使用什么脚本语言来完成这个任务呢?我看了一些资料,发现使用Python(配合urllib2和BeautifulSoup)似乎可以做到,但这真的是解决这个问题的最佳方法吗?

我知道我也可以使用WikiMedia的API,但用Python来处理一般的解析问题是否合适呢?

另外,维基百科页面上的表格数据可能会变化,所以我需要每天都进行解析。我该如何自动化这个脚本呢?还有,关于版本控制,有没有什么想法,不想使用像svn这样的外部工具,以便在需要时可以轻松恢复更新?

2 个回答

0

是的,Python非常适合用来抓取网页数据。

维基百科经常更新内容,但它的结构很少变化。如果表格里有一些独特的东西,比如ID,那么你就可以更有把握地提取数据。

下面是一个简单的例子,教你如何用这个库来抓取维基百科的数据:

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'}
1

我应该用什么脚本语言来做这个?

Python可以用,因为你在问题中提到了它。

看起来Python(使用urllib2和BeautifulSoup)可以完成这个任务,但这真的是解决问题的最佳方法吗?

这个方法是可行的。我个人会选择使用lxml.etree。另外一种方法是直接获取页面的原始格式,这样你就需要进行不同的解析工作。

我知道我也可以使用WikiMedia的API,但用Python来处理一般的解析问题是否合适?

这听起来像是一个陈述和一个无关的争论性问题。主观来说,如果我是你,面对你提到的问题,我会选择Python。

而且维基百科页面上的表格数据可能会变化,所以我需要每天解析一次。我该如何自动化这个脚本?

可以使用Unix的cron作业。

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

你可以在与脚本相同的机器上运行一个Subversion仓库。或者你也可以使用分布式版本控制系统,比如git


有趣的是,你没有提到你打算如何使用这些数据。

撰写回答