Python爬虫教程

Python爬虫PyQuery

Python爬虫PyQuery详细教程

PyQuery

PyQuery 是 Python 仿照 jQuery 的严格实现。语法与 jQuery 几乎完全相同,pyquery 可让你用 jQuery 的语法来对 xml 进行操作。这I和 jQuery 十分类似。如果利用 lxml,pyquery 对 xml 和 html 的处理将更快。

pyquery环境搭建及配置

pyquery环境搭建及配置详细说明请点击:https://www.lidihuo.com/python/python-spider-install-pyquery.html

初始化

在这里介绍四种初始化方式,具体如下:

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-21
# 直接字符串,pq 参数可以直接传入 HTML 代码,doc 现在就相当于 jQuery 里面的 $ 符号了。
from pyquery import PyQuery as pq
doc = pq(" ")
# lxml.etree,可以首先用 lxml 的 etree 处理一下代码。
from lxml import etree
doc = pq(etree.fromstring(" "))
# 直接传URL,这里就像直接请求了一个网页一样,得到 HTML 代码。
from pyquery import PyQuery as pq
doc = pq('http://www.baidu.com')
# 传文件,可以直接传某个路径的文件名。
from pyquery import PyQuery as pq
doc = pq(filename='example.html')

实例演示

<div>
    <ul>
        <li class="item-0">first item</li>
        <li class="item-1"><a href="link2.html">second item</a></li>
        <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
        <li class="item-1 active"><a href="link4.html">fourth item</a></li>
        <li class="item-0"><a href="link5.html">fifth item</a></li>
    </ul>
</div>
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-21
from pyquery import PyQuery as pq
doc = pq(filename='example.html')
print doc.html()
print type(doc)
li = doc('li')
print type(li)
print li.text()

运行结果

<div>
    <ul>
        <li class="item-0">first item</li>
        <li class="item-1"><a href="link2.html">second item</a></li>
        <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
        <li class="item-1 active"><a href="link4.html">fourth item</a></li>
        <li class="item-0"><a href="link5.html">fifth item</a></li>
    </ul>
</div>
<class 'pyquery.pyquery.PyQuery'>
<class 'pyquery.pyquery.PyQuery'>
first item second item third item fourth item fifth item

在这里我们注意到了一点,PyQuery 初始化之后,返回类型是 PyQuery,利用了选择器筛选一次之后,返回结果的类型依然还是 PyQuery,这和 jQuery 如出一辙。

属性操作

你可以完全按照 jQuery 的语法来进行 PyQuery 的操作。

from pyquery import PyQuery as pq
p = pq('<p id="example. class="example.></p>')('p')
print p.attr("id")
print p.attr("id", "plop")
print p.attr("id", "example.)

运行结果

example.br /> <p id="plop" class="example./>
<p id="example. class="example./>
from pyquery import PyQuery as pq
p = pq('<p id="example. class="example.></p>')('p')
print p.addClass('beauty')
print p.removeClass('example.)
print p.css('font-size', '16px')
print p.css({'background-color': 'yellow'})

运行结果:

<p id="example. class="example.beauty"/>
<p id="example. class="beauty"/>
<p id="example. class="beauty" style="font-size: 16px"/>
<p id="example. class="beauty" style="font-size: 16px; background-color: yellow"/>

因此执行上述操作之后,p 本身也发生了变化。

DOM操作

from pyquery import PyQuery as pq
p = pq('<p id="example. class="example.></p>')('p')
print p.append(' check out <a href="http://xxxx.com"><span>reddit</span></a>')
print p.prepend('Oh yes!')
d = pq('<div class="wrap"><div id="test"><a href="http://xxxxx.com">Germy</a></div></div>')
p.prependTo(d('#test'))
print p
s print d
d.empty()
print d

运行结果

<p id="example. class="example.> check out <a href="http://xxxxx.com"><span>reddit</span></a></p>
<p id="example. class="example.>Oh yes! check out <a href="http://xxxxx.com"><span>reddit</span></a></p>
<p id="example. class="example.>Oh yes! check out <a href="http://xxxxx.com"><span>reddit</span></a></p>
<div class="wrap"><div id="test"><p id="example. class="example.>Oh yes! check out <a href="http://xxxxx.com"><span>reddit</span></a></p><a href="http://xxxxx.com">Germy</a></div></div> <div class="wrap"/>

遍历

遍历用到 items 方法返回对象列表,或者用 lambda

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-21
from pyquery import PyQuery as pq
doc = pq(filename='example.html')
lis = doc('li')
for li in lis.items():
    print li.html()
 
print lis.each(lambda e: e)

网页请求

# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-21
from pyquery import PyQuery as pq
print(pq('https://www.lidihuo.com/', headers={'user-agent': 'pyquery'}))
print(pq('https://www.lidihuo.com', {'foo': 'bar'}, method='post', verify=True))
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4