python爬取豆瓣電影top250

2021-08-10 11:53:13 字數 4194 閱讀 3987

簡要介紹:

爬取豆瓣電影top250上相關電影的資訊,包括影片鏈結、影片名稱、上映時間、排名、豆瓣評分、導演、劇情簡介。

使用:requests、etree、xpath

1、檢視網頁資訊,確定爬取的內容,建立資料庫:

class 

spiderdata(peewee.model):

url = peewee.charfield(max_length=128

,verbose_name=u'

豆瓣鏈結

') moviename = peewee.charfield(max_length=64

,verbose_name=u'

電影名稱

') movieyear = peewee.charfield(max_length=8

,verbose_name=u'

放映日期

') movieator = peewee.charfield(max_length=32

,verbose_name=u'

電影導演

') moviescore = peewee.charfield(max_length=8

,verbose_name=u'

豆瓣評分

') movierank = peewee.charfield(max_length=12

,verbose_name=u'

豆瓣排名

') moviedes = peewee.charfield(max_length = 1000

,verbose_name=u'

電影描述

') class

meta:

database = db

檢視規則,每一頁**變化在於『start=

』字串後面數字,每頁電影為25,其後面跟的數字都是25的倍數。

獲取影片對應url**如下:

#

訪問**,可以看到其規律在於

'start='

後面值得變化,按照

25的倍數變化

url = ''.format(start)#使用

requests

模組獲取網頁資訊

request = requests.get(url,

headers=header)

content = request.content.decode('utf-8')

html = etree.html(content)#使用

xpath

all_url_list = html.xpath(u"//div[@class='info']/div[@class='hd']/a/@href")

4、以影片『肖申克的救贖』為例,進入對應詳情頁面,檢視相關元素:

#獲取排名

top_number = html2.xpath(u"//div[@class='top250']/span/text()")

if top_number:

movie = html2.xpath(u'//h1/span/text()')

#獲取電影名稱

movie_name = movie[0].encode('utf-8')

#上映時間

movie_year = movie[1]

#豆瓣評分

score = html2.xpath(u"//div[@class='rating_wrap clearbox']/div[@class='rating_self clearfix']/strong/text()")[0]

#導演daoyan = html2.xpath(u"//div[@id='info']/span/span[@class='attrs']/a/text()")[0].encode('utf-8')

#劇情簡介

conten = html2.xpath(u"//div[@id='link-report']/span/text()")[0].encode('utf-8')

5、以下為完整**(可以根據頁數取排名影片):

#coding:utf-8

from doubansql import spiderdata

import requests

from lxml import etree

'''爬取豆瓣電影

top250

'''header =

dbconn = spiderdata()

def

getspiderdata(page):

#豆瓣top250

,每頁25

部電影start_number = (int(page) - 1) * 25

start = 0

while start <= start_number:

#訪問**,可以看到其規律在於

'start='

後面值得變化,按照

25的倍數變化

url = ''.format(start)

#使用requests

模組獲取網頁資訊

request = requests.get(url,

headers=header)

content = request.content.decode('utf-8')

html = etree.html(content)

#使用xpath

all_url_list = html.xpath(u"//div[@class='info']/div[@class='hd']/a/@href")

for u in all_url_list:

request = requests.get(url=u,

headers = header)

content = request.content

html2 = etree.html(content)

#獲取排名

top_number = html2.xpath(u"//div[@class='top250']/span/text()")

if top_number:

movie = html2.xpath(u'//h1/span/text()')

#獲取電影名稱

movie_name = movie[0].encode('utf-8')

#上映時間

movie_year = movie[1]

#豆瓣評分

score = html2.xpath(u"//div[@class='rating_wrap clearbox']/div[@class='rating_self clearfix']/strong/text()")[0]

#導演daoyan = html2.xpath(u"//div[@id='info']/span/span[@class='attrs']/a/text()")[0].encode('utf-8')

#劇情簡介

conten = html2.xpath(u"//div[@id='link-report']/span/text()")[0].encode('utf-8')

dbconn.create(url=u,

moviename=movie_name,

movieyear=movie_year,

movieator=daoyan,

moviescore=score,

movierank=top_number,

moviedes=conten)

start += 25

if __name__ == '__main__':

getspiderdata(10)

6、最後儲存在資料庫中的效果如下:

爬取豆瓣top20電影

import requests from lxml import etree url for i in range 2 url format i 10 訪問目標 response requests.get url url 獲取頁面內容 text html response.text print ht...

爬取豆瓣電影TOP250

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

豆瓣Top250電影爬取

from bs4 import beautifulsoup 網頁解析,獲取資料 import re 正規表示式,進行文字匹配 import urllib.request,urllib.error 制定url,獲取網頁資料 import xlwt 進行excel操作 import sqlite3 進行...