用python爬取豆瓣前一百電影

2022-09-29 23:15:19 字數 2914 閱讀 9415

目錄

實現專案我們需要運用以下幾個知識點

一、獲取網頁

1.找網頁規律;

2.使用 for 迴圈語句獲得**前4頁的網頁鏈結;

3.使用 network 選項卡查詢headers資訊;

4.使用 requests.get() 函式帶著 headers 請求網頁。

二、解析網頁

1.使用 beautifulsoup 解析網頁;

2.使用 beautifulsoup 物件呼叫 find_all() 方法定位包含單部電影全部資訊的標籤;

3.使用 tag.text 提取序號、電影名、評分、推薦語;

4.使用 tag['屬性名'] 提取電影詳情鏈結。

三、儲存資料

1.使用 with open() as … 建立要寫入內容的 csv 檔案;

2.使用 csv.dictwriter() 將檔案物件轉換為 dictwriter 物件;

3.引數 fieldnames 用來設定 csv 檔案的表頭;

4.使用 writeheader() 寫入表頭;

5.使用 writerows() 將內容寫入 csv 檔案。

import csvimport requestsfrom bs4 import beautifulsoup# 設定列表,用以儲存每部電影的資訊data_list = # 設定請求頭headers = # 使用 for 迴圈遍歷取值範圍為 0~3 的資料for page_numbe程式設計客棧r in range(4): # 設定要請求的網頁鏈結 url = ''.format(page_number * 25) # 請求網頁 movies_list_res = requests.get(url, headers=headers) # 解析請求到的網頁內容 bs = beautifulsoup(movies_list_res.text, 'html.parser') # 搜尋網頁中所有包含單部電影全部資訊的 tag movies_list = bs.find_all('div', class_='item') # 使用 for 迴圈遍歷搜尋結果 for movie in movies_list: # 提取電影的序號 movie_num = movie.find('em').text # 提取電影名 movie_name = movie.find('span').text # 提取電影的評分 movie_score = movie.find("span",class_='rating_num').text # 提取電影的推薦語 movie_instruction = movie.find("span",class_='inq').text # 提取電影的鏈結 movie_link = movie.find('a')['href'] # 將資訊新增到字典中 movie_dict = # 列印電影的資訊 print(movie_dict) # 儲存每部電影的資訊 data_list.append(movie_dict)# 新建 csv 檔案,用以儲存電影資訊with open('movies.csv', 'w', encoding='utf-8-sig') as f: # 將檔案物件轉換成 dictwriter 物件 f_csv = csv.dictwriter(f, fieldnames=['序號', '電影名', '評分', '推薦語', '鏈結']) # 寫入表頭與資料 f_csv.writeheader() f_csv.writerows(data_list)

(1)通過觀察**一頁的電影數,可以發現一頁只有 25 部電影的資訊。

也就是說我們需要爬取**前4頁(100 = 25*4)的電影資訊。

這裡我們使用了遍歷,爬取前四頁的資料。

(2)通過快捷鍵開啟網頁的開發者工具(windows 使用者可以在瀏覽器頁面下按ctrl + shift + i鍵或者直接f12喚出瀏覽器開發者工具,mac 使用者的快捷鍵為command + option + i)。

接著使用開發者工具中的指標工具,大致檢視一下前兩部電影中,需爬取的資訊所在位置,觀察一下其中是否有什麼規律。

可以發現第一部電影裡序號、電影名、評分、推薦語以及詳情鏈結在class屬性值為"item"的標籤裡。

(3)豆瓣電影 top250 的 robots 協議

並沒有看到disallow: /top250,這說明可以對這個網頁進行爬取。

(4)在網際網路世界中,網路請求會將瀏覽器資訊儲存在請求頭(request header)當中。

只要我們將瀏覽器資訊複製下來,在爬蟲程式只要在發起請求時,設定好與請求頭對應的引數,即可成功偽裝成瀏覽器。

(5)**思路

1)熟練地使用開發者工具的指標工具,可以很方便地幫助我們定位資料。

2)用指標工具定位到各個資料所在位置後,檢視它們的規律。

3)想要提取的標籤如果具有屬性,可以使用 tag.find(html元素名, html屬性名='')來提取;沒有屬性的話,可以在這個標籤附近找到乙個有屬性的標籤,然後再進行 find() 提取。

通過上述步驟將資訊爬取下來後,就走到我們爬蟲的最後一步——儲存資料。

(6)儲存資料

1)呼叫 csv 模組中類 dictwriter 的語法sbcuezcpym為:csv.dictwriter(f, fieldnames)。語法中的引數 f 是 open() 函式開啟的檔案物件;引數 fieldnames 用來設定檔案的表頭;

2)執行csv.dictwriter(f, fieldnames)後會得到乙個 dictwriter 物件;

3)得到的 dictwriter 物件可以呼叫writeheader()方法,將 fieldnames 寫入 csv 的第一行;

4)最後,呼叫writerows()方法將多個字典寫進 csv 檔案中。

生成的csv檔案:

python爬蟲之scrapy爬取豆瓣電影(練習)

開發環境 windows pycharm mongodb scrapy 任務目標 任務目標 爬取 豆瓣電影top250 將資料儲存到mongodb中。items.py檔案 coding utf 8 define here the models for your scraped items see d...

Python爬取豆瓣動作電影好評前100名

usr bin env python coding utf 8 import urllib2 import json import re class dbspider object 豆瓣電影爬蟲 def init self 初始化請求引數 self.url self.headers defsend ...

python爬取豆瓣影評

看的別人的 爬取某部影片的影評 沒有模擬登入只能爬6頁 encoding utf 8 import requests from bs4 import beautifulsoup import re import random import io import sys import time 使用se...