豆瓣Top250電影爬取

2022-09-07 07:33:07 字數 4301 閱讀 7393

from bs4 import beautifulsoup  # 網頁解析,獲取資料

import re # 正規表示式,進行文字匹配

import urllib.request, urllib.error # 制定url,獲取網頁資料

import xlwt # 進行excel操作

import sqlite3 # 進行sqlite資料庫操作

def main():

baseurl = ""

# 1.爬取網頁

datalist = getdata(baseurl)

s**epath = "豆瓣電影top250.xls"

dbpath = "movie.db"

# 3.儲存資料

#s**edata(datalist,s**epath)

s**edata2db(datalist, dbpath)

# 影片詳情鏈結的規則

findlink = re.compile(r'') # 建立正規表示式物件,表示規則(字串的模式)

# 影片

findimgsrc = re.compile(r'(.*)')

# 影片評分

findrating = re.compile(r'(.*)')

# 找到評價人數

findjudge = re.compile(r'(\d*)人評價')

# 找到概況

findinq = re.compile(r'(.*)')

findbd = re.compile(r'(.*?)

', re.s)

# 得到指定乙個url的網頁內容

def askurl(url):

head =

# 使用者**,表示告訴豆瓣伺服器,我們是什麼型別的機器、瀏覽器(本質上是告訴瀏覽器,我們可以接收什麼水平的檔案內容)

request = urllib.request.request(url, headers=head)

html = ""

try:

response = urllib.request.urlopen(request)

html = response.read().decode("utf-8")

# print(html)

except urllib.error.urlerror as e:

if hasattr(e, "code"):

print(e.code)

if hasattr(e, "reason"):

print(e.reason)

return html

# 爬取網頁

def getdata(baseurl):

datalist =

for i in range(0, 10): # 呼叫獲取頁面資訊的函式,10次

url = baseurl + str(i * 25)

html = askurl(url) # 儲存獲取到的網頁原始碼

# 2.逐一解析資料

soup = beautifulsoup(html, "html.parser")

for item in soup.find_all('div', class_="item"): # 查詢符合要求的字串,形成列表

# print(item) #測試:檢視電影item全部資訊

data = # 儲存一部電影的所有資訊

item = str(item)

# 影片詳情的鏈結

link = re.findall(findlink, item)[0] # re庫用來通過正規表示式查詢指定的字串

imgsrc = re.findall(findimgsrc, item)[0]

titles = re.findall(findtitle, item) # 片名可能只有乙個中文名,沒有外國名

if (len(titles) == 2):

ctitle = titles[0] # 新增中文名

otitle = titles[1].replace("/", "") # 去掉無關的符號

else:

rating = re.findall(findrating, item)[0]

judgenum = re.findall(findjudge, item)[0]

inq = re.findall(findinq, item)

if len(inq) != 0:

inq = inq[0].replace("。", "") # 去掉句號

else:

bd = re.findall(findbd, item)[0]

bd = re.sub('

(\s+)?', " ", bd) # 去掉

bd = re.sub('/', " ", bd) # 替換/

return datalist

.xl檔案儲存
def s**edata(datalist, s**epath):

print("s**e....")

book = xlwt.workbook(encoding="utf-8", style_compression=0) # 建立workbook物件

sheet = book.add_sheet('豆瓣電影top250', cell_overwrite_ok=true) # 建立工作表

for i in range(0, 8):

sheet.write(0, i, col[i]) # 列名

for i in range(0, 250):

print("第%d條" % (i + 1))

data = datalist[i]

for j in range(0, 8):

sheet.write(i + 1, j, data[j]) # 資料

book.s**e(s**epath) # 儲存

資料庫儲存
def s**edata2db(datalist, dbpath):

init_db(dbpath)

conn = sqlite3.connect(dbpath)

cur = conn.cursor()

for data in datalist:

for index in range(len(data)):

if index == 4 or index == 5:

continue

data[index] = '"' + data[index] + '"'

sql = '''

insert into movie250 (

info_link,pic_link,cname,ename,score,rated,instroduction,info)

values(%s)''' % ",".join(data)

print(sql)

cur.execute(sql)

conn.commit()

cur.close()

conn.close()

def init_db(dbpath):

sql = '''

create table movie250

(id integer primary key autoincrement,

info_link text,

pic_link text,

cname varchar,

ename varchar,

score numeric ,

rated numeric ,

instroduction text,

info text

)''' # 建立資料表

conn = sqlite3.connect(dbpath)

cursor = conn.cursor()

cursor.execute(sql)

conn.commit()

conn.close()

if __name__ == "__main__":  # 當程式執行時

# 呼叫函式

main()

print("爬取完畢!")

爬取豆瓣電影TOP250

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

python爬取豆瓣電影top250

簡要介紹 爬取豆瓣電影top250上相關電影的資訊,包括影片鏈結 影片名稱 上映時間 排名 豆瓣評分 導演 劇情簡介。使用 requests etree xpath 1 檢視網頁資訊,確定爬取的內容,建立資料庫 class spiderdata peewee.model url peewee.cha...

爬取豆瓣Top250

requests庫可以自動爬取html頁面,自動網路請求提交。安裝方法 pip install requests requests庫主要有7個方法 首先開啟網頁 豆瓣top250 然後f12,得到如下圖 我們要找的內容在紅框裡面。這個頁面有25個電影,第乙個頁面 第二個頁面 我們可以觀察到 每個頁面...