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

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

Mar 04, 2017 pm 04:04 PM

這篇文章主要介紹了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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? 如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎? Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何繞過Investing.com的反爬蟲機制獲取新聞數據? 如何繞過Investing.com的反爬蟲機制獲取新聞數據? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...

See all articles