Python--python爬虫神器PyQuery

原创 2016年06月01日 21:40:43

安装

pip install pyquery

或者直接在PyCharm中import pyquery 提示没有的时候点击install就ok啦

初始化

在这里介绍四种初始化方式。

(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')

这里就像直接请求了一个网页一样,类似用 urllib2 来直接请求这个链接,得到 HTML 代码。

(4)传文件

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

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

快速开始

现在我们以本地文件为例,传入一个名字为 hello.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>

编写如下程序

from pyquery import PyQuery as pq
doc = pq(filename='hello.html')
print doc.html()
print type(doc)
li = doc('li')
print type(li)
print li.text()

运行结果

<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>

<class 'pyquery.pyquery.PyQuery'>
<class 'pyquery.pyquery.PyQuery'>
first item second item third item fourth item fifth item

看,回忆一下 jQuery 的语法,是不是运行结果都是一样的呢?

在这里我们注意到了一点,PyQuery 初始化之后,返回类型是 PyQuery,利用了选择器筛选一次之后,返回结果的类型依然还是 PyQuery,这简直和 jQuery 如出一辙,不能更赞!然而想一下 BeautifulSoup 和 XPath 返回的是什么?列表!一种不能再进行二次筛选(在这里指依然利用 BeautifulSoup 或者 XPath 语法)的对象!

属性操作

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

from pyquery import PyQuery as pq

p = pq('<p id="hello" class="hello"></p>')('p')
print p.attr("id")
print p.attr("id", "plop")
print p.attr("id", "hello")

运行结果

hello

<p id="plop" class="hello"/>
<p id="hello" class="hello"/>

再看一个例子

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'})

运行结果

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

依旧是那么优雅与自信!

在这里我们发现了,这是一连串的操作,而 p 是一直在原来的结果上变化的。

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

DOM操作

同样的原汁原味的 jQuery 语法

from pyquery import PyQuery as pq

p = pq('<p id="hello" class="hello"></p>')('p')
print p.append(' check out <a href="http://reddit.com/r/python"><span>reddit</span></a>')
print p.prepend('Oh yes!')
d = pq('<div class="wrap"><div id="test"><a href="http://cuiqingcai.com">Germy</a></div></div>')
p.prependTo(d('#test'))
print p
print d
d.empty()
print d

运行结果

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

这不需要多解释了吧。

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

遍历

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

from pyquery import PyQuery as pq
doc = pq(filename='hello.html')
lis = doc('li')
for li in lis.items():
    print li.html()

print lis.each(lambda e: e)

运行结果

first item
<a href="link2.html">second item</a>
<a href="link3.html"><span class="bold">third item</span></a>
<a href="link4.html">fourth item</a>
<a href="link5.html">fifth item</a>
<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>

不过最常用的还是 items 方法

网页请求

PyQuery 本身还有网页请求功能,而且会把请求下来的网页代码转为 PyQuery 对象。

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

感受一下,GET,POST,样样通。

API

Ajax

版权声明:本文为博主原创文章,未经博主允许不得转载。

基于Python、PyQuery实现的一个网络爬虫实例

一、前言 由于项目需要,写了一个爬虫程序。用它解析唯品会中连衣裙的搜索结果页面(结果不止一页,需要循环解析),获取连衣裙的图片url(唯品会搜索结果页上的图片会有正反两张),然后把图片下载下来。因为...
  • fly1183989782
  • fly1183989782
  • 2015年01月03日 15:32
  • 1942

Python使用pyquery抓取数据实例

最近由于公司业务上的需求,要网络采集一些数据,并格式化以供应用的调取,前期想到用正则表达式来对网页格式串进行过滤和抓取,在进行了一系列尝试之后放弃, 原因是太繁琐了,而且对于每种网页都需要写特定的表...
  • baidu_21833433
  • baidu_21833433
  • 2017年04月21日 13:27
  • 2056

python爬虫神器PyQuery的使用方法

python爬虫神器PyQuery的使用方法 2016/05/27 · 工具与框架 · PyQuery, 爬虫 分享到:3 原文出处: xiaomayi2012   ...
  • hayaqi0504
  • hayaqi0504
  • 2016年06月06日 08:55
  • 545

Python爬虫神器PyQuery的使用方法

前言 你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂...
  • hqzxsc2006
  • hqzxsc2006
  • 2017年06月01日 17:05
  • 249

爬虫解析2:pyquery总结

使用 pyQuery 解析HTML内容 https://segmentfault.com/a/1190000005182997 http://blog.csdn.net/cnmilan/artic...
  • cbjcry
  • cbjcry
  • 2017年04月13日 11:20
  • 488

python3实现爬取淘宝页面的商品的数据信息(selenium+pyquery+mongodb)

1.环境须知 做这个爬取的时候需要安装好python3.6和selenium、pyquery等等一些比较常用的爬取和解析库,还需要安装MongoDB这个分布式数据库。 2.直接上代码 sp...
  • DH_SIR
  • DH_SIR
  • 2017年11月11日 00:40
  • 261

python爬虫相关库安装

python爬虫相关库安装
  • wangjx92
  • wangjx92
  • 2017年12月25日 14:06
  • 70

五. PyQuery

PyQuery初始化字符串初始化html = ''' first item second item ...
  • niandanzhi9501
  • niandanzhi9501
  • 2017年10月09日 00:46
  • 423

爬虫基础 -- pyquery

Pyquery        强大又灵活的网页解析库,相比而言,正则写起来太麻烦。如果说beautifulsoup语法太难记,如果熟悉jQuery,那么Pyquery是绝佳的选择。Pyquery是模...
  • Ghost_leader
  • Ghost_leader
  • 2017年10月25日 17:01
  • 700

pyquery ----用法

pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,我个人写过的一些抓取网页数据的脚本就是用它来解析html获取数据的。他的官方文档地址是:http://packages....
  • u012850192
  • u012850192
  • 2016年07月07日 10:43
  • 488
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python--python爬虫神器PyQuery
举报原因:
原因补充:

(最多只允许输入30个字)