
写一个爬虫程序,使用 lxml.html 分析网页
遇到一个正文带图片的网页,无法正常解析
不带图片的正文部分是这样的:
<font face="宋体" size="3"><!--HTMLBUILERPART0--><DIV style="FLOAT: left"><script type="text/Javascript" src="http://www.v2ex.com/2014newad.js"></script><br><script type="text/Javascript" src="http://www.v2ex.com/xyoushangjiaoguanggao.js"></script><br><script type="text/Javascript" src="http://www.v2ex.com/3youshangjiaoguanggao.js"></script></DIV> 我是文本<BR><BR> 我是文本<BR><BR> 我是文本<BR><BR> <!--/HTMLBUILERPART0--><br><div align="center"></div> </font> 带图片的正文部分是这样的:
<font face="宋体" size="3"><!--HTMLBUILERPART0--><DIV style="FLOAT: left"><script type="text/Javascript" src="http://www.v2ex.com/2014newad.js"></script><br><script type="text/Javascript" src="http://www.v2ex.com/xyoushangjiaoguanggao.js"></script><br><script type="text/Javascript" src="http://www.v2ex.com/3youshangjiaoguanggao.js"></script></DIV> <center><img border="0" src="zz.jpg" width="126" height="144"></center><BR><BR> 我是文本<BR><BR> 我是文本<BR><BR> <!--/HTMLBUILERPART0--><br><div align="center"></div> </font> 中间多出了:
<center><img border="0" src="zz.jpg" width="126" height="144"></center> 解析代码为:
body = doc.xpath("/html/body")[0] lines = body.xpath("//font[@face=\"宋体\" and @size=\"3\"]/*") cOntext= [] for line in lines: if not line.tail: continue context.append(line.tail) return context 代码解析不带图片的正文正常
解析带图片的正文,无法得到图片和文本节点(跟 if not line.tail 无关)
1 keakon 2017 年 8 月 10 日 因为这是个错误的 html,font 是 inline 元素,center 是 block 元素,lxml 在构造时会把 center 移到 font 外部。 |
2 zhusimaji 2017 年 8 月 10 日 via iPhone 爬虫就用 bs4 解析,方便快捷 |