1. 程式人生 > >Python網路爬蟲:利用正則表示式爬取豆瓣電影top250排行前10頁電影資訊

Python網路爬蟲:利用正則表示式爬取豆瓣電影top250排行前10頁電影資訊

在學習了幾個常用的爬取包方法後,轉入爬取實戰。
爬取豆瓣電影早已是練習爬取的常用方式了,網上各種程式碼也已經很多了,我可能現在還在做這個都太土了,不過沒事,畢竟我也才剛入門……
這次我還是利用正則表示式進行爬取,怎麼說呢,有人說寫正則表示式很麻煩,很多人都不願意用正則表示式了,不過正則表示式是我第一個學習的爬取方式,也是我最有感覺的一種方法了,我也喜愛用這種方法,當然我現在的正則表示式寫的肯定還不是很漂亮、精簡,這個以後再去精益求精吧,當然,這裡的正則表示式也是我自己寫的,可能會有點醜,大家可以再去完善吧
言歸正傳,我這次爬取了豆瓣電影排行top250,共爬取了10頁電影資訊,並將這些爬取資訊進行簡單的資料清洗,最後寫入一個本地的txt檔案中。
其實我的這段程式碼可以爬取任意頁數的電影資訊,換句話說這裡的10可以隨心所欲的改,想爬多少是多少(我想這也是爬蟲的魅力所在啊),當然當然肯定不能超過上限啦~

話不多說啦,上我的碼,這個碼可真的是原創啊,自己寫的,尤其是正則表示式,改了很多次才有這個結果哦~堅決不做程式碼搬運工哦~

import requests
import re
p=0//列印頁碼
with open('mov.txt','w',encoding='utf-8') as f://寫入名為mov的txt檔案,由於我的檔案預設是GBK,所以這裡轉為utf-8
    for i in range(10)://這裡抓取前10頁
        url='https://movie.douban.com/top250?start='+str(i*25)//翻頁迴圈設定:通過對start賦值以25的倍數
        html=requests.get(url).text
pattern=re.compile('<li.*?hd.*?title">(.*?)</span>.*?<p.*?>(.*?);&nbsp;&nbsp;(.*?)<br>(.*?)&nbsp;/&nbsp;(.*?)&nbsp;/&nbsp;(.*?)</p>.*?average">(.*?)</span>.*?inq">(.*?)</span>.*?</li>',re.S)//正則表示式的書寫 results=re.findall(pattern,html) print
(results)//列印了一下 list=str(results) for st in results://由於結果為以元組為元素的列表,每個元組又包含6個元素,分別進行列印,同時運用strip()進行資料清洗,再加上換行符進行格式化儲存 f.write(st[0]+'\n'+st[1].strip()+'\n'+st[2]+'\n'+st[3].strip()+'\n'+st[4]+'\n'+st[5].strip()+'\n'+'評分:'+st[6]+'\n--*---*---*---\n') f.close()

開啟txt:
這裡寫圖片描述

最後還要附一個知識點:
我把爬取結果寫入txt檔案裡,由於新檔案的預設編碼是gbk,這樣的話,python直譯器會用gbk編碼去解析我們的網路資料流txt,然而txt此時已經是decode過的unicode編碼,這樣的話就會導致解析不了,出現上述問題。 解決的辦法就是,改變目標檔案的編碼:

複製程式碼程式碼如下:

f = open(“out.html”,”w”,encoding=’utf-8’)
注:參考自部落格園https://www.cnblogs.com/themost/p/6603409.html
謝謝這篇對我們學習很有用的部落格,希望我的部落格也能在之後,哪怕是某個深夜,對某顆求學的心,起到一點點幫助……….加油↖(^ω^)↗