requests庫 正規表示式爬取貓眼電影

2021-09-25 17:59:07 字數 3297 閱讀 5932

我們用 requests 庫 + 正規表示式構建乙個簡陋的爬蟲,雖然這個爬蟲很簡陋,但是通過這個例子我們可以對爬蟲有乙個很好的了解。

這次目的是爬取貓眼電影 top 100,要想爬取這些資訊,我們首先要到貓眼電影 top 100 的頁面上觀察一下(也可以說踩點)。**為:

這就是我們要爬取的頁面,現在我們來寫一段**自動訪問這個頁面。

def get_one_pages(url) -> 'html':

headers =

response = requests.get(url, headers=headers)

if response.status_code == 200: # 網頁訪問正常

return response.text

return none

我們構造了get_one_pages(url) 函式,在構造這個函式時要注意一定要加上表頭,表頭的作用是讓爬蟲偽裝成乙個正常的瀏覽器請求。如果不加表頭的話,會被伺服器拒絕訪問(不信你就試一下)。之後當你呼叫這個函式並往裡面傳入 url 也就是 時,該函式會把這個網頁的 html 返回下來。html 算是網頁的源**,在 chrome 瀏覽器中按下 f12 鍵就能看到源**,發現返回的 html 與網頁中的 html 一樣,那麼證明我們這個網頁算是訪問成功了。

以這段標籤為例,我們需要獲取的內容有排名、電影海報、電影名稱、演員和上映時間。這時該輪到正規表示式出場了。我們用正規表示式去匹配這段文字,來獲取想要的資訊,如果你現在還不知道什麼是正規表示式,可以 google 一下,正規表示式的內容很複雜,但這裡我們用到的很簡單,一搜就會。

下面是解析網頁的**:

def parse_one_page(html) -> list:

pattern = re.compile('.*?>(.*?).*?

', re.s)

res = re.findall(pattern, html)

for i in res:

yield

我們用 .*?>(.*?).*?這段正規表示式來匹配想要的內容,然後將匹配的結果存入乙個字典中,為了以後方便讀取和儲存。

下一步我們把爬到的內容儲存下來,否則一旦關閉程式,所有爬取的內容就會消失,白忙一頓豈不是很難受。

def write_to_file(content):

with open('result.txt', 'a', encoding='utf-8') as f:

f.write(json.dumps(content, ensure_ascii=false) + '\n')

我們用上下文管理器開啟乙個 txt 檔案,將爬下來的內容寫入這個檔案中。

我們的目標是爬取貓眼電影 top 100,可是現在才爬到 top 10,那後面的怎麼辦呢?再來觀察網頁,我們看到,第11-20的url為:?offset=10

第21-30的url為:?offset=20 ,以此類推。。。

那麼我們可以推斷出來網頁的變化只跟offset= 後面數字有關,這樣可以繼續寫**了。

def main(offset):

url = '' + str(offset)

html = get_one_pages(url)

content = parse_one_page(html)

for i in content:

print(i)

write_to_file(i)

這裡寫了乙個 main(offset) 函式,傳入相應的數字,會對相應的網頁進行我們之前的操作。

最後一步,傳入數字即可。總結一下最終的**:

import requests

import re

import json

def get_one_pages(url) -> 'html':

headers =

response = requests.get(url, headers=headers)

if response.status_code == 200: # 網頁訪問正常

return response.text

return none

def parse_one_page(html) -> list:

pattern = re.compile('.*?>(.*?).*?

', re.s)

res = re.findall(pattern, html)

for i in res:

yield

def write_to_file(content):

with open('result.txt', 'a', encoding='utf-8') as f:

f.write(json.dumps(content, ensure_ascii=false) + '\n')

def main(offset):

url = '' + str(offset)

html = get_one_pages(url)

content = parse_one_page(html)

for i in content:

print(i)

write_to_file(i)

for i in range(10):

main(i*10)

這樣就可以將貓眼電影 top 100 爬取下來,並作為乙個 txt 檔案儲存,我們來看看結果:

很不錯,就是我們期待的結果。

通過這麼乙個簡陋的爬蟲程式,我們對爬蟲已經有了乙個大致的了解,如果想要爬取到更多有用的內容,僅僅這樣還是遠遠不夠的,希望你能在爬蟲路上越爬越遠。

以上內容素材**於崔慶才《python 3網路爬蟲開發實戰》。

爬蟲學習 Requests 正規表示式爬取貓眼電影

p14 requests 正規表示式import requests from requests.exceptions import requestexception def get one page url try headers response requests.get url,headers ...

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...