资讯专栏INFORMATION COLUMN

python爬虫神器PyQuery的使用方法

codecraft / 700人阅读

摘要:语法与几乎完全相同,所以不用再去费心去记一些奇怪的方法了。目前版本官方文档简介可让你用的语法来对进行操作。如果利用,对和的处理将更快。因此执行上述操作之后,本身也发生了变化。操作同样的原汁原味的语法运行结果这不需要多解释了吧。

前言

你是否觉得 XPath 的用法多少有点晦涩难记呢?

你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢?

你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢?

你是否已经有了一些前端基础了解选择器却与另外一些奇怪的选择器语法混淆了呢?

嗯,那么,前端大大们的福音来了,PyQuery 来了,乍听名字,你一定联想到了 jQuery,如果你对 jQuery 熟悉,那么 PyQuery 来解析文档就是不二之选!包括我在内!

PyQueryPython 仿照 jQuery 的严格实现。语法与 jQuery 几乎完全相同,所以不用再去费心去记一些奇怪的方法了。

天下竟然有这等好事?我都等不及了!

安装

有这等神器还不赶紧安装了!来!

pip install pyquery
参考来源

本文内容参考官方文档,更多内容,大家可以去官方文档学习,毕竟那里才是最原汁原味的。

目前版本 1.2.4 (2016/3/24)

官方文档

简介

pyquery allows you to make jquery queries on xml documents. The API is
as much as possible the similar to jquery. pyquery uses lxml for fast
xml and html manipulation. This is not (or at least not yet) a library
to produce or interact with javascript code. I just liked the jquery
API and I missed it in python so I told myself “Hey let’s make jquery
in python”. This is the result. It can be used for many purposes, one
idea that I might try in the future is to use it for templating with
pure http templates that you modify using pyquery. I can also be used
for web scrapping or for theming applications with Deliverance.

pyquery 可让你用 jQuery 的语法来对 xml 进行操作。这I和 jQuery 十分类似。如果利用 lxml,pyquery 对 xml 和 html 的处理将更快。

这个库不是(至少还不是)一个可以和 JavaScript交互的代码库,它只是非常像 jQuery API 而已。

初始化

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

(1)直接字符串
from pyquery import PyQuery as pq
doc = pq("")

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

(2)lxml.etree
from lxml import etree
doc = pq(etree.fromstring(""))

可以首先用 lxmletree 处理一下代码,这样如果你的 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 的文件,文件内容为


编写如下程序

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

运行结果

    
 


first item second item third item fourth item fifth item

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

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

然而比比 PyQuery,哦我简直太爱它了!

属性操作

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

from pyquery import PyQuery as pq

p = pq("

")("p") print p.attr("id") print p.attr("id", "plop") print p.attr("id", "hello")

运行结果

hello

再来一发

from pyquery import PyQuery as pq

p = pq("

")("p") print p.addClass("beauty") print p.removeClass("hello") print p.css("font-size", "16px") print p.css({"background-color": "yellow"})

运行结果

依旧是那么优雅与自信!

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

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

DOM操作

同样的原汁原味的 jQuery 语法

from pyquery import PyQuery as pq

p = pq("

")("p") print p.append(" check out reddit") print p.prepend("Oh yes!") d = pq("") p.prependTo(d("#test")) print p print d d.empty() print d

运行结果

check out reddit

Oh yes! check out reddit

Oh yes! check out reddit

Oh yes! check out reddit

Germy

这不需要多解释了吧。

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
second item
third item
fourth item
fifth item
  • first item
  • second item
  • third item
  • fourth item
  • fifth item
  • 不过最常用的还是 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)
    

    感受一下,GETPOST,样样通。

    Ajax

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

    PyQueryAjax

    API

    最后少不了的,API大放送。

    API

    原汁原味最全的API,都在里面了!如果你对 jQuery 语法不熟,强烈建议先学习下 jQuery,再回来看 PyQuery,你会感到异常亲切!

    结语

    用完了 PyQuery,我已经深深爱上了他!

    你呢?

    转自:http://cuiqingcai.com/2636.html

    文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/37972.html

    相关文章

    • Google推出爬虫神器:Pyppeteer,神挡杀神,佛挡杀佛!

      摘要:注意,是叫做,不是。两款浏览器同根同源,它们有着同样的,但配色不同,由蓝红绿黄四种颜色组成,而由不同深度的蓝色构成。另外是基于的新特性实现的,所以它的一些执行也支持异步操作,效率相对于来说也提高了。是否响应信号,一般是命令,默认是。 如果大家对 Python 爬虫有所了解的话,想必你应该听说过 Selenium 这个库,这实际上是一个自动化测试工具,现在已经被广泛用于网络爬虫中来应对 ...

      Fundebug 评论0 收藏0
    • python常用

      摘要:经常用的包有如下解析的利器诚如所言进行请求那是相当的方便,虽然也可以用打包利器,曾经也用过,不过相比较而已,现在更好用了操作的库,性能卓越软件测试的利器,配合已有类库或者自己写的类库,做测试杠杠的。 经常用的python包有如下 lxml 解析xml的利器 requests 诚如所言HTTP for human. 进行http请求那是相当的方便,虽然也可以用urllib/url...

      sunny5541 评论0 收藏0
    • Python3网络爬虫实战---30、解析库使用PyQuery

      摘要:父节点我们可以用方法来获取某个节点的父节点,我们用一个实例来感受一下运行结果在这里我们首先用选取了为的节点,然后调用了方法,得到其父节点,类型依然是类型。 上一篇文章:Python3网络爬虫实战---29、解析库的使用:BeautifulSoup下一篇文章:Python3网络爬虫实战---31、数据存储:文件存储 在上一节我们介绍了 BeautifulSoup 的使用,它是一个非常强...

      IntMain 评论0 收藏0
    • 首次公开,整理12年积累博客收藏夹,零距离展示《收藏夹吃灰》系列博客

      摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

      Harriet666 评论0 收藏0
    • Python3网络爬虫实战---4、数据库安装:MySQL、MongoDB、Redis

      摘要:运行结果如果运行结果一致则证明安装成功。上一篇文章网络爬虫实战请求库安装下一篇文章网络爬虫实战数据库的安装 上一篇文章:Python3网络爬虫实战---2、请求库安装:GeckoDriver、PhantomJS、Aiohttp下一篇文章:Python3网络爬虫实战---数据库的安装:MySQL、MongoDB、Redis 抓取下网页代码之后,下一步就是从网页中提取信息,提取信息的方式有...

      xbynet 评论0 收藏0

    发表评论

    0条评论

    codecraft

    |高级讲师

    TA的文章

    阅读更多
    最新活动
    阅读需要支付1元查看
    <