递归解析维基百科并从包含的链接中获取文本

时间:2012-09-28 09:10:03

标签: python parsing recursion web-scraping wikipedia

因为我讨厌通过维基百科文章点击和回读,我正在尝试根据以下算法构建一个工具来创建“扩展的维基百科文章”:

  • 创建两个变量:DepthLength
  • 将维基百科文章设为种子页
  • 通过本文解析:每当有另一篇文章的链接时,请获取第一个Length句子并将其包含在原始文章中(例如括号中或以其他方式突出显示)。
  • 递归到达某个Depth,即不超过两个级别。

结果将是一篇文章,可以一次性阅读,而不是总是点击来回......

你将如何在Python中构建这样的机制?应该使用哪些库(这些任务是否存在)?有没有有用的教程?

5 个答案:

答案 0 :(得分:3)

您可以使用urllib2来请求网址。为了解析htmlpage,你可以找到名为BeautifulSoup的精彩图书馆。您需要考虑的一件事是,在使用您的抓取工具扫描Wikipedia时,您需要添加标头以及您的请求。否则维基百科将无法被抓取。

 request = urllib2.Request(page)

添加标题

 request.add_header('User-agent', 'Mozilla/5.0 (Linux i686)')

然后加载页面并将其提供给BeautifulSoup

 soup = BeautifulSoup(response)  
 text = soup.get_text()

这将为您提供页面中的链接

 for url in soup.find_all('a',attrs={'href': re.compile("^http://")}):  
       link = url['href']

现在关于抓取维基百科的算法,你想要的是Depth Limited Search。伪代码在同一页面中提供,易于遵循。

所述库的其他功能可以用Google搜索并且易于遵循。祝你好运。

答案 1 :(得分:2)

您可能想要尝试Mechanize - 它比urllib和其他内置库更高级别。特别是,您可以像使用浏览器一样轻松浏览,使用follow_link()back()等命令。

要获得您想要的行,请查看几个维基百科页面的来源,以查看摘要在HTML页面中的开始位置 - 从快速浏览,我想您要找到ID为“mw-的div” content-text“并从第一个<p>元素中获取文本。正如其他人所提到的那样,Beautiful Soup会擅长这一点。

或者,你可以尝试一个与维基百科一起使用的Python库 - 这里有一个列表:http://en.wikipedia.org/wiki/Wikipedia%3aCreating_a_bot#Python,以及some stackoverflow答案中的recommendations other。< / p>

听起来像一个有趣的小项目,祝你好运!

答案 2 :(得分:1)

使用BeautifulSoupScrapy来解析html页面。使用urllibrequests获取嵌套页面。您可能需要使用一些正则表达式来按摩或评估提取的链接。

答案 3 :(得分:1)

您可以解析html,也可以解析寻找[[Link]]的原始版本。 无论哪种方式,你都应该看看:

urllibrequests

答案 4 :(得分:1)

使用维基百科python库,它允许您查看页面上的链接,包括“另请参见”部分中的链接,您可以遍历它们并使用库来获取它们上的内容。 https://pypi.python.org/pypi/wikipedia