在写爬虫的时候发现BeautifulSoup的html.parser解析器有个坑,导致正文抽取失败。简单演示如下:
In [1]: from bs4 import BeautifulSoup
In [2]: s = BeautifulSoup('<div><div></p>abc</div></div>', 'html.parser')
In [3]: s
Out[3]: <div><div></div></div>abc
</p>被解析器忽略掉了,但是神奇的是,闭div被提前了,正文abc被挪到了div之外,导致通过定位div无法抽取到正文。
如何fix?使用html5lib即可,如下:
In [4]: s = BeautifulSoup('<div><div></p>abc</div></div>', 'html5lib')
In [5]: s
Out[5]: <html><head></head><body><div><div><p></p>abc</div></div></body></html>