V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
prasanta
V2EX  ›  Python

htmlparsing: 纯净简单的 HTML 解析库

  •  
  •   prasanta · 2018-02-26 19:24:47 +08:00 · 2350 次点击
    这是一个创建于 2250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    HTML Parsing

    纯净的 HTML 解析库, 取代复杂的 beautifulsoup4, pyquery, lxml

    github: https://github.com/gaojiuli/htmlparsing

    安装

    pip install htmlparsing
    
    # or
    
    pip install git+https://github.com/gaojiuli/htmlparsing
    

    用法

    import requests
    
    from htmlparsing import Element
    
    url = 'https://python.org'
    r = requests.get(url)
    

    初始化

    e = Element(text=r.text, base_url=url)
    

    获取页面中的链接

    e.links
    """
    {...'/users/membership/', '/events/python-events', '//docs.python.org/3/tutorial/controlflow.html#defining-functions'}
    """
    
    
    e.absolute_links
    """
    {...'https://python.org/download/alternatives',  'https://python.org/about/success/#software-development', 'https://python.org/download/other/', 'https://python.org/community/irc/'}
    """
    

    选择器以及选择属性

    e.xpath('//a')[0].attrs
    """{'href': '#content', 'title': 'Skip to content'}"""
    
    e.xpath('//a')[0].attrs.title
    """Skip to content"""
    
    e.css('a')[0].attrs
    """{'href': '#content', 'title': 'Skip to content'}"""
    
    e.parse('<a href="#content" title="Skip to content">{}</a>'))
    """<Result ('Skip to content',) {}>"""
    

    获取文本内容和整个 HTML

    e.xpath('//a')[5].text
    """PyPI"""
    
    e.xpath('//a')[5].html
    """<a href="https://pypi.python.org/" title="Python Package Index">PyPI</a>"""
    
    e.xpath('//a')[5].markdown
    """[PyPI]( https://pypi.python.org/ "Python Package Index")"""
    
    

    目前支持的选择器: xpath, css ,parse

    github: https://github.com/gaojiuli/htmlparsing

    engHacker
        1
    engHacker  
       2018-02-26 19:40:59 +08:00   ❤️ 2
    恕我直言,我感觉你这是对 kenneth 大神的 requests-html( https://github.com/kennethreitz/requests-html)低配仿造啊……
    prasanta
        2
    prasanta  
    OP
       2018-02-26 19:57:15 +08:00 via Android
    @engHacker 是啊,我只是做一个不绑定 requests 的而已
    lhx2008
        3
    lhx2008  
       2018-02-26 19:59:26 +08:00 via Android
    还是解析神器 pyquery 好用
    lhx2008
        4
    lhx2008  
       2018-02-26 20:02:48 +08:00 via Android
    pyquery 链接就直接 d("a")啊,xpahth 不是更麻烦
    polythene
        5
    polythene  
       2018-02-26 20:04:42 +08:00
    恕我直言,要不是有人指出来,你会提出这是“参考”了 kenneth 大神的项目吗?
    xuyl
        6
    xuyl  
       2018-02-26 20:11:29 +08:00
    @polythene 一定要这么步步紧逼吗?哈哈,打脸打得好
    prasanta
        7
    prasanta  
    OP
       2018-02-26 20:13:19 +08:00 via Android
    @polythene 我是先给他提了 issue,对于 html 和 element 作为共同的东西看待,他没回复,我就实现了一个。
    prasanta
        8
    prasanta  
    OP
       2018-02-26 20:15:04 +08:00 via Android
    提 pr 改动太大。
    prasanta
        9
    prasanta  
    OP
       2018-02-26 20:22:32 +08:00 via Android
    @lhx2008 事确实 pyquery 更好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3237 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:51 · PVG 21:51 · LAX 06:51 · JFK 09:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.