鎮(zhèn)江網(wǎng)站建設(shè)yubei021快速建站哪個(gè)平臺(tái)好
這是棲落的電影網(wǎng)站地址:https://xxx.xxx
進(jìn)入網(wǎng)頁(yè),顯示:
?爬取目標(biāo):電影的名稱、觀影人數(shù)和評(píng)分。
易知本網(wǎng)站的url
url = "https://xxx.xxx"
本網(wǎng)站會(huì)識(shí)別出headers中的python請(qǐng)求而拒絕訪問(wèn),所以需要更改headers當(dāng)中的信息
user-agent:
?Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/11.0.1587.41
對(duì)應(yīng)的代碼為:
headers = {
? ? "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/11.0.1587.41"
}?
選中目標(biāo)
?利用正則表達(dá)式匹配相應(yīng)的信息。
obj = re.compile(r'<li>.*?標(biāo)志1.*?標(biāo)志2.*?標(biāo)志1.*?標(biāo)志2.*?標(biāo)志1.*?標(biāo)志2.*?</li>',re.S)
紅色的.*?匹配需要的信息,其余的過(guò)濾掉多余的信息,各個(gè)標(biāo)志為.*?的左右端的關(guān)鍵信息,r為requests模塊返回的text文本。?
并且我們需要為匹配的信息賦予相應(yīng)的意義,即名、觀影人數(shù)和評(píng)分。
利用(?<別名>)
obj = re.compile(r'<li>.*?標(biāo)志1(?P<name>.*?)標(biāo)志2.*?標(biāo)志1(?P<num>.*?)標(biāo)志2.*?標(biāo)志1<?P<score>.*?)標(biāo)志2.*?</li>',re.S)
把匹配的對(duì)象放入list中以便遍歷。
result = obj.finditer(r)
遍歷且以一定格式輸出。
?for it in result:
? ? print("{:<10s}{:<5s{<5s}".format(it.group("name"),it.group("num"),it.group("score")))
參考代碼:?
import requests
import re#獲取頁(yè)面信息
url = "https://xxx.xxx"
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/11.0.1587.41"
}
r = requests.get(url,headers=headers)
r = r.text
#print(r)
#解析頁(yè)面
obj = re.compile(r'<li>.*?<span class="title">(?P<name>.*?)</span>.*?<br>(?P<num>.*?) .*?<span class="rating_num" property="v:average">(?P<score>.*?)</li>',re.S)
#匹配
result = obj.finditer(r)
#輸出
for it in result:print("{:<10s}{:<5s{<5s}".format(it.group("name"),it.group("num"),it.group("score")))
輸出結(jié)果:?
小結(jié):?
如何爬取本站?
- 確定url
- 更改headers
- 請(qǐng)求頁(yè)面信息
- 正則匹配
- 輸出
提問(wèn) :
re.compile是啥?
compile 函數(shù)用于編譯正則表達(dá)式,生成一個(gè)正則表達(dá)式( Pattern )對(duì)象。
語(yǔ)法格式如下:re.compile(pattern,[flags])
參數(shù):
pattern : 一個(gè)字符串形式的正則表達(dá)式
flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數(shù)為:
- re.I :忽略大小寫
- re.L :表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
- re.M :多行模式
- re.S :即為 . 并且包括換行符在內(nèi)的任意字符(. 不包括換行符)
- re.U :表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫(kù)
- re.X :為了增加可讀性,忽略空格和 # 后面的注釋
?finditer是啥?
finditer 返回一個(gè)可迭代對(duì)象