Python从URL中获取值

4
我正在尝试编写一个Python脚本,检查money.rediff.com上特定股票的价格并打印出来。我知道这可以很容易地通过他们的API完成,但我想学习urllib2的工作原理,所以我正在尝试用老方法来做这件事。但是,我不知道如何使用urllib。许多在线教程要求我“检查元素”以获取需要返回的值并分割字符串来获取它。但是,视频中的所有示例都具有易于拆分HTML标记的值,但我的值则是这样的:
<div class="f16">
<span id="ltpid" class="bold" style="color: rgb(0, 0, 0); background: rgb(255, 255, 255);">6.66</span> &nbsp; 
<span id="change" class="green">+0.50</span> &nbsp; 

<span id="ChangePercent" style="color: rgb(130, 130, 130); font-weight: normal;">+8.12%</span>
</div>
我只需要第二行中的“6.66”。我该如何做?我对Urllib2和Python非常陌生。感谢您提前的帮助,一切帮助都将不胜感激。
3个回答

2
你可以只使用urllib2和正则表达式来完成这个任务,但我建议你使用更好的工具,即requestsBeautiful Soup

以下是一个完整的程序,用于获取“塔塔汽车有限公司”的报价:

from bs4 import BeautifulSoup
import requests

html = requests.get('http://money.rediff.com/companies/Tata-Motors-Ltd/10510008').content

soup = BeautifulSoup(html, 'html.parser')
quote = float(soup.find(id='ltpid').get_text())

print(quote)

编辑

这里是一个使用urllib2re的Python 2版本:

import re
import urllib2

html = urllib2.urlopen('http://money.rediff.com/companies/Tata-Motors-Ltd/10510008').read()

quote = float(re.search('<span id="ltpid"[^>]*>([^<]*)', html).group(1))

print quote

非常感谢您的帮助!您能像对待孩子一样向我解释这段代码是如何工作的吗?并且,您可以告诉我如何仅使用urllib2完成此操作吗?如果您无法在此处回答我的第二个问题,那没关系,但如果您能指引我去其他解释这类情况的来源,那将非常有用。再次感谢您! - DeA
BS4是唯一优雅的方法吗?我想知道urllib2方法有多复杂。有什么来源或参考资料吗? - DeA
看看我的编辑,使用urllib2和正则表达式的替代方案。我认为Beautiful Soup更好。 :-) - user94559
真美啊!(双关语!)非常感谢! - DeA
太好了,好多了!我要在谷歌上搜索更多关于这方面的内容。我现在对这个有了一个非常基本的理解。谢谢! - DeA
显示剩余2条评论

1
使用BeautifulSoup来解析HTML,而不是正则表达式。

1

BeautifulSoup对于HTML解析很有用。

from bs4 import BeautifulSoup

##Use your urllib code to get the source code of the page
source = (Your get code here)
soup = BeautifulSoup(source)
##This assumes the id 'ltpid' is the one you are looking for all the time
span = soup.find('span', id="ltpid")
float(span.text)  #will return 6.66

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,