解析器返回错误的URL

时间:2016-01-08 23:37:40

标签: parsing python-3.x beautifulsoup

我正在解析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'

此链接无效,我无法理解错误。

1 个答案:

答案 0 :(得分:1)

href需要转换&符号,请参阅this question。您访问的网站可能无法正确转义href内的&符号,并希望它们不会意外地引用HTML实体,除非您的情况如此。看起来你必须解析错误的HTML,加上一个没有注意到分号丢失的解析器,无论如何都要进行HTML实体转换。