在Python中使用Beautifulsoup和Urllib2,如何找到特定标签包围的数据?

时间:2013-04-03 20:51:30

标签: python web-scraping beautifulsoup urllib2

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

以下是我可能遇到的示例字符串:

<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/部分之后提取一些数字。我该怎么做?

2 个答案:

答案 0 :(得分: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"]

这个例子可能有点过于简单 - 它忽略了这样一个事实:“标签”对象,就像“汤”对象一样,将具有“find_all”方法(和其他类似的方法)。因此,如果您需要以一种涉及更多层嵌套的方式进行探索,这是可能的。除了标签和类之外,还有其他匹配方法比find_all()。请参阅BeautifulSoup的文档,以确切了解可能的内容。

答案 1 :(得分:2)

对于 python 3 它有点不同, (我总是忘记这一点而且它总是让我)

import urllib.request

html = urllib.request.urlopen("http://www.google.com")
soup = BeautifulSoup(html)
html.close()