爬蟲 爬取貓眼TOP100

2022-08-27 14:54:10 字數 3688 閱讀 1184

原文崔慶才《python3網路爬蟲實戰》

目標:熟悉正規表示式,以及爬蟲流程

獲取貓眼top100榜單

1、**分析

目標站點為需要獲取**top100榜單的影片名稱、主演、上映時間、地區、評分等資訊都直接顯示在network對應的response中,可解析對應的html進行獲取。且從第1頁到第二頁,url變成比之前多了引數offset=10,對比第2頁第3頁發現該引數即為翻頁引數。

2、獲取首頁

實現步驟:定義get_one_page()方法,傳入url引數,將抓取的頁面結果返回,通過main()方法呼叫。

# 首頁

import requests

def get_one_page(url):

# 輸入headers資訊偽裝為瀏覽器

headers =

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

if response.status_code ==200:

return response.text

return none

def main():

url = ''

html = get_one_page(url)

print(html)

main()

即可把response中的html資訊獲取下來

2、正則提取

一部電影資訊對應的源**是乙個dd的節點

html = '''

1霸王別姬

主演:張國榮,張豐毅,鞏俐

9.5

'''

獲取排名資訊

import re

result = re.search('.*?board-index.*?>(.*?)', html, re.s)

print(result.group(1))

獲取電影

tp = re.search('.*?data-src="(.*?)@.*?c"',html, re.s)
獲取電影名稱

mc = re.search('.*?name">.*?>(.*?)',html,re.s)
獲取主演

zy = re.search('.*?star">(.*?)

',html,re.s)

獲取發布時間

fb = re.search('.*?releasetime">(.*?)

', html ,re.s)

獲取評分

pf = re.search('.*?integer">(.*?).*?fraction">(.*?)',html,re.s)
全部鏈結起來

.*?board-index.*?>(.*?).*?data-src="(.*?)@.*?c.*?name">.*?>(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?integer">(.*?).*?fraction">(.*?)

這樣乙個正規表示式可以匹配乙個電影的結果,裡面匹配了7個資訊,接下來通過findall() 方法提取所有的內容。

def parse_one_page(html):

# 把正規表示式編譯成乙個正規表示式物件,方便復用

pattern = re.compile(

'.*?board-index.*?>(.*?).*?data-src="(.*?)@.*?c.*?name">.*?>(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?integer">(.*?).*?fraction">(.*?)',

re.s

)items = re.findall(pattern, html)

print(items)

def main1():

html = '''

1霸王別姬

主演:張國榮,張豐毅,鞏俐

9.5

'''items = parse_one_page(html)

print(items)

main1()

結果

3、寫入檔案

通過json庫的jumps()實現字典的序列化,並指定ensure_ascii引數為false ,保證輸出結果是中文,而不是unicode編碼

def write_to_file(content):

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

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

4、分頁爬取

if __name__=='__main__':

for i in range(10):

main(offset=i*10)

5、整合**

# 抓去首頁

import requests

import re

import json

import time

from requests.exceptions import requestexception

def get_one_page(url):

try:

headers =

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

if response.status_code ==200:

return response.text

return none

except requestexception:

return none

def parse_one_page(html):

pattern = re.compile(

'.*?board-index.*?>(.*?).*?data-src="(.*?)@.*?c.*?name">.*?>(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?integer">(.*?).*?fraction">(.*?)',

re.s

)items = re.findall(pattern, html)

for item in items:

yield

def write_to_file(content):

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

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

def main(offset):

url = '?offset=' + str(offset)

html = get_one_page(url)

for item in parse_one_page(html):

print(item)

write_to_file(item)

if __name__=='__main__':

for i in range(10):

main(offset=i*10)

time.sleep(1)

結果:

爬取貓眼TOP100

學完正則的乙個小例子就是爬取貓眼排行榜top100的所有電影資訊 看一下網頁結構 可以看出要爬取的資訊在標籤和標籤中間 正規表示式如下 pattern re.compile board index.data src name.a.star releasetime integer fraction r...

爬取貓眼top100

導入庫 json用於讀取和寫入檔案 requests請求html requestexception用於獲取requests錯誤 time定義時間 re正規表示式 import json import requests from requests.exceptions import requestex...

python爬蟲爬取貓眼電影Top100

很早就對爬蟲有所耳聞,於是乎就在網上買了一本python爬蟲的書,在學習的過程中也想做一些筆記與大家分享分享,勿噴 2.1.貓眼電影top100 2.2.f12開啟控制台,在response中找到需要的頁面資訊 如圖 2.3.發現每一部電影都是乙個dd標籤,我們需要爬取它的排名 位址 電影名稱 主演...