美文网首页
py3笔记15:pyquery模块

py3笔记15:pyquery模块

作者: _百草_ | 来源:发表于2022-06-28 13:55 被阅读0次

    1. 简介

    • JQuery
      JQuery是一个JavaScript库,用于处理DOM.使用jQuery,我们可以查找,选择,变量和操作HTML文档中的各个部分

    • pyquery
      python库,具有与jquery类似的API.使用lxml模块进行快速的XML和HTML操作。该API尽可能类似jQuery


    2. 安装

    pip install pyquery


    3. 简单使用

    3.1 创建对象

    • 直接传入HTML数据
    from pyquery import PyQuery  # 导入模块
    
    # 1. 本地数据
    with open("html/www.baidu.com.html", encoding="utf-8") as f:
        contents = f.read()
    
         doc = PyQuery(contents)  # 创建PyQuery对象,传参是HTML数据
    
    ### 2. web资源
    import requests
    
    resp = requests.get("https://www.baidu.com/")
    resp.encoding = "utf-8"
    doc = PyQuery(resp.text)  # 创建PyQuery对象
    

    注:解决中文乱码https://blog.csdn.net/linzi1994/article/details/108805110

    • 传URL
    doc = PyQuery("https://www.baidu.com", encoding="utf-8")  # 添加encoding,避免中文乱码
    
    • 传lxml.etree
    from lxml import etree
    doc = PyQuery(etree.fromstring("<html></html>"))
    # 类型:<class 'pyquery.pyquery.PyQuery'>
    
    • 传文件
    doc = PyQuery(filename="html/www.baidu.com.html", encoding="utf-8")
    # 报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 333: illegal multibyte sequence
    

    3.2 获取标签

    tag = doc("h2")
    # 类型:<class 'pyquery.pyquery.PyQuery'>
    

    3.3 元素属性获取attr

    # <a href="//www.baidu.com/more/" name="tj_briicon" class="bri" style="display: block;">更多产品</a>
    tag_id = tag.attr("name")  # 返回tj_briicon
    tag_style = tag.attr("style") # 返回 None
    
    # <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
    print(tag.attr("id", "s_id"))  # 设置id,并返回元素
    # <a href="http://news.baidu.com" name="tj_trnews" class="mnav" id="s_id">新闻</a>
    

    注:创建PyQuery对象时,存在部分元素没有获取,原因未知

    # 元素属性class的操作
    # <a href="http://news.baidu.com" name="tj_trnews" class="mnav" id="s_id">新闻</a>
    tag.add_class("hello")  # 添加class
    print(tag)  # <a href="http://news.baidu.com" name="tj_trnews" class="mnav hello" id="s_id">新闻</a>
    print(tag.remove_class("hello"))  # 删除元素class并返回对应元素
    # <a href="http://news.baidu.com" name="tj_trnews" class="mnav" id="s_id">新闻</a>
    

    4. 删除元素

    from pyquery import PyQuery
    
    doc = PyQuery("https://www.baidu.com", encoding="utf-8", parser="html")
    
    tag = doc("a")  # 选择元素
    print(tag)
    print("---------------------")
    # a:last 选择器,a的最后一个元素
    removed_item = doc("a:last").remove()  # 删除最后一个a,并返回它
    print(removed_item)
    print("---------------------")
    print(doc("a"))
    

    5. item允许迭代元素

    from pyquery import PyQuery
    
    doc = PyQuery("https://www.baidu.com", encoding="utf-8")
    # tag = doc("a")
    # print(tag)
    items = [item.text() for item in doc.items("a")]
    print(items)
    # ['新闻', 'hao123', '地图', '视频', '贴吧', '登录', '更多产品', '关于百度', 'About Baidu', '使用百度前必读', '意见反馈']
    

    6. DOM操作

    追加&前置元素,与jquery类似

    tag = doc("a")
    tag.append('<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻append</a>')  # 追加
    print(tag)
    tag.prepend('<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻pre</a>')  # 前置元素
    
    image.png

    7. filter()方法用于过滤元素

    8. 网页请求

    PyQuery('http://httpbin.org/post', {'foo': 'bar'}, method='post', verify=True)
    

    参考

    1. Python pyquery
    2. Python 爬虫利器六之PyQuery
    3. python爬虫从入门到放弃(七)之PyQuery库的使用
    4. pyquery的用法

    相关文章

      网友评论

          本文标题:py3笔记15:pyquery模块

          本文链接:https://www.haomeiwen.com/subject/gxtiiltx.html