在通过re模块抓取网站时,我正在努力识别匹配的表达式。我尝试使用Python抓取多个网站,并注意到re模块的findall函数只返回了多个值(例如,具有相同类的表达式)。有没有办法在下面的表达式(cnn.com的股票价格)中返回字符串?当我尝试这样做时,我只有一个空数组
<span stream="last_36276" streamformat="ToHundredth" streamfeed="SunGard">109.95</span>
这是我使用Python 3.5.1为苹果股价抓取cnn money的代码 任何帮助都非常感谢:
import urllib.request
import re
with urllib.request.urlopen("http://money.cnn.com/quote/quote.html?symb=AAPL") as url:
s = url.read()
pattern = re.compile(b'<span stream="last_205778" streamformat="ToHundredth" streamfeed="SunGard">(.+?)</span>')
price=re.findall(pattern,s)
print(price)
#Searching for the first two expressions works, but the last one returns empty array
#<span title="2010-10-19 14:59:01Z" class="relativetime">Oct 19 10 at 14:59</span>
#<span itemprop="upvoteCount" class="vote-count-post ">45</span>
#<span stream="last_205778" streamformat="ToHundredth" streamfeed="SunGard">60.64</span>
答案 0 :(得分:1)
您说您想要stream="last_36276"
,但您正在搜索stream="last_205778"
。在该页面上永远找不到后者,因此re.findall()
正确返回一个空列表。
此外,您正在搜索streamformat
,但实际页面有streamFormat
。同上streamfeed
vs streamFeed
。