3

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

  • 创建两个变量:DepthLength
  • 将维基百科文章设置为种子页面
  • 解析这篇文章:只要有指向另一篇文章的链接,就获取第一个Length句子并将其包含在原始文章中(例如,在括号中或以其他方式突出显示)。
  • 以递归方式执行此操作直到某个Depth,即不超过两个级别。

结果将是一篇可以一口气阅读的文章,而无需总是来回点击......

你将如何在 Python 中构建这样的机制?应该使用哪些库(是否有用于此类任务的库)?有什么有用的教程吗?

4

5 回答 5

3

您可以使用urllib2来请求 url。为了解析 htmlpage,有一个很棒的库,叫做BeautifulSoup。您需要考虑的一件事是,在使用爬虫扫描维基百科时,您需要在请求中添加标题。否则维基百科将简单地禁止被抓取。

 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']

现在关于爬行维基百科的算法,你想要的是一种叫做深度有限搜索的东西。同一页面中提供了易于理解的伪代码。

上述库的其他功能可以用谷歌搜索,很容易理解。祝你好运。

于 2012-09-28T09:31:35.837 回答
2

您可能想为此尝试Mechanize - 它比 urllib 和其他内置库更高级别。特别是,它很容易导航,就像您使用浏览器一样,使用 和 之类的follow_link()命令back()

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

或者,您可以尝试使用 Wikipedia 的 Python 库之一 - 这里有一个列表:http ://en.wikipedia.org/wiki/Wikipedia%3aCreating_a_bot#Python以及其他stackoverflow 答案中的一些 建议。

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

于 2012-09-28T09:33:34.030 回答
1

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

于 2012-09-28T09:16:18.737 回答
1

您可以解析 html 或解析原始版本以查找[[Link]]. 无论哪种方式,您都应该看看:

urllib请求

于 2012-09-28T09:18:10.123 回答
1

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

于 2016-02-04T23:21:38.540 回答