成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python爬蟲神器PyQuery的使用方法

開發(fā) 后端
前端大大們的福音來了,PyQuery 來了,乍聽名字,你一定聯(lián)想到了 jQuery,如果你對 jQuery 熟悉,那么 PyQuery 來解析文檔就是不二之選!包括我在內(nèi)!PyQuery 是 Python 仿照 jQuery 的嚴(yán)格實(shí)現(xiàn)。語法與 jQuery 幾乎完全相同,所以不用再去費(fèi)心去記一些奇怪的方法了。

 

?Python爬蟲神器PyQuery的使用方法 ?

前言

你是否覺得 XPath 的用法多少有點(diǎn)晦澀難記呢?

你是否覺得 BeautifulSoup 的語法多少有些慳吝難懂呢?

你是否甚至還在苦苦研究正則表達(dá)式卻因?yàn)樯傩┝艘粋€(gè)點(diǎn)而抓狂呢?

你是否已經(jīng)有了一些前端基礎(chǔ)了解選擇器卻與另外一些奇怪的選擇器語法混淆了呢?

嗯,那么,前端大大們的福音來了,PyQuery 來了,乍聽名字,你一定聯(lián)想到了 jQuery,如果你對 jQuery 熟悉,那么 PyQuery 來解析文檔就是不二之選!包括我在內(nèi)!

PyQuery 是 Python 仿照 jQuery 的嚴(yán)格實(shí)現(xiàn)。語法與 jQuery 幾乎完全相同,所以不用再去費(fèi)心去記一些奇怪的方法了。

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

安裝

有這等神器還不趕緊安裝了!來!

pip install pyquery

參考來源

本文內(nèi)容參考官方文檔,更多內(nèi)容,大家可以去官方文檔學(xué)習(xí),畢竟那里才是最原汁原味的。

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

