推荐学习书目
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 · 2537 views
    This topic created in 3211 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
        1
    keakon  
       Aug 10, 2017   ❤️ 1
    因为这是个错误的 html,font 是 inline 元素,center 是 block 元素,lxml 在构造时会把 center 移到 font 外部。
    zhusimaji
        2
    zhusimaji  
       Aug 10, 2017 via iPhone
    爬虫就用 bs4 解析,方便快捷
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5408 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 06:52 · PVG 14:52 · LAX 23:52 · JFK 02:52
    ♥ Do have faith in what you're doing.