首頁  >  文章  >  後端開發  >  Python爬蟲輔助利器PyQuery模組的安裝使用攻略介紹

Python爬蟲輔助利器PyQuery模組的安裝使用攻略介紹

高洛峰
高洛峰原創
2017-03-04 16:04:001746瀏覽

這篇文章主要介紹了Python爬蟲輔助利器PyQuery模組的安裝使用攻略,PyQuery可以方便地用來解析HTML內容,使其成為眾多爬蟲程式開發者的大愛,需要的朋友可以參考下

Windows下的安裝:
下載網址:https://pypi.python.org/pypi/pyquery/#downloads

##下載後安裝:



C:\Python27>easy_install E:\python\pyquery-1.2.4.zip


#也可以直接在線上安裝:


##

C:\Python27>easy_install pyquery


pyquery是一個類似jquery的python庫,可以使用像jquery那樣的語法來提取網頁中的任何數據,這個用於html網頁的數據提取和挖掘還是一個很不錯的第三方函式庫的。下面我們來看下pyquery的用法有哪些。

從html字串中提取資訊

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
from pyquery import PyQuery as pq
html = '''
<html>
<head>
 <title>this is title</title>
</head>
<body>
 <p id="hi">Hello, World</p>
 <p id="hi2">Nihao</p>
 <div class="class1">
  <img src="1.jpg" />
 </div>
 <ul>
  <li>list1</li>
  <li>list2</li>
 </ul>
</body>
</html>
&#39;&#39;&#39;
d=pq(html)
 
print d(&#39;title&#39;) # 相当于css选择器,根据html标签获取元素
print d(&#39;title&#39;).text() # text()方法获取当前选中的文本块
 
print d(&#39;#hi&#39;).text() # 相当于id选择器,直接根据id名获取元素
print d(&#39;p&#39;).filter(&#39;#hi2&#39;).text() # 可以根据id或class得到指定元素
print d(&#39;.class1&#39;) # 相当于class选择器
print d(&#39;.class1&#39;).html() # html()方法获取当前选中的html块
print d(&#39;.class1&#39;).find(&#39;img&#39;).attr(&#39;src&#39;) # 查找嵌套元素,并选中属性
print d(&#39;ul&#39;).find(&#39;li&#39;).eq(0).text() # 根据索引号获取多个相同html元素中的某一个
print d(&#39;ul&#39;).children() # 获取所有子元素
print d(&#39;ul&#39;).children().eq(0) #根据索引获取子元素
print d(&#39;img&#39;).parents() # 获取父元素
print d(&#39;#hi&#39;).next() # 获取下一个元素
print d(&#39;#hi&#39;).nextAll() #获取后面全部元素块
print d(&#39;p&#39;).not_(&#39;#hi2&#39;) # 返回不匹配选择器的元素
# 遍历所有匹配的元素
for i in d.items(&#39;li&#39;):
 print i.text()
print [i.text() for i in d.items(&#39;li&#39;)] # 遍历用于列表推倒
print d.make_links_absolute(base_url=&#39;http://www.baidu.com&#39;) # 把html文档中的相对路径变为绝对路径


上面的程式碼片段給出了pyquery常用的操作方法。我們先定義了一段html程式碼,然後利用pyquery的一系列方法對該html程式碼進行了操作,主要是取得特定的元素以及文字等。當然,pyquery不僅能夠取得元素,還能進行設定元素屬性、增加元素等功能,鑑於我們最常用的就是上面程式碼中用到的方法,這裡就不再對其他方法進行介紹了。

從url或本機html檔案中提取資訊

當然,pyquery也不僅僅可以解析像上面的html字串,還可以這樣:

d = pq(url=&#39;http://www.baidu.com/&#39;)

我們可以直接載入一個URL,和上面的操作方法沒有任何差別。這個方法預設使用urllib模組進行http請求,但如果你的系統中安裝了requests的話,那麼就會使用requests來進行http請求,這也意味著你可以使用requests的任何參數,例如:

pq(&#39;http://www.baidu.com/&#39;, headers={&#39;user-agent&#39;: &#39;pyquery&#39;})

或者,如果你在你的本地已經有了對應的html文件,那麼還可以這樣:

d = pq(filename=path_to_html_file)

上面的寫法直接指定了本地的html文件,並且操作方法仍然與上面的相同。

可以看到,pyquery給我們充分的便利性來進行任何元素的選取,就像jquery一樣。


利用pyquery抓取豆瓣電影top250

看完了pyquery的語法,我們來看一個實例,抓取豆瓣電影top250。

因為豆瓣反爬蟲反的厲害,運行幾次就沒辦法再抓了,我只好先用requests把頁面下載下來,直接使用pyquery分析頁面的方法來提取信息:

from pyquery import PyQuery as pq
import requests
 
head_req = {
 &#39;User-Agent&#39;:&#39;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36&#39;,
 &#39;Referer&#39;:&#39;https://movie.douban.com/top250?start=0&#39;,
 
}
r=requests.get("https://movie.douban.com/top250?start=0",headers=head_req)
with open("1.html","wb") as html:
 html.write(r.content)
 
d=pq(filename="1.html")
 
# print d(&#39;ol&#39;).find(&#39;li&#39;).html()
for data in d(&#39;ol&#39;).items(&#39;li&#39;):
 print data.find(&#39;.hd&#39;).find(&#39;.title&#39;).eq(0).text()
 print data.find(&#39;.star&#39;).find(&#39;.rating_num&#39;).text()
 print data.find(&#39;.quote&#39;).find(&#39;.inq&#39;).text()
 print


#運行下看看結果:

肖申克的救赎
9.6
希望让人自由。

这个杀手不太冷
9.4
怪蜀黍和小萝莉不得不说的故事。

阿甘正传
9.4
一部美国近现代史。

霸王别姬
9.4
风华绝代。

美丽人生
9.5
最美的谎言。

千与千寻
9.2
最好的宫崎骏,最好的久石让。

辛德勒的名单
9.4
拯救一个人,就是拯救整个世界。

海上钢琴师
9.2
每个人都要走一条自己坚定了的路,就算是粉身碎骨。

机器人总动员
9.3
小瓦力,大人生。

盗梦空间
9.2
诺兰给了我们一场无法盗取的梦。

泰坦尼克号
9.1
失去的才是永恒的。

三傻大闹宝莱坞
9.1
英俊版憨豆,高情商版谢耳朵。

放牛班的春天
9.2
天籁一般的童声,是最接近上帝的存在。

忠犬八公的故事
9.2
永远都不能忘记你所爱的人。

龙猫
9.1
人人心中都有个龙猫,童年就永远不会消失。

大话西游之大圣娶亲
9.1
一生所爱。

教父
9.2
千万不要记恨你的对手,这样会让你失去理智。

乱世佳人
9.2
Tomorrow is another day.

天堂电影院
9.1
那些吻戏,那些青春,都在影院的黑暗里被泪水冲刷得无比清晰。

当幸福来敲门
8.9
平民励志片。

搏击俱乐部
9.0
邪恶与平庸蛰伏于同一个母体,在特定的时间互相对峙。

楚门的世界
9.0
如果再也不能见到你,祝你早安,午安,晚安。

触不可及
9.1
满满温情的高雅喜剧。

指环王3:王者无敌
9.1
史诗的终章。

罗马假日
8.9
爱情哪怕只有一天。

當然這只是第一頁的25條,我們已經知道了豆瓣電影top250的url是


https://movie.douban.com/top250?start=0

start參數從0,每次加25,直到


https://movie. douban.com/top250?start=225

所以可以寫個循環把它們都抓下來。


更多Python爬蟲輔助利器PyQuery模組的安裝使用攻略介紹相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn