推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
wencan
V2EX  ›  Python

请教 lxml 分析 html 的问题

  •  
  •   wencan · Aug 10, 2017 · 2781 views
    This topic created in 3376 days ago, the information mentioned may be changed or developed.

    写一个爬虫程序,使用 lxml.html 分析网页
    遇到一个正文带图片的网页,无法正常解析

    不带图片的正文部分是这样的:

    <font face="宋体" size="3"><!--HTMLBUILERPART0--><DIV style="FLOAT: left"><script type="text/javascript" src="/2014newad.js"></script><br><script type="text/javascript" src="/xyoushangjiaoguanggao.js"></script><br><script type="text/javascript" src="/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="/2014newad.js"></script><br><script type="text/javascript" src="/xyoushangjiaoguanggao.js"></script><br><script type="text/javascript" src="/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 无关)

    2 replies  •  2017-08-10 19:34:30 +08:00
    keakon
    keakon
    Aug 10, 2017❤️1
    1
    因为这是个错误的 html,font 是 inline 元素,center 是 block 元素,lxml 在构造时会把 center 移到 font 外部。
    zhusimaji
    zhusimaji
    Aug 10, 2017 via iPhone
    2
    爬虫就用 bs4 解析,方便快捷
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   675 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 21:17 · PVG 05:17 · LAX 13:17 · JFK 16:17
    ♥ Do have faith in what you're doing.