溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python爬蟲(chóng)運(yùn)用正則表達(dá)式的方法和優(yōu)缺點(diǎn)

發(fā)布時(shí)間:2020-08-19 21:14:27 來(lái)源:腳本之家 閱讀:177 作者:Charzueus 欄目:開(kāi)發(fā)技術(shù)

前言

我看到最近幾部電影很火,查了一下貓眼電影上的數(shù)據(jù),發(fā)現(xiàn)還有個(gè)榜單,里面有各種經(jīng)典和熱映電影的排行榜,然后我覺(jué)得電影封面圖還挺好看的,想著一張一張下載真是費(fèi)時(shí)費(fèi)力,于是突發(fā)奇想,好像可以用一下最近學(xué)的東西實(shí)現(xiàn)我的需求,學(xué)習(xí)了正則表達(dá)式之后,想著要感受一下它在爬蟲(chóng)里面的效果和優(yōu)缺點(diǎn)。

目標(biāo):爬取Top100榜單上電影的封面圖

Top100榜單規(guī)則:將貓眼電影庫(kù)中的經(jīng)典影片,按照評(píng)分和評(píng)分人數(shù)從高到低綜合排序取前100名,每天上午10點(diǎn)更新。相關(guān)數(shù)據(jù)來(lái)源于“貓眼電影庫(kù)”。

下面是我做的步驟:

(1)查看頁(yè)面元素,找到包含圖片的路徑的代碼段落

(2)分析圖片在web上面的唯一屬性,便于之后獲取正確圖片位置信息

(3)因?yàn)樾枰?yè),觀察多個(gè)頁(yè)面的URL變化

(4)綜合以上幾個(gè)點(diǎn),編寫合適的正則表達(dá)式

 1、python 標(biāo)準(zhǔn)庫(kù)中re模塊提供了正則表達(dá)式的全部功能,直接引入;requests模塊是http庫(kù),爬蟲(chóng)常用庫(kù),而urllib.requests 則是最后用到寫入文件的函數(shù)

import re
import requests
import urllib.request

2、先接收URL地址的HTML頁(yè)面,然后轉(zhuǎn)化為str形式(正則表達(dá)式是匹配字符串),第一個(gè)pattern1縮小范圍,抓取目標(biāo)部分,result1接收匹配的結(jié)果,這時(shí)候所有封面圖地址就在里面了

response = requests.get(url)
response = str(response.content)
patttern1 = '<dl class="board-wrapper">.+?<div class="pager-main">'
result1 = re.compile(pat).findall(response)

3、第二個(gè)正則,匹配圖片的地址信息

pat2 = '<img data-src="https://(.+?\.jpg)'
photos = re.compile(pat1).findall(re1[0])

這時(shí)候爬取到100張圖的信息,如下圖:

Python爬蟲(chóng)運(yùn)用正則表達(dá)式的方法和優(yōu)缺點(diǎn)

 4、繼續(xù)下一步,把每張圖片命名好,需要正確的圖片地址,避免重復(fù) 

x = 1
for imgurl in name:
 imgname = 'D:/Top 100/'+str(i/10)+str(x)+'.jpg'
 imgurl = 'https://'+imgurl
 urllib.request.urlretrieve(imgurl,filename=imgname)
 x += 1

 5、最后一步了,因?yàn)樾枰?yè)爬取,所以加了一個(gè)循環(huán),10頁(yè)內(nèi)容爬取下來(lái)

for i in range(0, 100, 10):
  url = 'http://maoyan.com/board/4?offset='+str(i)
  get_one_page(url, i)
  #定義函數(shù),多次調(diào)用

相對(duì)來(lái)說(shuō),這是一個(gè)很簡(jiǎn)單的應(yīng)用,也是自己學(xué)習(xí)之后的實(shí)踐,在這個(gè)例子中,我是用到正則表達(dá)式來(lái)實(shí)現(xiàn)的,還有其他方法,而且可能簡(jiǎn)單,比如BeautifulSoup,XPath等方法,用在更加復(fù)雜的爬蟲(chóng)項(xiàng)目里面,需要的知識(shí)更多,方法更嚴(yán)謹(jǐn),還需學(xué)習(xí)學(xué)習(xí)!

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI