2016-01-08 70 views
1

我正在解析來自http://www.dialettando.com/dizionario/hitlist_regioni_new.lasso?regione=Sardegna的方言單詞。解析器返回錯誤的網址

from urllib import request 

from bs4 import BeautifulSoup 
from nltk import corpus, word_tokenize, FreqDist, ConditionalFreqDist 

url = 'http://www.dialettando.com/dizionario/hitlist_regioni_new.lasso?regione=Sardegna' 
dialettando_tokens = [] 

while url: 
    html = request.urlopen(url).read().decode('utf8') 
    page = BeautifulSoup(html, 'html.parser') 
    a_list = page.find_all('a') 
    for a in a_list: 
     try: 
      a_str = str(a.contents[0]) 
      if a_str[:3] == '<b>' and a.contents[0].string: 
       dialettando_tokens.append(a.contents[0].string.strip()) 
     except: 
      pass 

     if a.string == 'Simonelli Editore Srl': 
      break 
     elif a.string == 'PROSSIMI': 
      link = a['href'] 
      url = 'http://www.dialettando.com/dizionario/' + link 
      break 
     else: 
      url = '' 

在每次迭代結束時,我需要解析url到下一頁。 HTML:

<a href="hitlist_regioni_new.lasso?saltarec=20&ordina=parola_dialetto&regione=Sardegna" class="titolinoverdone">PROSSIMI</a> 

,我需要得到這個鏈接:

'hitlist_regioni_new.lasso?saltarec=20&ordina=parola_dialetto&regione=Sardegna' 

但是解析器回報:

'hitlist_regioni_new.lasso?saltarec=20&ordina=parola_dialettoRione=Sardegna' 

此鏈接無法正常工作,我無法理解怎麼了。

+0

看起來®是一個html實體,與®相同,意思是「註冊商標」。它似乎用大寫「R」代替它 – maxpolk

+0

好的。可以修復它嗎?我可以得到正確的網址嗎? – GiveItAwayNow

回答

1

href需要將&字符轉義,請參閱this question。您訪問的網站可能無法正確轉義href內部的&符號,並希望它們不會意外引用HTML實體,除非您的情況如此。看起來好像你必須分析錯誤的HTML,再加上一個沒有注意到分號丟失的解析器,並且無論如何都進行了HTML實體轉換。