使用HTMLParser时无报错情况下异常中止

来源:互联网 发布:久久小说软件下载 编辑:程序博客网 时间:2024/06/05 02:53

使用HTMLParser时无报错情况下异常中止

今天在使用Python写一个爬虫时出现HTMLParser没有完全将整个页面解析完就中止的情况,且没有出现任何报错。问题已经解决了,特意把内容分享一下避免大家继续入坑。

错误结果:
HTMLParser异常中止

上图显示出没有任何报错,HTMLParser最后解析到一个含href的超链接后中止。之前没有遇到过此类问题,百度上也找不到相关结果。为了找到问题的起因,直接把爬取的网页提取到本地,看在什么地方中止。

网页本地存储

其中class为aaa的超链接是我自己把网页保存到本地后加的,目的是判断HTMLParser解析到哪里中止。

测试结果:
再次测试

可以看出来class为aaa的超链接是可以解析到的。但是下一个超链接就没有被解析到了,解析直接结束,打印出最后我return的一个list。这个解析不出来的超链接如下:

<a class="info-title" href="http://www.baidu.com/baidu?cl=3&tn=SE_baiduhomet8_jmjb7mjw&fr=top1000&wd=%B4%AB%C6%E6%D3%B0%D0%C7%CF%C4%C3%CE%B4%C7%CA%C0"href_top="./detail?b=1&c=513&w=%B4%AB%C6%E6%D3%B0%D0%C7%CF%C4%C3%CE%B4%C7%CA%C0" title="香港影坛传奇影星夏梦辞世 位居&quot;长城三公主&quot;首位" target="_blank">香港影坛传奇影星夏梦辞世 位居&quot;长城三公主&quot;首位</a>

我把超链接里的title删除后,发现HTMLParser就可以正常解析了。于是乎发现是title中&quot的问题。该页面使用的是gb2312编码,HTMLParser不认识&quot这个符号,导致中止。所以改的话只要在read()页面的后面接个解码函数decode(“gbk”)就OK了。

page = response.read().decode("gbk")

正确结果:
正常运行

现在HTMLParser就能正常解析了。
希望能帮到大家。QAQ但是毕竟像我这么渣的已经不多了大家开心就好。

0 0
原创粉丝点击