zoukankan      html  css  js  c++  java
  • python3 爬虫之Pyquery的使用方法

    安装

    pip install pyquery

    官方文档: 

    https://pythonhosted.org/pyquery/

    初始化方式(四种)

    1. 直接字符串

    from pyquery import PyQuery as pq
    doc = pq("<html></html>")

    pq 参数可以直接传入 HTML 代码,doc 现在就相当于 jQuery 里面的 $ 符号了。

    2. lxml.etree

    from lxml import etree
    doc = pq(etree.fromstring("<html></html>"))

    可以首先用 lxml 的 etree 处理一下代码,这样如果你的 HTML 代码出现一些不完整或者疏漏,都会自动转化为完整清晰结构的 HTML代码。

    3. 直接传URL

    from pyquery import PyQuery as pq
    doc = pq('http://www.baidu.com')

    这里就像直接请求了一个网页一样,类似用 requests.get(url) 来直接请求这个链接,得到 HTML 代码。

    4. 传文件

    from pyquery import PyQuery as pq
    doc = pq(filename='hello.html')

    可以直接传某个路径的文件名。

    HTML标签操作

    from pyquery import PyQuery as pq
    doc = pq('http://so.fengniao.com/index.php?action=Image&keyword=%E7%BE%8E%E6%99%AF')
    imgs = doc('img')#取到所有图片
    li = doc('li')
    print(li.text())
    divs = doc('div')
    p = doc('p')

    属性操作

    from pyquery import PyQuery as pq
    doc = pq('http://so.fengniao.com/index.php?action=Image&keyword=%E7%BE%8E%E6%99%AF')
    div = doc('div')
    print(div.attr('id'))
    print(div.attr('id','xiding'))
    from pyquery import PyQuery as pq
    p = pq('<p id="hello" class="hello"></p>')('p')
    print p.addClass('beauty')
    print p.removeClass('hello')
    print p.css('font-size', '16px')
    print p.css({'background-color': 'yellow'})

    DOM操作

    同样原汁原味的 jQuery 语法

    from pyquery import PyQuery as pq
    p = pq('<p id="hello" class="hello"></p>')('p')
    print p.append(' check out <a href="https://pythonhosted.org/pyquery/api.html"><span>python</span></a>')
    print p.prepend('Oh yes!')
    d = pq('<div class="wrap"><div id="test"><a href="https://pythonhosted.org/pyquery/api.html">api</a></div></div>')
    p.prependTo(d('#test'))
    print p
    print d
    d.empty()
    print d

    运行结果

    <p id="hello" class="hello"> check out <a href="https://www.python.org/"><span>python</span></a></p>
    <p id="hello" class="hello">Oh yes! check out <a href="https://www.python.org/"><span>python</span></a></p>
    <p id="hello" class="hello">Oh yes! check out <a href="https://www.python.org/"><span>python</span></a></p>
    <div class="wrap"><div id="test"><p id="hello" class="hello">Oh yes! check out <a href="https://www.python.org/"><span>https://www.python.org/</span></a></p><a href="http://cuiqingcai.com">Germy</a></div></div>
    <div class="wrap"/>

    DOM 操作也是与 jQuery 如出一辙。

    遍历

    遍历用到 items 方法返回对象列表,或者用 lambda,不过常用的还是items()

    imgs = doc('img')#取到所有图片
    list_imgs = []
    for img in imgs.items():
        list_imgs.append(img.attr('src'))#将所有图片链接放到列表

    网页请求

    from pyquery import PyQuery as pq
    print pq('http://www.baidu.com/', headers={'user-agent': 'pyquery'})
    print pq('http://www.baidu.com/post', {'foo': 'bar'}, method='post', verify=True)

    Ajax

    PyQuery 同样支持 Ajax 操作,带有 get 和 post 方法,不过不常用,一般我们不会用 PyQuery 来做网络请求,仅仅是用来解析。

    PyQuery AJAX

    API

    API

  • 相关阅读:
    eclipse中不能找到dubbo.xsd
    CentOS7部署tomcat
    mybatis中的foreach
    mybatis中批量添加orcale
    mybatis中的like使用方式
    mybatis默认参数_parameter和_databaseId
    mybatis中的resultMap
    mybatis操作oracle,插入null值时报错 with jdbctype OTHER
    mybatis 中 #{} 和 ${} 的区别
    mybatis Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [0, 1, param1, param2]
  • 原文地址:https://www.cnblogs.com/nancyzhu/p/8449545.html
Copyright © 2011-2022 走看看