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