一、目標站點分析html
首先打開瀏覽器(谷歌)、輸入maoyan.com進入貓眼電影的官網、找到榜單下的TOP100榜、右鍵單擊打開檢查或者直接按F12打開、點擊左上角鼠標圖標,點擊第一名霸王別姬,咱們發現每一個<dd>標籤都包含一個視頻的信息(img(圖片),每一個<p>標籤分別包含視頻名class=「name」、主演class=「star」、上映時間class=「releasetime」和評分(評分是有兩個<i>標籤拼接起來的,class分別爲integer和fraction),總體結構比較清晰正則表達式
二、流程框架json
三、爬蟲實戰:瀏覽器
打開pycharm,點擊左上角File—NewProject,新建名爲maoyanTOP100多線程
在maoyanTOP100目錄下新建一個spider.py文件,進入spider.py框架
詳細步驟解析已註釋,源代碼以下:ide
import requests#d導入requests模塊 from multiprocessing import Pool#進程池 from requests.exceptions import RequestException#用於異常處理 import json import re#導入正則表達式 headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36' } def get_one_page(url):#請求單頁內容的方法 try: response = requests.get(url,headers=headers)#用requests.get請求url if response.status_code == 200:#判斷,若是請求到的狀態碼==200(請求成功) return response.text#返回網頁內容 return None#若是是其餘狀態碼返回None except RequestException: return None def parse_one_page(html):#解析單頁內容 pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?src="(.*?)".*?name"><a'+'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>' +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)#編寫正則表達式 items = re.findall(pattern,html)#應用已編好的正則表達式 for item in items:#遍歷 yield { '排名':item[0], '圖片地址': item[1], '標題': item[2], '主演': item[3].strip()[3:], '上映時間': item[4].strip()[5:], '評分': item[5]+item[6] } def write_to_file(content):#將爬取結果保存到resuli.txt with open('result.txt','a',encoding='utf-8') as f: f.write(json.dumps(content,ensure_ascii=False)+'\n') f.close() 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) write_to_file(item) if __name__=="__main__": pool = Pool()#構造進程池 pool.map(main,[i*10 for i in range(10)])#爬取多頁