豆瓣電影TOP250爬蟲及視覺化分析筆記

專注的阿熊發表於2021-11-09

"""

-*- coding: utf-8 -*-

@Time : 2021/11/7 下午 4:25

@Author : SunGuoqi

@Website :

@Github:

"""

import re

import time

import requests

from bs4 import BeautifulSoup

import pandas as pd

# 資料存放在列表裡

datas = []

# 遍歷十頁資料

for k in range(10):

     print(" 正在抓取第 {} 頁資料 ...".format(k + 1))

     url = ' + str(k * 25)

     headers = {

         'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'

     }

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

     soup = BeautifulSoup(r.text, 'lxml')

     # 查詢電影連結

     lists = soup.find_all('div', {'class': 'hd'})

     # 遍歷每條電影連結

     for item in lists:

         href = item.a['href']

         # 休息一下,防止被封

         time.sleep(0.5)

         # 請求每條電影,獲得詳細資訊

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

         # 把獲取好的電影資料打包成 BeautifulSoup 物件

         movie_soup = 外匯跟單gendan5.comBeautifulSoup(response.text, 'lxml')

         # 解析每條電影資料

         # 片名

         name = movie_soup.find('span', {'property': 'v:itemreviewed'}).text.split(' ')[0]

         # 上映年份

         year = movie_soup.find('span', {'class': 'year'}).text.replace('(', '').replace(')', '')

         # 評分

         score = movie_soup.find('strong', {'property': 'v:average'}).text

         # 評價人數

         votes = movie_soup.find('span', {'property': 'v:votes'}).text

         infos = movie_soup.find('div', {'id': 'info'}).text.split('\n')[1:11]

         # infos 返回的是一個列表,我們只需要索引提取就好了

         # 導演

         director = infos[0].split(': ')[1]

         # 編劇

         scriptwriter = infos[1].split(': ')[1]

         # 主演

         actor = infos[2].split(': ')[1]

         # 型別

         filmtype = infos[3].split(': ')[1]

         # 國家 / 地區

         area = infos[4].split(': ')[1]

         # 資料清洗一下

         if '.' in area:

             area = infos[5].split(': ')[1].split(' / ')[0]

             # 語言

             language = infos[6].split(': ')[1].split(' / ')[0]

         else:

             area = infos[4].split(': ')[1].split(' / ')[0]

             # 語言

             language = infos[5].split(': ')[1].split(' / ')[0]

         if ' 大陸 ' in area or ' 香港 ' in area or ' 臺灣 ' in area:

             area = ' 中國 '

         if ' 戛納 ' in area:

             area = ' 法國 '

         # 時長

         times0 = movie_soup.find(attrs={'property': 'v:runtime'}).text

         times = re.findall('\d+', times0)[0]

         # 將資料寫入列表

         datas.append({

             ' 片名 ': name,

             ' 上映年份 ': year,

             ' 評分 ': score,

             ' 評價人數 ': votes,

             ' 導演 ': director,

             ' 編劇 ': scriptwriter,

             ' 主演 ': actor,

             ' 型別 ': filmtype,

             ' 國家 / 地區 ': area,

             ' 語言 ': language,

             ' 時長 ( 分鐘 )': times

         })

         print(" 電影《 {0} 》已爬取完成 ...".format(name))

# 寫入到檔案

df = pd.DataFrame(datas)

df.to_csv("top250.csv", index=False, header=True, encoding='utf_8_sig')


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2841373/,如需轉載,請註明出處,否則將追究法律責任。

相關文章