官方文檔 (https://pythonhosted.org/pyquery/)

簡介

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 進(jìn)行操作。這I和 jQuery 十分類似。如果利用 lxml,pyquery 對 xml 和 html 的處理將更快。

這個(gè)庫不是(至少還不是)一個(gè)可以和 JavaScript交互的代碼庫,它只是非常像 jQuery API 而已。

初始化

在這里介紹四種初始化方式。

(1)直接字符串

from pyquery import PyQuery as pq

doc = pq("<html></html>")

pq 參數(shù)可以直接傳入 HTML 代碼,doc 現(xiàn)在就相當(dāng)于 jQuery 里面的 $ 符號了。

(2)lxml.etree

from lxml import etree

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

可以首先用 lxml 的 etree 處理一下代碼,這樣如果你的 HTML 代碼出現(xiàn)一些不完整或者疏漏,都會自動(dòng)轉(zhuǎn)化為完整清晰結(jié)構(gòu)的 HTML代碼。

(3)直接傳URL

from pyquery import PyQuery as pq

doc = pq('http://www.baidu.com')

這里就像直接請求了一個(gè)網(wǎng)頁一樣,類似用 urllib2 來直接請求這個(gè)鏈接,得到 HTML 代碼。

(4)傳文件

from pyquery import PyQuery as pq

doc = pq(filename='hello.html')

可以直接傳某個(gè)路徑的文件名。

快速體驗(yàn)

現(xiàn)在我們以本地文件為例,傳入一個(gè)名字為 hello.html 的文件,文件內(nèi)容為

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

運(yùn)行結(jié)果

<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 的語法,是不是運(yùn)行結(jié)果都是一樣的呢?

在這里我們注意到了一點(diǎn),PyQuery 初始化之后,返回類型是 PyQuery,利用了選擇器篩選一次之后,返回結(jié)果的類型依然還是 PyQuery,這簡直和 jQuery 如出一轍,不能更贊!然而想一下 BeautifulSoup 和 XPath 返回的是什么?列表!一種不能再進(jìn)行二次篩選(在這里指依然利用 BeautifulSoup 或者 XPath 語法)的對象!

然而比比 PyQuery,哦我簡直太愛它了!

屬性操作

你可以完全按照 jQuery 的語法來進(jìn)行 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")

運(yùn)行結(jié)果

hello

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

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

再來一發(fā) 

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

運(yùn)行結(jié)果

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

依舊是那么優(yōu)雅與自信!

在這里我們發(fā)現(xiàn)了,這是一連串的操作,而 p 是一直在原來的結(jié)果上變化的。

因此執(zhí)行上述操作之后,p 本身也發(fā)生了變化。

DOM操作

同樣的原汁原味的 jQuery 語法

from pyquery import PyQuery as pq



p = pq('<p id="hello" class="hello"></p>')('p')

print p.append(' check out <a )

print p.prepend('Oh yes!')

d = pq('<div class="wrap"><div id="test"><a ))

print p

print d

d.empty()

print d

運(yùn)行結(jié)果

<p id="hello" class="hello"> check out <a ><span>reddit</span></a></p>

<p id="hello" class="hello">Oh yes! check out <a ><span>reddit</span></a></p>

<p id="hello" class="hello">Oh yes! check out <a ><span>reddit</span></a></p>

<div class="wrap"><div id="test"><p id="hello" class="hello">Oh yes! check out <a ><span>reddit</span></a></p><a >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)

運(yùn)行結(jié)果

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

網(wǎng)頁請求

PyQuery 本身還有網(wǎng)頁請求功能,而且會把請求下來的網(wǎng)頁代碼轉(zhuǎn)為 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,樣樣通。

Ajax

PyQuery 同樣支持 Ajax 操作,帶有 get 和 post 方法,不過不常用,一般我們不會用 PyQuery 來做網(wǎng)絡(luò)請求,僅僅是用來解析。

PyQueryAjax

API

***少不了的,API大放送。

API (https://pythonhosted.org/pyquery/api.html)

原汁原味最全的API,都在里面了!如果你對 jQuery 語法不熟,強(qiáng)烈建議先學(xué)習(xí)下 jQuery,再回來看 PyQuery,你會感到異常親切!

結(jié)語

用完了 PyQuery,我已經(jīng)深深愛上了他!

你呢? 

責(zé)任編輯:龐桂玉 來源: Python開發(fā)者
相關(guān)推薦

2017-09-08 15:04:10

jQuery爬蟲PyQuery

2011-02-24 13:09:10

FireFTP

2010-03-04 13:37:20

Python yiel

2012-01-13 09:55:54

jQuery

2010-03-04 15:17:30

Python prin

2010-03-10 11:11:16

Python編程

2017-06-07 10:00:56

PythonBeautifulSo解析器

2009-12-24 16:36:06

WPF InkCanv

2022-10-09 10:11:30

Python爬蟲神器

2010-10-08 16:01:17

mysql UPDAT

2013-07-15 15:12:40

iOS多線程NSOperationNSOperation

2009-12-02 16:04:44

PHP fsockop

2010-03-10 19:18:10

Python scri

2010-03-05 14:09:19

Python sys.

2013-07-17 10:34:36

Ubuntu軟件管理

2009-12-02 18:51:12

PHP分頁類

2010-11-19 09:56:38

SQLiteAndroid

2023-01-06 08:55:00

2009-08-25 16:54:28

C# RichText

2010-03-04 10:44:04

Linux ftp命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91精品国产日韩91久久久久久 | 欧美一二三 | 国产激情毛片 | 黄色免费看 | 999国产精品视频 | 91精品久久久 | 亚洲九九精品 | h视频在线免费观看 | 久久久久久国产 | 欧美精选一区二区 | 精品国产色 | 久久久www成人免费无遮挡大片 | 亚洲免费久久久 | 日韩精品视频在线观看一区二区三区 | 亚洲一区二区三区免费视频 | 日本高清视频网站 | 国产精品免费在线 | 精品欧美一区二区三区久久久 | 国产精品综合网 | 精品国产一区二区三区免费 | 欧美一级免费片 | 欧美色性 | 一级a性色生活片久久毛片波多野 | 毛片区| 一区二区三区精品视频 | 久久极品| 中文字幕日韩欧美一区二区三区 | 在线观看的av | 精国产品一区二区三区 | 国产精品视频网 | 蜜桃视频在线观看免费视频网站www | 夜夜爽99久久国产综合精品女不卡 | 精品久久久久久久久久久院品网 | av性色全交蜜桃成熟时 | 欧美日韩精品免费观看 | 黄网站免费在线观看 | 欧美狠狠操 | 天天夜夜操 | 一级特黄a大片 | 日韩久草 | 久久久91精品国产一区二区三区 |