【爬蟲作業(yè)3】爬蟲實戰(zhàn):運用正則表達(dá)式爬取貓眼電影排行

1. 實戰(zhàn)任務(wù):運用正則表達(dá)式爬取貓眼電影排行

  • 爬取網(wǎng)站:https://maoyan.com/board/4
  • 爬取內(nèi)容:電影名稱(name),演員(actor),上映時間(year),評分(score)

2 實戰(zhàn)練習(xí)

2.1 爬蟲思路
  • 用requests庫get請求爬取相關(guān)信息,加入請求頭,防止被絆;
  • 用re庫對爬取的數(shù)據(jù)進(jìn)行篩選(主要使用findall方法,并添加re.S修飾符);
  • 爬取的數(shù)據(jù)進(jìn)行csv存儲;
  • 為防止被絆,代碼中加入time sleep(2),每爬取一次休息2s;
  • 由于進(jìn)行的是跨頁篩選,url找規(guī)律并使用循環(huán)語句,爬取信息策略封裝為1個小函數(shù),進(jìn)行循環(huán)爬取。
2.2 爬蟲步驟
## 利用正則表達(dá)式爬取貓眼電影排行(rank,name,actor,play_time,score)
# 導(dǎo)入庫,做好存儲預(yù)備工作
import requests
import re
import time
import csv

f = open('C:/Users/home/Desktop/2.csv','w+',encoding='utf-8',newline='')
writer = csv.writer(f)
writer.writerow(['rank','name','actor','play_time','score'])

# 加入請求頭,利用requests請求,爬取數(shù)據(jù)
headers = {
    'User-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}

# 利用findall方法篩選所需數(shù)據(jù),將該步驟封裝為函數(shù)get_info
def get_info(url):
    res = requests.get(url, headers=headers)
    ranks = re.findall('<i class="board-index board-index-.*?">(.*?)</i>',res.text,re.S)
    names = re.findall(' <a href="/films/.*?" title="(.*?)"',res.text,re.S)
    actors = re.findall('<p class="star">.*?主演:(.*?)</p>',res.text,re.S)
    play_times = re.findall('<p class="releasetime">上映時間:(.*?)</p>',res.text,re.S)
    scores = re.findall('<p class="score"><i class="integer">(.*?)</i><i class="fraction">(.*?)</i></p> ',res.text,re.S)
    for rank,name,actor,play_time,score in zip(ranks,names,actors,play_times,scores):
        writer.writerow([rank,name,actor.strip(),play_time,score[0]+score[1])

# # 設(shè)循環(huán)語句,循環(huán)爬取數(shù)據(jù),每次中斷2s防止被絆
if __name__ == '__main__':
    urls = ['https://maoyan.com/board/4?offset={}'.format(str(i)) for i in range(0,100,10)]
    for url in urls:
        get_info(url)
        time.sleep(2)
2.3 爬蟲結(jié)果
貓眼電影排行

4 學(xué)習(xí)心得

  • 照葫蘆畫瓢寫出了上述代碼,開始re庫篩選數(shù)據(jù)時有打印結(jié)果無問題,未去除多余內(nèi)容,score分整數(shù)和小數(shù)部分,也未作處理。
  • 處理對策:開始是url寫錯了,{}后多了一個/,所以導(dǎo)致獲取不到爬蟲結(jié)果。去除多余內(nèi)容方法actor.strip(),該方法在豆瓣爬蟲中未成功使用;小數(shù)合并方法使用字符串加法,score[0] + score[1]。
  • 爬蟲代碼寫好了,運行過程也未報錯,要仔細(xì)檢查每行代碼的正確性,確保都能print再一起運行。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容