2012-06-15 61 views
0

我正在使用請求來刮取網站。在HTML的內容被成功保存在變量R,但是在if語句,我得到了上述誤差Python語法錯誤:無效語法 - if-codesalyax看起來是正確的

[...] 
for line in r: 
    link = re.findall(r ("""onclick="window.location.href='([^'])'""",line) 
    if link: 
     print ('something') 
     cmd = ('some commands to get info page') 
     call(cmd,shell=True) 

     download = re.sub(something) 
     cmd = ('some commands to download the file') 
     call(cmd,shell=True) 
r.close() 

我看着它在文檔和語法似乎是正確的。然後我懷疑這個錯誤是否在之前。在這裏,我搜索帶有短語onclick =「window.location.href ='的行,並希望後面的鏈接被處理(之後的代碼中)。()封裝的部分應該是返回的內容, ?

有誰看到錯誤?在

+1

爲什麼在'r'後面的括號? 「re.findall(r」「 – Don

回答

2

也許括號?

#    1 2             2     
link = re.findall(r ("""onclick="window.location.href='([^'])'""",line) 

看起來你忘了關了的findall支架。

+0

omg你是對的,在第二個括號丟失之後!」我很抱歉,但是花了將近一個小時的時間來研究語法來得到這一行。它.Btw.:圍繞字符串的括號現在在最新的python版本中是必需的 – Jasi

+0

@Jasi使用Python 3.2,我從來沒有見過需要使用這樣的括號,爲什麼他們需要? –

+0

@Jasi好,很好在老版本的python中,Don會是正確的,事實上,如果你嘗試使用r(「」「」「」)來處理原始字符串,你會得到一個NameError。 – 2012-06-15 13:55:40

0

你似乎有兩個不匹配的括號論文和不匹配的引號。下面,我列了他們。這是否按預期工作?

#    1 2         3 3   21 
#     123  4        4321 
link = re.findall(r ("""onclick="window.location.href='([^'])'\"""",line)) 
+0

escape \不應該是因爲w之前的三倍「The」是必要的indow是字符串的一部分。 - 糾正我,如果我錯了 – Jasi

0

如果您將模式分離到自己的行,那麼它會清楚地表明問題實際上只是引用之一。嘗試將其分開,如下所示:

for line in r: 
    pattern = r"onclick=\"window.location.href='([^'])'" 
    link = re.findall(pattern, line) 
+0

我應該真的嘗試這樣做。另外:方式更可讀。謝謝。 – Jasi

+0

@Jasi你可以走得更遠並使用[re.VERBOSE](http://docs.python.org/library/re.html#re.VERBOSE),在正則表達式的元素之間添加空格和註釋,當你編譯時剝離出來。 –