我是Python的新手。只是为Windows安装它并尝试HTML抓取。 这是我的测试代码:
from bs4 import BeautifulSoup
html = 'text <a href="Transfert.php?Filename=myfile_x86&version=5¶m=13" class="nav" style="color: #000000" title = "">Download</a> text'
print(html)
soup = BeautifulSoup(html, "html.parser")
for link in soup.find_all('a'):
print(link.get('href'))
此代码返回已收集但已损坏的链接:
Transfert.php?Filename=myfile_x86&version=5¶m=13
答案 0 :(得分:2)
您正在为解析器提供无效的HTML,正确的方式包括&amp; 在HTML属性的URL中将其转义为
&
只需将&
更改为&
html = 'text <a href="Transfert.php?Filename=myfile_x86&version=5&param=13" class="nav" style="color: #000000" title = "">Download</a> text'
soup = BeautifulSoup(html, "html.parser")
for link in soup.find_all('a'):
print(link.get('href'))
<强>输出:强>
Transfert.php?Filename=myfile_x86&version=5¶m=13
它与html5lib
和lxml
一起使用的原因是因为某些解析器可以比其他解析器更好地处理损坏的HTML。正如Goyo
在评论中所提到的,您无法阻止其他人编写损坏的HTML:)
这是一个很好的答案,可以详细解释它:https://stackoverflow.com/a/26073147/4796844。