国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-01-04 17:30:56
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了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 pqhtml = '''<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') # 相當于css選擇器,根據html標簽獲取元素print d('title').text() # text()方法獲取當前選中的文本塊print d('#hi').text() # 相當于id選擇器,直接根據id名獲取元素print d('p').filter('#hi2').text() # 可以根據id或class得到指定元素print d('.class1') # 相當于class選擇器print d('.class1').html() # html()方法獲取當前選中的html塊print d('.class1').find('img').attr('src') # 查找嵌套元素,并選中屬性print d('ul').find('li').eq(0).text() # 根據索引號獲取多個相同html元素中的某一個print d('ul').children() # 獲取所有子元素print d('ul').children().eq(0) #根據索引獲取子元素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文檔中的相對路徑變為絕對路徑

上面的代碼段給出了pyquery常用的操作方法。我們先定義了一段html代碼,然后利用pyquery的一系列方法對該html代碼進行了操作,主要是獲取特定的元素以及文本等。當然,pyquery不僅僅能夠獲取元素,還能進行設置元素屬性、增加元素等功能,鑒于我們最常用的就是上面代碼中用到的方法,這里就不再對其他方法進行介紹了。

從url或本地html文件中提取信息

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

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

我們可以直接加載一個URL,和上面的操作方法沒有任何區別。這種方法默認使用urllib模塊進行http請求,但如果你的系統中安裝了requests的話,那么就會使用requests來進行http請求,這也就意味著你可以使用requests的任何參數,比如:

pq('http://www.baidu.com/', headers={'user-agent': 'pyquery'})

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

d = pq(filename=path_to_html_file)

上面的寫法直接指定了本地的html文件,且操作方法仍然與上面的相同。
可以看到,pyquery給我們提供充分的便利性來進行任何元素的選取,就像jquery一樣。

利用pyquery抓取豆瓣電影top250

看完了pyquery的語法,我們來看一個實例,抓取豆瓣電影top250。
因為豆瓣反爬蟲反的厲害,運行幾次就沒法再抓了,我只好先用requests把頁面下載下來,直接使用pyquery分析頁面的方法來提取信息:

from pyquery import PyQuery as pqimport requestshead_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

運行下看看結果:

肖申克的救贖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.2Tomorrow 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
所以可以寫個循環把它們都抓下來。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青阳县| 远安县| 平泉县| 星子县| 文昌市| 黑河市| 承德市| 祁门县| 大洼县| 平罗县| 孝义市| 乌拉特后旗| 昭觉县| 新龙县| 清新县| 平顶山市| 开阳县| 全州县| 会理县| 凌海市| 泉州市| 康马县| 新干县| 武定县| 平乡县| 阳谷县| 璧山县| 文山县| 江西省| 恩平市| 洪泽县| 苏尼特左旗| 盖州市| 黄陵县| 宣武区| 台北县| 新闻| 绍兴县| 万山特区| 海盐县| 界首市|