当前位置: 首页 > 面试题库 >

如何使用urllib2从Python中打开的URL中提取特定数据?

羿经武
2023-03-14
问题内容

我是Python的新手,正在制作一个非常基本的Web搜寻器。例如,我做了一个简单的功能,即可加载显示在线游戏高分的页面。因此,我能够获取html页面的源代码,但是我需要从该页面绘制特定的数字。例如,网页如下所示:

http://hiscore.runescape.com/hiscorepersonal.ws?user1=bigdrizzle13

其中“
bigdrizzle13”是链接的唯一部分。该页面上的数字需要绘制并返回。本质上,我想构建一个程序,只需输入’bigdrizzle13’,它就可以输出这些数字。


问题答案:

正如另一位海报提到的那样,BeautifulSoup是完成这项工作的绝佳工具。

这是整个,经过夸奖的程序。它可能会使用很多容错功能,但是只要您输入有效的用户名,它就会从相应的网页中提取所有分数。

我尽力发表评论。如果您不熟悉BeautifulSoup,我强烈建议您在使用BeautifulSoup文档的示例中进行操作。

整个程序…

from urllib2 import urlopen
from BeautifulSoup import BeautifulSoup
import sys

URL = "http://hiscore.runescape.com/hiscorepersonal.ws?user1=" + sys.argv[1]

# Grab page html, create BeatifulSoup object
html = urlopen(URL).read()
soup = BeautifulSoup(html)

# Grab the <table id="mini_player"> element
scores = soup.find('table', {'id':'mini_player'})

# Get a list of all the <tr>s in the table, skip the header row
rows = scores.findAll('tr')[1:]

# Helper function to return concatenation of all character data in an element
def parse_string(el):
   text = ''.join(el.findAll(text=True))
   return text.strip()

for row in rows:

   # Get all the text from the <td>s
   data = map(parse_string, row.findAll('td'))

   # Skip the first td, which is an image
   data = data[1:]

   # Do something with the data...
   print data

这是一个测试运行。

> test.py bigdrizzle13
[u'Overall', u'87,417', u'1,784', u'78,772,017']
[u'Attack', u'140,903', u'88', u'4,509,031']
[u'Defence', u'123,057', u'85', u'3,449,751']
[u'Strength', u'325,883', u'84', u'3,057,628']
[u'Hitpoints', u'245,982', u'85', u'3,571,420']
[u'Ranged', u'583,645', u'71', u'856,428']
[u'Prayer', u'227,853', u'62', u'357,847']
[u'Magic', u'368,201', u'75', u'1,264,042']
[u'Cooking', u'34,754', u'99', u'13,192,745']
[u'Woodcutting', u'50,080', u'93', u'7,751,265']
[u'Fletching', u'53,269', u'99', u'13,051,939']
[u'Fishing', u'5,195', u'99', u'14,512,569']
[u'Firemaking', u'46,398', u'88', u'4,677,933']
[u'Crafting', u'328,268', u'62', u'343,143']
[u'Smithing', u'39,898', u'77', u'1,561,493']
[u'Mining', u'31,584', u'85', u'3,331,051']
[u'Herblore', u'247,149', u'52', u'135,215']
[u'Agility', u'225,869', u'60', u'276,753']
[u'Thieving', u'292,638', u'56', u'193,037']
[u'Slayer', u'113,245', u'73', u'998,607']
[u'Farming', u'204,608', u'51', u'115,507']
[u'Runecraft', u'38,369', u'71', u'880,789']
[u'Hunter', u'384,920', u'53', u'139,030']
[u'Construction', u'232,379', u'52', u'125,708']
[u'Summoning', u'87,236', u'64', u'419,086']

瞧:)



 类似资料:
  • 我要提取的数据来自这个网站https://www.adobe.com/support/security/advisories/apsa11-04.html。我只想提取 发布日期:2011年12月6日最后更新:2012年1月10日漏洞标识符:APSA11-04 CVE编号:CVE-2011-2462 代码: 输出: 我不想要这些信息。我该如何过滤呢? 平台:全部*注意:Adobe Reader fo

  • 问题内容: 在Java中,我有: 我想获取参数值(PAR,NYC)。 所以我创建了正则表达式: 返回假。正在返回。 我究竟做错了什么? 问题答案: 它不必是正则表达式。由于我认为没有标准的方法可以处理此问题,因此我使用的是从某处复制的内容(可能有一些修改): 因此,当您调用它时,将获得所有参数及其值。该方法处理多值参数,因此使用而不是,并且在您的情况下,您需要获取第一个列表元素。

  • 公共静态地图>hillsByCounty(列表山){ }我的hashmap的值为(列表中的山名、国家名、高度、经度和纬度)。但是,我只需要打印3个县,每个县的前3个山及其高度,我该怎么做?在这里输入图像描述

  • 问题内容: 我正在尝试使用python HTMLParser库从HTML页面中获取值。我要保留的值在此html元素内: 到目前为止,这是我的HTMLParser类: 有人可以指出我正确的方向吗?我希望类功能获得值20。 问题答案: 从“触发”开始计数嵌套标记的数量。当我们处于以触发标签为根的子树中时,我们将数据存储在中。 解析末尾的数据保留在其中(字符串列表,如果未满足触发标签,则可能为空)。您可

  • 对于熊猫数据帧的特定列,该列实际上是转换成BCD的16位数据。我只想提取特定行的14-8位并转换为BCD。下面的公式适用于如下的小数据帧。 但当我申请时 对于688126行的较大数据帧,我得到一个错误,说 基数为2的int()的文本无效:“” 错误如下所示 ValueError Traceback(最近调用最后一次)在1 df.LO_TIME_0_J2_0---- C:\ProgramData\A

  • 问题内容: 我有一个包含6列的R数据框,并且我想创建一个仅包含三列的新数据框。 假设我的数据帧df,我想提列A,B和E,这是唯一的命令,我可以计算出: 有没有更紧凑的方法可以做到这一点? 问题答案: 如果您的data.frame被调用,则使用dplyr包df1: 也可以在不使用%>%管道的情况下将其写为:

  • 我想知道如何从pdf中提取数据,通过使用python语言在py魅力。我试图通过从pypdf2导入使用py魅力编码,但它没有显示结果。

  • 问题内容: 我正在将Selenium与Python API和Firefox结合使用来执行一些自动操作,这是我的问题: 单击原始页面上的链接,比方说 a.com 我被重定向到 _b.com/some/path?arg=value_ 并立即将我再次重定向到最终地址 c.com 那么有没有办法使用Selenium Python API 获得中间重定向URL _b.com/some/path?arg=va