2016-01-08 69 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实体转换。