2013-02-18 68 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