3

作为对 BeautifulSoup 和 Urllib2 的介绍,我想我会制作一个基本的抓取程序,它可以在名为 lolking.net 的视频游戏网站中获取有关给定玩家的信息。每个用户都有一个不包含用户名的加扰 URL,因此我必须从站点的 HTML 中抓取播放器的 URL 扩展名才能访问他们的用户页面。

这是我可能会遇到的示例字符串:

<div class="search_result_item" onclick="window.location='/summoner/na/26670961'; return false;"><div style="display: table-cell; text-align: center; padding: 10px 10px 16px;"><div style="font-size: 14px; display: block;">

我需要在/summoner/na/部分之后提取数字位。我该怎么做?

4

2 回答 2

3

让我们用 Google 来演示一下,因为我不知道相关站点的详细信息(并且正常的工作流程将从整个页面开始)。

import urllib2
from bs4 import BeautifulSoup
html = urllib2.urlopen( "http://www.google.com" ).read()
soup = BeautifulSoup( html )

为您进行的自然方法是:

  • 查找所有具有 CSS 类“search_class_item”的 div
  • 为这些设置 onclick 属性
  • 与此属性中的 Javascript 代码上的正则表达式匹配(我不会在这里做这部分)

在 Google 上,让我们找到所有带有 CSS 类“gb1”的链接(A 标记)并找到它们的 href 属性。这个类比应该相当简单。

for tag in soup.find_all( "a", { "class" : "gb1" } ):
    print tag["href"]

这个例子可能有点太简单了——它忽略了“tag”对象,很像“soup”对象,将有一个“find_all”方法(和其他类似方法)的事实。因此,如果您需要以一种涉及显式嵌套更多层的方式进行探索,这是可能的。除了 find_all() 按标签和类进行匹配之外,还有其他方法可以匹配。请参阅 BeautifulSoup 的文档以确切了解可能的情况。

于 2013-04-03T21:02:36.217 回答
2

对于python 3,它有点不同,(我总是忘记这一点,它不断地让我着迷)

import urllib.request

html = urllib.request.urlopen("http://www.google.com")
soup = BeautifulSoup(html)
html.close()
于 2015-03-10T21:19:26.957 回答