python爬蟲爬取貓眼電影Top100

2021-08-29 23:44:05 字數 3679 閱讀 6763

很早就對爬蟲有所耳聞,於是乎就在網上買了一本python爬蟲的書,在學習的過程中也想做一些筆記與大家分享分享,勿噴

2.1. 貓眼電影top100:

2.2. f12開啟控制台,在response中找到需要的頁面資訊

如圖

2.3. 發現每一部電影都是乙個dd標籤,我們需要爬取它的排名、位址、電影名稱、主演名單、上映時間以及評分。排名資訊就在class為board-index的i節點內,使用非貪婪(.*?)來提取i節點內的資訊

.*?board-index.*?>(.*?)
2.4. 接下來就是提取電影鏈結,經過檢查第二個img節點的data-src屬性是鏈結,正則如下

.*?board-index.*?>(.*?).*?data-src="(.*?)"
2.5.再往後就是提取電影的名稱,它在下面的p節點內,class為name,用name做乙個標誌位,進一步提取a節點中的正文內容,如下

.*?board-index.*?>(.*?).*?data-src="(.*?)".*?name.*?a.*?>(.*?)
2.6.最後提取主演、發布時間、評分都是以此類推

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

.*?releasetime.*?>(.*?)

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

import requests,re

from requests.exceptions import requestexception

#定義乙個爬取首頁的函式

def get_one_page(url):

#做出異常處理

try:

headers =

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

#在這裡做了乙個判斷,如果響應的狀態碼是200,說明有內容,返回獲取的內容

if response.status_code == 200:

return response.text

return none

except requestexception:

return none

#定義乙個提取首頁排行資訊的函式

def parse_one_page(html):

patten = re.compile(

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

.*?releasetime.*?>(.*?)

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

re.s) #由於頁面中有換行,所以在正則匹配的過程中為了避免匹配不到完整的資訊,使用re.s匹配到換行

items = re.findall(patten, html)

for item in items: #遍歷結果並生成字典

yield

#主函式

def main():

url = ''

html = get_one_page(url)

for result in parse_one_page(html):

print(result)

main()

結果

4.1.分析

每一頁都有十部電影,在換頁會發現url的變化,

第二頁:?offset=10,

第三頁:?offset=20,

很明顯是10的倍數

下面我就直接放整個**了,不囉嗦了

import requests,re,json,time

from requests.exceptions import requestexception

def get_one_page(url):

#做出異常處理

try:

headers =

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

#在這裡做了乙個判斷,如果響應的狀態碼是200,說明有內容,返回獲取的內容

if response.status_code == 200:

return response.text

return none

except requestexception:

return none

def parse_one_page(html):

patten = re.compile(

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

.*?releasetime.*?>(.*?)

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

re.s) #由於頁面中有換行,所以在正則匹配的過程中為了避免匹配不到完整的資訊,使用re.s匹配到換行

items = re.findall(patten, html)

for item in items: #遍歷結果並生成字典

yield

def write_to_file(content):

with open('result.txt','a',encoding='utf-8') as f: #爬取資訊寫入文字

# print(type(json.dumps(content)))

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

def main(offset):

url = '?offset='+str(offset) #構造乙個引數offset

html = get_one_page(url)

for result in parse_one_page(html):

print(result)

write_to_file(result)

if __name__ == '__main__':

for i in range(10):

main(offset=i*10)

time.sleep(1)

結果

至此,貓眼電影top100資訊爬取完畢

python爬蟲 爬取貓眼電影資料

定義乙個函式獲取貓眼電影的資料 import requests def main url url html requests.get url text print html if name main main 利用正則匹配,獲得我們想要的資訊 dd i class board index board...

python爬蟲基礎爬取貓眼電影

import requests from requests.exceptions import requestexception from sqlalchemy import create engine from lxml import etree import pandas as pd impor...

Python爬取貓眼電影

不多說,直接上 import requests import re import random import pymysql import time 連線資料庫 db pymysql.connect host localhost port 3306,user root passwd a db pyt...