Python爬蟲輔助利器PyQuery模塊的安裝使用攻略
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那樣的語法來提取網(wǎng)頁中的任何數(shù)據(jù),這個用于html網(wǎng)頁的數(shù)據(jù)提取和挖掘還是一個很不錯的第三方庫的。下面我們來看下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> ''' d=pq(html) print d('title') # 相當(dāng)于css選擇器,根據(jù)html標(biāo)簽獲取元素 print d('title').text() # text()方法獲取當(dāng)前選中的文本塊 print d('#hi').text() # 相當(dāng)于id選擇器,直接根據(jù)id名獲取元素 print d('p').filter('#hi2').text() # 可以根據(jù)id或class得到指定元素 print d('.class1') # 相當(dāng)于class選擇器 print d('.class1').html() # html()方法獲取當(dāng)前選中的html塊 print d('.class1').find('img').attr('src') # 查找嵌套元素,并選中屬性 print d('ul').find('li').eq(0).text() # 根據(jù)索引號獲取多個相同html元素中的某一個 print d('ul').children() # 獲取所有子元素 print d('ul').children().eq(0) #根據(jù)索引獲取子元素 print d('img').parents() # 獲取父元素 print d('#hi').next() # 獲取下一個元素 print d('#hi').nextAll() #獲取后面全部元素塊 print d('p').not_('#hi2') # 返回不匹配選擇器的元素 # 遍歷所有匹配的元素 for i in d.items('li'): print i.text() print [i.text() for i in d.items('li')] # 遍歷用于列表推倒 print d.make_links_absolute(base_url='http://www.baidu.com') # 把html文檔中的相對路徑變?yōu)榻^對路徑
上面的代碼段給出了pyquery常用的操作方法。我們先定義了一段html代碼,然后利用pyquery的一系列方法對該html代碼進行了操作,主要是獲取特定的元素以及文本等。當(dāng)然,pyquery不僅僅能夠獲取元素,還能進行設(shè)置元素屬性、增加元素等功能,鑒于我們最常用的就是上面代碼中用到的方法,這里就不再對其他方法進行介紹了。
從url或本地html文件中提取信息
當(dāng)然,pyquery也不僅僅可以解析像上面的html字符串,還可以這樣:
d = pq(url='http://www.baidu.com/')
我們可以直接加載一個URL,和上面的操作方法沒有任何區(qū)別。這種方法默認(rèn)使用urllib模塊進行http請求,但如果你的系統(tǒng)中安裝了requests的話,那么就會使用requests來進行http請求,這也就意味著你可以使用requests的任何參數(shù),比如:
pq('http://www.baidu.com/', headers={'user-agent': 'pyquery'})
或者,如果你在你的本地已經(jīng)有了對應(yīng)的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 = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36', 'Referer':'https://movie.douban.com/top250?start=0', } 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('ol').find('li').html() for data in d('ol').items('li'): print data.find('.hd').find('.title').eq(0).text() print data.find('.star').find('.rating_num').text() print data.find('.quote').find('.inq').text() print
運行下看看結(jié)果:
肖申克的救贖 9.6 希望讓人自由。 這個殺手不太冷 9.4 怪蜀黍和小蘿莉不得不說的故事。 阿甘正傳 9.4 一部美國近現(xiàn)代史。 霸王別姬 9.4 風(fēng)華絕代。 美麗人生 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 那些吻戲,那些青春,都在影院的黑暗里被淚水沖刷得無比清晰。 當(dāng)幸福來敲門 8.9 平民勵志片。 搏擊俱樂部 9.0 邪惡與平庸蟄伏于同一個母體,在特定的時間互相對峙。 楚門的世界 9.0 如果再也不能見到你,祝你早安,午安,晚安。 觸不可及 9.1 滿滿溫情的高雅喜劇。 指環(huán)王3:王者無敵 9.1 史詩的終章。 羅馬假日 8.9 愛情哪怕只有一天。
當(dāng)然這只是第一頁的25條,我們已經(jīng)知道了豆瓣電影top250的url是
https://movie.douban.com/top250?start=0
start參數(shù)從0,每次加25,直到
https://movie.douban.com/top250?start=225
所以可以寫個循環(huán)把它們都抓下來。
- python爬蟲開發(fā)之PyQuery模塊詳細使用方法與實例全解
- Python中類似于jquery的pyquery庫用法分析
- Python爬蟲PyQuery庫基本用法入門教程
- python3解析庫pyquery的深入講解
- Python網(wǎng)絡(luò)爬蟲神器PyQuery的基本使用教程
- 在Python中使用cookielib和urllib2配合PyQuery抓取網(wǎng)頁信息
- Python中的jquery PyQuery庫使用小結(jié)
- python解析html開發(fā)庫pyquery使用方法
- python使用urllib模塊和pyquery實現(xiàn)阿里巴巴排名查詢
- 零基礎(chǔ)寫python爬蟲之爬蟲編寫全記錄
- Python爬蟲框架Scrapy安裝使用步驟
- python爬蟲學(xué)習(xí)筆記之pyquery模塊基本用法詳解
相關(guān)文章
Python使用bar繪制堆積/帶誤差棒柱形圖的實現(xiàn)
本文先講解bar參數(shù)如何使用,然后分別演示堆積柱形圖和帶誤差柱形圖畫法。具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09在Python函數(shù)中輸入任意數(shù)量參數(shù)的實例
今天小編就為大家分享一篇在Python函數(shù)中輸入任意數(shù)量參數(shù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python邊緣檢測之prewitt,sobel和laplace算子詳解
這篇文章主要為大家詳細介紹了Python邊緣檢測中prewitt、sobel和laplace算子的使用方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-04-04