抓取豆瓣電影Top250影評資料

2021-10-01 13:20:41 字數 2539 閱讀 7687

我們先觀察豆瓣電影top250任意一頁的url位址的格式。先觀察第二頁。

豆瓣top page2

熟悉了url格式,下面用urllib庫試著抓取頁面內容

我們以物件導向的編碼方式編寫這個頁面抓取程式。定義乙個類名movietop,在類中定義乙個初始化方法和乙個獲取頁面的方法。

我們把一些基本資訊和引數初始化放在類的初始化中,即init方法。另外,獲取頁面的方法,我們需要知道從第幾條記錄開始查詢、每次查詢多少條記錄。在這個方法中需要乙個迴圈,通過迴圈抓取需要的記錄。:

#! /usr/bin/python3

#-*- coding:utf-8 -*-

from urllib import request

import re

class movietop(object):

def __init__(self):

self.start=0

self.param='&filter='

self.headers=

def get_page(self):

page_content=

try:

while self.start<=225:

url=''+str(self.start)

req=request.request(url,headers=self.headers)

response=request.urlopen(req)

page=response.read().decode('utf-8')

page_num=(self.start+25)//25

print('正在抓取第'+str(page_num)+'頁資料...')

self.start+=25

return page_content

except request.urlerror as e:

if hasattr(e,'reason'):

print('抓取失敗,失敗原因:',e.reason)

def main(self):

print('開始從豆瓣電影抓取資料......')

a=self.get_page()

print('資料抓取完畢...')

在這個初步構建的程式中,我們只指定了一些資料爬取引數,對於爬取的資料並沒有做任何處理,也沒有儲存爬取資料。該程式可以校驗該爬蟲是否可以正常執行。

當前我們抓取的資料中有許多html格式的文字,需要將其過濾。

python中的re模組為我們提供了乙個compile函式,該函式可以幫我們把正規表示式語法轉化為正規表示式物件。

html_text='導演:馮小剛

'reobj=re.compile(u'導演:(.*?)

.*?')

print(reobj.findall(html_text))

執行結果:

['馮小剛']
乙個更複雜的示例:

html_text='導演:陳凱歌 kaige chen   '\

'主演:張國榮 leslie cheung/ 張豐毅 fengyi zha…

'\ '1993 / 中國大陸 香港 / 劇情 愛情

'#s='740137人評價'

reobj1=re.compile(u'導演:(.*?)'

+u'   (.*?)

' +u'(.*?) / (.*?)'

+u' / (.*?)

.*?')

print(reobj.findall(html_text))

程式執行結果:

[('陳凱歌 kaige chen', '主演:張國榮 leslie cheung/ 張豐毅 fengyi zha…', '1993', '中國大陸 香港', '劇情 愛情')]
在movietop類中,我們可以通過這種方式從一長串雜亂的html文字中提取一些精煉的資訊。:

def get_movie_info(set):

pattern=re.compile(u'.*?'……)

……

寫入檔案的過程很簡單;

file_top=open(self.file_path,'w',encoding='utf-8')

file_top.write(obj)

我們編寫乙個方法專門用於檔案的寫入操作,使得程式物件導向化。在movietop類中定義乙個方法;

def write_text(self):

print('開始向檔案寫入資料……')

file_top=open(self.file_path,'w',encoding='utf-8')

……

scrapy抓取豆瓣電影TOP250

scrapy入門級的學習 關於scrapy學習的要點 1 css選擇器選擇元素 scrapy提供css和xpath兩種選擇器來提取html元素,因為我對css更熟,這裡用的就是css。2 對item和pipeline的理解 item是存放資料的容器,pipline用來處理抓取後放在item中的資料。...

python爬蟲豆瓣top250電影,評分,評論等

import requests from bs4 import beautifulsoup def get movies movie list for i in range 0,10 link str i 25 r requests.get link,headers headers,timeout ...

爬取豆瓣電影TOP250

利用css選擇器對電影的資訊進行爬取 import requests import parsel import csv import time import re class cssspider def init self self.headers defget dp self,url respon...