re.findall返回空数组以匹配表达式

时间:2016-11-17 23:22:58

标签: python

在通过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>

1 个答案:

答案 0 :(得分:1)

您说您想要stream="last_36276",但您正在搜索stream="last_205778"。在该页面上永远找不到后者,因此re.findall()正确返回一个空列表。

此外,您正在搜索streamformat,但实际页面有streamFormat。同上streamfeed vs streamFeed