2013-02-18 47 views
-1

我正在研究python脚本以自动从imdb中提取评分,但我无法从结果中提取数字。Python:从结果中提取数字

from pattern.web import URL 
from pattern.web import plaintext 
from pattern.web import decode_utf8 
import re 

def scrape_imdb(film): 
    url = URL (film) 
    s=url.download() 
    decode_utf8(url.download(s)) 
    regels=re.compile(('"ratingValue">[0-9].[0-9]')) 
    rating= regels.findall(s) 
    rating2= rating[0:1] 
    rating3= rating2.findall("[0-9"]) 

    regels2=re.compile ("<title>.*</title>") 
    titel=regels2.findall(s) 
    print titel, rating2 

但是这给了我一个错误。任何人都知道我在做什么错了?

+1

有人会只能够解决这一点,如果您发布确切的错误信息了。 – 2013-02-18 21:51:09

+5

请为上帝之爱不刮刮人气网站,其违反服务条款,并通常让你的IP被禁止!请参阅http://stackoverflow.com/a/7744369/462604 – 2013-02-18 21:52:02

+1

'rating2.findall(“[0-9”])'< - 结束引号字符在错误的位置。 – eldarerathis 2013-02-18 21:53:27

回答

3

正如你在另一个答案评论写道:成为你的问题。 re.findall返回匹配列表,因此rating是一个列表。当你做rating2 = rating[0:1],你指定一个子列表rating2,所以rating2本身也是一个列表(尽管有一个单一的元素)。列表中没有findall方法,因此失败。

什么你可能想要做的就是运行rating第一个结果另一个正则表达式:

rating = regels.findall(s) 
rating2 = rating[0] # only get the first element; a string 
rating3 = re.findall("[0-9]", rating2) 
0

我相信你在这里有一个错字:

rating3= rating2.findall("[0-9"]) 

它应该是:

I still get: AttributeError: 'list' object has no attribute 'findall'

因此,这似乎是:

rating3= rating2.findall("[0-9]") 
+0

即使我纠正错误,我仍然得到:AttributeError:'列表'对象没有属性'findall' – Shifu 2013-02-18 22:00:22