使用Python3.5爬取豆瓣電影Top250
這一段時間,一直在折騰Python爬蟲。已有的文件記錄顯示,折騰爬蟲大概個把月了吧。但是斷斷續續,一會兒鼓搗python、一會學習sql兒、一會 調試OpenCV,結果什么都沒學好。前幾天,終于耐下心來,決定還是用python做一個小東西。想了想,決定從爬 "豆瓣電影Top250" 開始。大學的時候,經常根據豆瓣評分選電影。大二大三的時候,有段時間,基本上一天一部地刷。那時候,也真清閑... 后來top電影看的差不多了,對國產片基本上沒什么胃口。后來就改行看動漫來消遣,還記得考研那會兒,追《進擊的巨人》,熬夜看吶。然后今年的封殺令讓 《東京食尸鬼》、《寄生獸》、《火星異種》、《死神》等等一大批動漫都給禁播了。。。哎,扯遠了。。。
1.準備工作
準備好工具 Python3.5 + requests + lxml + mysqlconnector
2.分析網頁
豆瓣電影排行榜里,每個條目都是一致的,例如《這個殺手不太冷》的html代碼如下:
<li> <div class="item"> <div class="pic"> <em class="">2</em> <a > <img alt="這個殺手不太冷" src="https://simg.open-open.com/show/d049cfcb9deb88a7ee96ab64546bf678.jpg" class=""> </a> </div> <div class="info"> <div class="hd"> <a class=""> <span class="title">這個殺手不太冷</span> <span class="title"> / Léon</span> <span class="other"> / 殺手萊昂 / 終極追殺令(臺)</span> </a> </div> <div class="bd"> <p class=""> 導演: 呂克·貝松 Luc Besson 主演: 讓·雷諾 Jean Reno / 娜塔麗·波特曼 ... <br> 1994 / 法國 / 劇情 動作 犯罪 </p> <div class="star"> <span class="rating5-t"></span> <span class="rating_num" property="v:average">9.4</span> <span property="v:best" content="10.0"></span> <span>620387人評價</span> </div> <p class="quote"> <span class="inq">怪蜀黍和小蘿莉不得不說的故事。</span> </p> </div> </div> </div> </li>
接下來,要解析的是:
- 排名:2
- 中文名:這個殺手不太冷
- 外文名:Léon
- 評分 : 9.4
- 簡評: 怪蜀黍和小蘿莉不得不說的故事。
使用lxml解析網頁
先解析出item條目: item = root.xpath('//ol/li/div[@class="item"]')然后排名: rank = item.xpath('./div[@class="pic"]/em[@text()]')[0]
寫出python代碼,運行結果:
1 9.6 希望讓人自由。 肖申克的救贖 ,The Shawshank Redemption 2 9.4 怪蜀黍和小蘿莉不得不說的故事。 這個殺手不太冷 ,Léon 3 9.4 一部美國近現代史。 阿甘正傳 ,Forrest Gump 4 9.4 風華絕代。 霸王別姬 5 9.5 最美的謊言。 美麗人生 ,La vita è bella 6 9.2 每個人都要走一條自己堅定了的路,就算是粉身碎骨。 海上鋼琴師 ,La leggenda del pianista sull'oceano 7 9.4 拯救一個人,就是拯救整個世界。 辛德勒的名單 ,Schindler's List 8 9.2 最好的宮崎駿,最好的久石讓。 千與千尋 ,千と千の神し 9 9.3 小瓦力,大人生。 機器人總動員 ,WALLE 10 9.1 失去的才是永恒的。 泰坦尼克號 ,Titanic ... 244 8.2 瓊瑤阿姨在韓國的深刻版。 假如愛有天意 , 245 8.4 爆米花動作電影新標桿。 速度與激情5 ,Fast Five 246 8.4 黑鷹墜落 ,Black Hawk Down 247 8.5 一群演技精湛的戲骨,奉獻出一個精致的黑幫小品,成就杜琪峰群戲的巔峰之作。 槍火 ,火 248 8.8 簡簡單單,回味悠長。 刺猬的優雅 ,Le hérisson 249 8.6 最冷的地方,有最溫暖的感情。 帝企鵝日記 ,La marche de l'empereur 250 8.1 瘋狂的石頭
實現代碼:
import requests from lxml import etree session = requests.Session() for id in range(0,251,25): URL = 'http://movie.douban.com/top250/?start=' + str(id) req = session.get(URL) req.encoding = 'utf8' # 設置網頁編碼格式 root=etree.HTML(req.content) #將request.content 轉化為 Element items = root.xpath('//ol/li/div[@class="item"]') for item in items: #注意可能只有中文名,沒有英文名;可能沒有quote簡評 rank,name,alias,rating_num,quote,url = "","","","","","" try: url = item.xpath('./div[@class="pic"]/a/@href')[0] rank = item.xpath('./div[@class="pic"]/em/text()')[0] title = item.xpath('./div[@class="info"]//a/span[@class="title"]/text()') name = title[0].encode('gb2312','ignore').decode('gb2312') alias = title[1].encode('gb2312','ignore').decode('gb2312') if len(title)==2 else "" rating_num = item.xpath('.//div[@class="bd"]//span[@class="rating_num"]/text()')[0] quote_tag = item.xpath('.//div[@class="bd"]//span[@class="inq"]') if len(quote_tag) is not 0: quote = quote_tag[0].text.encode('gb2312','ignore').decode('gb2312').replace('\xa0','') print(rank,rating_num,quote) print(name.encode('gb2312','ignore').decode('gb2312') ,alias.encode('gb2312','ignore').decode('gb2312') .replace('/',',')) except: print('faild!') pass
當然,也可使使用數據庫保存!

本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!