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

标签 python parsing recursion web-scraping wikipedia

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

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

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

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

最佳答案

您可以使用 urllib2用于请求网址。为了解析 html 页面,有一个名为 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']

现在关于抓取维基百科的算法,你想要的是一个叫做 Depth Limited Search 的东西。 .同一页面中提供了伪代码,很容易理解。

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

关于python - 递归解析维基百科并从包含的链接中获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636974/

相关文章:

python - 根据大小和方向为 matplotlib quiver field 上色

python - 比较python中的两个xml文件

java - 是否有一个好的 XML 解析器可以对 XML 文件进行光扫描以获取元素的字节偏移量?

c++ - 在检查 array[i] == i 时返回 bool 的递归算法(必须是 O(log n))

python - 将数据框字符串类别转换为数字

python - 在 OSX mountain lion 上使用 Homebrew 软件安装 python 2.76 的问题

c - 如何只交换堆节点的数据

Java 自定义数组的排列

Python 替换为重用未知字符串

xml - 使用 elisp 解析 xml 文件