摘要:目標通過正則表達式爬取貓眼電影電影的排名名字電影封面圖片主演上映時間貓眼評分,將爬取的內(nèi)容寫入文件中。為了加快爬取網(wǎng)頁的速度,可以開啟循環(huán)和多線程當需要爬取的信息很大時,這是一個不錯的技巧。
目標
通過Request+正則表達式爬取貓眼電影TOP100電影的排名、名字、電影封面圖片、主演、上映時間、貓眼評分,將爬取的內(nèi)容寫入文件中。
流程框架進入到貓眼電影TOP100的頁面,此時的URL為http://maoyan.com/board/4,點擊第2頁,會發(fā)現(xiàn)此時的URL為http://maoyan.com/board/4?offset=10,點擊第3頁,會發(fā)現(xiàn)URL變成了http://maoyan.com/board/4?offset=20,由此可以推斷出offset參數(shù)為偏移量,如果偏移量為n,則顯示電影序號就是n+1到n+10,每頁顯示10個,所以,如果想獲取TOP100電影,只需要分開請求10次,而10次的offset參數(shù)分別設(shè)置為0、10、20......90即可,這樣獲取不同的頁面之后,再用正則表達式提取出相關(guān)信息,就可以得到TOP100的所有電影信息了。獲取信息后,可以將信息寫入txt文件,當然可以存入數(shù)據(jù)庫(此處為了偷懶,就不存入數(shù)據(jù)庫了)。為了加快爬取網(wǎng)頁的速度,可以開啟循環(huán)和多線程(當需要爬取的信息很大時,這是一個不錯的技巧)。
下圖展示了具體的流程框架:
# 獲取單個頁面的HTML代碼 def get_one_page(url): try: # 此處如果不加headers進行偽裝,將會返回403錯誤(拒絕訪問) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" } response = requests.get(url, headers = headers) # 如果返回的狀態(tài)碼是200,表示請求正常,返回頁面HTML代碼 # 否則,返回None if response.status_code == 200: return response.text return None except RequestException: return None
接下來測試一下是否可以獲取頁面內(nèi)容:
if __name__ == "__main__": url = "http://maoyan.com/board/4" html = get_one_page(url) print(html)(2)正則表達式分析
可以對get_one_page(url)函數(shù)爬取的HTML代碼進行分析(此處為了方便觀看,直接在瀏覽器控制臺分析),利用正則表達式獲取到有用的信息(電影的排名、名字、電影封面圖片、主演、上映時間、貓眼評分)。
# 解析單個頁面的HTML代碼,利用re模塊提取出有效信息 def parse_one_page(html): # re.S:表示“.”的作用擴展到整個字符串,包括“ ” pattern = re.compile("
接下來測試一下是否可以得到我們想要的內(nèi)容:
if __name__ == "__main__": url = "http://maoyan.com/board/4" html = get_one_page(url) items = parse_one_page(html) for item in items: print(item)
控制臺輸出如下:
單個頁面信息解析正確,那么,想要獲得多個頁面的信息,只需寫一個循環(huán)遍歷即可:
def main(offset): url = "http://maoyan.com/board/4?offset=" + str(offset) html = get_one_page(url) for item in parse_one_page(html): print(item) if __name__ == "__main__": for i in range(10): main(i*10)(3)保存至文件
只需寫一個簡單的函數(shù)即可完成,但此處需要注意一點,為保證輸出文件為中文,在讀寫文件時要添加參數(shù)endcoding="utf-8"。
# 將解析出的內(nèi)容寫入文件 def write_to_file(content): # 添加endcoding="utf-8"確保輸出到文件中為中文 with open("result.txt", "a", encoding="utf-8 ") as f: # 此處建議將解析出的內(nèi)容編碼為json格式再寫入文件,json的好處在此不過多敘述 # 如果使用了json進行編碼,務(wù)必添加參數(shù)ensure_ascii=False確保編碼數(shù)據(jù)為中文 # json.dumps():編碼json數(shù)據(jù) f.write(json.dumps(content, ensure_ascii=False) + " ") f.close()
運行代碼,目標信息被寫入result.txt文件中:
(4)開啟循環(huán)及多線程為了加快頁面爬取速度,可以使用多線程(針對大量數(shù)據(jù)時非常有效)。
if __name__ == "__main__": pool = Pool() pool.map(main, [i*10 for i in range(10)])
項目完整代碼已托管到github:https://github.com/panjings/p...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42751.html
摘要:用迭代進行異步操作保存寫入文件配置啟動函數(shù)使用多進程加速一秒完成 用正則表達式實現(xiàn)一個簡單的小爬蟲 常用方法介紹 1、導(dǎo)入工具包 import requests #導(dǎo)入請求模塊 from flask import json #導(dǎo)入json模塊 from requests.exceptions import RequestException #異常捕捉模塊 import re #導(dǎo)入正則...
摘要:本文介紹利用庫庫和正則表達式爬取貓眼電影電影的相關(guān)信息,提取出電影名稱上映時間評分封面圖片等信息,將爬取的內(nèi)容寫入到文件中。獲取到不同的網(wǎng)頁后使用正則表達式提取出我們要的信息,就可以得到電影信息了,可以使用多線程加速爬取。 本文介紹利用Requests庫、multiprocessing庫和正則表達式爬取貓眼電影TOP100電影的相關(guān)信息,提取出電影名稱、上映時間、評分、封面圖片等信息,...
摘要:所以我們?nèi)绻氆@取電影,只需要分開請求次,而次的參數(shù)設(shè)置為,,,,即可,這樣我們獲取不同的頁面結(jié)果之后再用正則表達式提取出相關(guān)信息就可以得到的所有電影信息了。上一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)正則表達式下一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)解析庫的使用 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---26、正則表達式下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---28、解析庫的使用:XPath 本節(jié)我們利用 Reque...
摘要:時間永遠都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:作者周蘿卜鏈接長津湖貓眼影評歡迎關(guān)注,專注數(shù)據(jù)分析數(shù)據(jù)挖掘好玩工具對于這個十一黃金周的電影市場,絕對是長津湖的天下,短短幾天,票房就已經(jīng)突破億,大有奮起直追戰(zhàn)狼的盡頭。 ...
閱讀 2999·2023-04-25 21:23
閱讀 3042·2021-09-22 15:24
閱讀 870·2019-08-30 12:55
閱讀 2104·2019-08-29 18:42
閱讀 2615·2019-08-29 16:27
閱讀 955·2019-08-26 17:40
閱讀 2189·2019-08-26 13:29
閱讀 2614·2019-08-26 11:45