我正在解析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®ione=Sardegna" class="titolinoverdone">PROSSIMI</a>
我需要获得此链接:
'hitlist_regioni_new.lasso?saltarec=20&ordina=parola_dialetto®ione=Sardegna'
但解析器返回:
'hitlist_regioni_new.lasso?saltarec=20&ordina=parola_dialettoRione=Sardegna'
此链接无效,我无法理解错误。
答案 0 :(得分:1)
href需要转换&符号,请参阅this question。您访问的网站可能无法正确转义href内的&符号,并希望它们不会意外地引用HTML实体,除非您的情况如此。看起来你必须解析错误的HTML,加上一个没有注意到分号丢失的解析器,无论如何都要进行HTML实体转换。