Python爬蟲實現熱門電影信息采集

一、前言

好不容易女神喊我去看電影,但是她又不知道看啥,那麼我當然得準備準備~

二、前期準備

1、使用的軟件

python 3.8 開源 免費的 (統一 3.8)

Pycharm YYDS python最好用的編輯器 不接受反駁…

2、需要用的模塊

requests >>> 數據請求模塊 pip install requests

parsel   >>> 數據解析模塊 pip install parsel

csv

3、模塊安裝問題

模塊安裝問題:

1)、如何安裝python第三方模塊:

第一種:win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車。

第二種:在pycharm中點擊Terminal(終端) 輸入安裝命令

2)安裝失敗原因:

第一種: pip 不是內部命令

解決方法: 設置環境變量

第二種: 出現大量報紅 (read time out)

解決方法: 因為是網絡鏈接超時, 需要切換鏡像源。

清華:https://pypi.tuna.tsinghua.edu.cn/simple
阿裡雲:http://mirrors.aliyun.com/pypi/simple/
中國科技大學 https://pypi.mirrors.ustc.edu.cn/simple/
華中理工大學:http://pypi.hustunique.com/
山東理工大學:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
例如:pip3 install -i https://pypi.doubanio.com/simple/ 模塊名

第三種: cmd裡面顯示已經安裝過瞭, 或者安裝成功瞭, 但是在pycharm裡面還是無法導入。

解決方法: 可能安裝瞭多個python版本 (anaconda 或者 python 安裝一個即可) 卸載一個就好,或者你pycharm裡面python解釋器沒有設置好。

4、如何配置pycharm裡面的python解釋器?

如何配置pycharm裡面的python解釋器?

  1. 選擇file(文件) >>> setting(設置) >>> Project(項目) >>> python interpreter(python解釋器)
  2. 點擊齒輪, 選擇add
  3. 添加python安裝路徑

5、pycharm如何安裝插件?

  1. 選擇file(文件) >>> setting(設置) >>> Plugins(插件);
  2. 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation;
  3. 選擇相應的插件點擊 install(安裝) 即可;
  4. 安裝成功之後 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效;

三、思路

爬蟲獲取數據是要分析服務器返回的數據內容,無論你爬取任何網站數據,都是可以按照這個幾步驟來。

1、明確需求

我們要爬取的內容是什麼 https://movie.douban.com/top250,要分析我們的想要數據, 可以從哪裡獲取/哪裡來的… (數據來源分析)

用開發者工具進行抓包(數據包)分析,靜態網頁/網頁上面看到的數據內容,在網頁源代碼裡面都有。

2、發送請求

開發者工具裡面headers ,對於那個網址發送請求,發送什麼樣的請求,攜帶那些請求頭參數。

3、獲取數據

獲取服務器返回的數據內容,看服務器數據格式是什麼樣的,或者說我們想要的數據是什麼樣的;

獲取文本數據 response.text

獲取服務器json字典數據 response.json()

獲取二進制數據 response.content

保存視頻/音頻/圖片/特定格式的文件內容, 都是獲取二進制數據;

4、解析數據

提供我們想要的數據內容

5、保存數據

保存本地

四、代碼部分 

import requests  # 數據請求模塊 pip install requests
import parsel  # 數據解析模塊 pip install parsel
import csv  # 保存表格數據

f = open('豆瓣數據.csv', mode='a', encoding='utf-8', newline='')
# 快速批量替換 全選內容 使用正則表達式 替換內容
csv_writer = csv.DictWriter(f, fieldnames=[
    '電影名字',
    '導演',
    '主演',
    '年份',
    '國傢',
    '電影類型',
    '評論人數',
    '評分',
    '概述',
    '詳情頁',
])
csv_writer.writeheader()
for page in range(0, 250, 25):
    url = f'https://movie.douban.com/top250?start={page}&filter='
    # headers 請求頭 用來偽裝python代碼 為瞭防止爬蟲程序被服務器識別出來,
    # User-Agent 瀏覽器的基本標識 用戶代理 直接復制粘貼的
    #Python學習交流群872937351 ,免費領取視頻/電子書/解答等等
    # 披著羊皮的狼  爬蟲程序 >>> 狼  headers >>> 羊皮  服務器數據 >>> 羊圈
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
    }
    # 發送請求 get
    # 通過requests數據請求模塊裡面get請求方法 對於 url以及發送請求並且攜帶header請求頭, 最後用response變量接收返回數據
    response = requests.get(url=url, headers=headers)
    # 獲取數據
    # print(response.text)
    # 解析數據 re正則表達式 css選擇器 xpath 那一種更方便 更加舒服 就用哪一個
    # json 鍵值對取值
    # 提取我們想要的數據內容
    # 把獲取下來的 response.text 網頁字符串數據 轉成selector 對象
    selector = parsel.Selector(response.text)
    # <Selector xpath=None data='<html lang="zh-CN" class="ua-windows ...'> 對象    # css選擇器 根據標簽屬性提取數據
    # 第一次解析數據, 獲取所有li標簽
    lis = selector.css('.grid_view li')  # css選擇器語法
    # selector.xpath('//*[@class="grid_view"]/li') # xpath寫法
    # [] 列表, 如果說我想要一一提取列表裡面的元素 怎麼做?
    for li in lis:
        try:
            # span:nth-child(1) 組合選擇器  表示的選擇第幾個span標簽
            # 1 選擇第一個span標簽 text 獲取標簽文本數據
            title = li.css('.hd a span:nth-child(1)::text').get()
            href = li.css('.hd a::attr(href)').get()  # 詳情頁
            # li.xpath('//*[@class="hd"]/a/span(1)/text()').get()
            # get返回字符串數據 getall 是返回列表數據
            # get獲取第一個標簽數據 getall 獲取所有的
            move_info = li.css('.bd p::text').getall()
            actor_list = move_info[0].strip().split('   ')  # 列表索引位置取值
            # print(actor_list)
            date_list = move_info[1].strip().split('/')  # 列表索引位置取值
            director = actor_list[0].replace('導演: ', '').strip()  # 導演
            actor = actor_list[1].replace('主演: ', '').replace('/', '').replace('...', '') # 演員
            date = date_list[0].strip()  # 年份
            country = date_list[1].strip()  # 國傢
            move_type = date_list[2].strip()  # 電影類型
            comment = li.css('.star span:nth-child(4)::text').get().replace('人評價', '')  # 評論人數
            star = li.css('.star span:nth-child(2)::text').get()  # 星級
            world = li.css('.inq::text').get()  # 概述
            # 字符串的高級方法
            # replace() 字符串替換的方法  strip() 去除字符串左右兩端的空格 split() 分割 之後返回的列表
            # 字符串如何去除空格呢?
            # print(title, actor_list, date_list)
            dit = {
                '電影名字': title,
                '導演': director,
                '主演': actor,
                '年份': date,
                '國傢': country,
                '電影類型': move_type,
                '評論人數': comment,
                '評分': star,
                '概述': world,
                '詳情頁': href,
            }
            csv_writer.writerow(dit)
            print(title, director, actor, date, country, move_type, comment, star, world, href, sep=' | ')
        except:
            pass

到此這篇關於Python爬蟲實現熱門電影信息采集的文章就介紹到這瞭,更多相關Python爬蟲采集信息內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: