我尝试制作一个需要解析一个特定维基百科页面的Web应用程序。提取在页面上以表格格式存储的一些信息。然后,需要将提取的数据存储到数据库中。
我之前没有真正做过这样的事情。我应该用什么脚本语言来做这件事?我一直在读一点&看起来像Python(使用urllib2& BeautifulSoup)应该做的工作,但它是解决问题的最佳方式。
我知道我也可以使用WikiMedia api但是对于一般的解析问题使用python是一个好主意吗?
维基百科页面上的表格数据也可能会发生变化,因此我需要每天解析。如何为此自动化脚本?还有没有像svn这样的外部工具进行版本控制的想法,以便在需要时可以轻松恢复更新?
答案 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'}