溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python爬蟲(chóng)怎么實(shí)現(xiàn)熱門(mén)電影信息采集

發(fā)布時(shí)間:2021-12-06 16:09:05 來(lái)源:億速云 閱讀:164 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Python爬蟲(chóng)怎么實(shí)現(xiàn)熱門(mén)電影信息采集”,在日常操作中,相信很多人在Python爬蟲(chóng)怎么實(shí)現(xiàn)熱門(mén)電影信息采集問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”P(pán)ython爬蟲(chóng)怎么實(shí)現(xiàn)熱門(mén)電影信息采集”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

一、前言

好不容易女神喊我去看電影,但是她又不知道看啥,那么我當(dāng)然得準(zhǔn)備準(zhǔn)備~

Python爬蟲(chóng)怎么實(shí)現(xiàn)熱門(mén)電影信息采集

二、前期準(zhǔn)備

1、使用的軟件

python 3.8 開(kāi)源 免費(fèi)的 (統(tǒng)一 3.8)

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

2、需要用的模塊

requests >>> 數(shù)據(jù)請(qǐng)求模塊 pip install requests

parsel   >>> 數(shù)據(jù)解析模塊 pip install parsel

csv

3、模塊安裝問(wèn)題

模塊安裝問(wèn)題:

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

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

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

2)安裝失敗原因:

第一種: pip 不是內(nèi)部命令

解決方法: 設(shè)置環(huán)境變量

第二種: 出現(xiàn)大量報(bào)紅 (read time out)

解決方法: 因?yàn)槭蔷W(wǎng)絡(luò)鏈接超時(shí), 需要切換鏡像源。

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

第三種: cmd里面顯示已經(jīng)安裝過(guò)了, 或者安裝成功了, 但是在pycharm里面還是無(wú)法導(dǎo)入。

解決方法: 可能安裝了多個(gè)python版本 (anaconda 或者 python 安裝一個(gè)即可) 卸載一個(gè)就好,或者你pycharm里面python解釋器沒(méi)有設(shè)置好。

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

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

  1. 選擇file(文件) >>> setting(設(shè)置) >>> Project(項(xiàng)目) >>> python interpreter(python解釋器)

  2. 點(diǎn)擊齒輪, 選擇add

  3. 添加python安裝路徑

5、pycharm如何安裝插件?

  1. 選擇file(文件) >>> setting(設(shè)置) >>> Plugins(插件);

  2. 點(diǎn)擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation;

  3. 選擇相應(yīng)的插件點(diǎn)擊 install(安裝) 即可;

  4. 安裝成功之后 是會(huì)彈出 重啟pycharm的選項(xiàng) 點(diǎn)擊確定, 重啟即可生效;

三、思路

爬蟲(chóng)獲取數(shù)據(jù)是要分析服務(wù)器返回的數(shù)據(jù)內(nèi)容,無(wú)論你爬取任何網(wǎng)站數(shù)據(jù),都是可以按照這個(gè)幾步驟來(lái)。

1、明確需求

我們要爬取的內(nèi)容是什么 https://movie.douban.com/top250,要分析我們的想要數(shù)據(jù), 可以從哪里獲取/哪里來(lái)的… (數(shù)據(jù)來(lái)源分析)

用開(kāi)發(fā)者工具進(jìn)行抓包(數(shù)據(jù)包)分析,靜態(tài)網(wǎng)頁(yè)/網(wǎng)頁(yè)上面看到的數(shù)據(jù)內(nèi)容,在網(wǎng)頁(yè)源代碼里面都有。

2、發(fā)送請(qǐng)求

開(kāi)發(fā)者工具里面headers ,對(duì)于那個(gè)網(wǎng)址發(fā)送請(qǐng)求,發(fā)送什么樣的請(qǐng)求,攜帶那些請(qǐng)求頭參數(shù)。

3、獲取數(shù)據(jù)

獲取服務(wù)器返回的數(shù)據(jù)內(nèi)容,看服務(wù)器數(shù)據(jù)格式是什么樣的,或者說(shuō)我們想要的數(shù)據(jù)是什么樣的;

獲取文本數(shù)據(jù) response.text

獲取服務(wù)器json字典數(shù)據(jù) response.json()

獲取二進(jìn)制數(shù)據(jù) response.content

保存視頻/音頻/圖片/特定格式的文件內(nèi)容, 都是獲取二進(jìn)制數(shù)據(jù);

4、解析數(shù)據(jù)

提供我們想要的數(shù)據(jù)內(nèi)容

5、保存數(shù)據(jù)

保存本地

四、代碼部分 

import requests  # 數(shù)據(jù)請(qǐng)求模塊 pip install requests
import parsel  # 數(shù)據(jù)解析模塊 pip install parsel
import csv  # 保存表格數(shù)據(jù)

f = open('豆瓣數(shù)據(jù).csv', mode='a', encoding='utf-8', newline='')
# 快速批量替換 全選內(nèi)容 使用正則表達(dá)式 替換內(nèi)容
csv_writer = csv.DictWriter(f, fieldnames=[
    '電影名字',
    '導(dǎo)演',
    '主演',
    '年份',
    '國(guó)家',
    '電影類(lèi)型',
    '評(píng)論人數(shù)',
    '評(píng)分',
    '概述',
    '詳情頁(yè)',
])
csv_writer.writeheader()
for page in range(0, 250, 25):
    url = f'https://movie.douban.com/top250?start={page}&filter='
    # headers 請(qǐng)求頭 用來(lái)偽裝python代碼 為了防止爬蟲(chóng)程序被服務(wù)器識(shí)別出來(lái),
    # User-Agent 瀏覽器的基本標(biāo)識(shí) 用戶代理 直接復(fù)制粘貼的
    #Python學(xué)習(xí)交流群872937351 ,免費(fèi)領(lǐng)取視頻/電子書(shū)/解答等等
    # 披著羊皮的狼  爬蟲(chóng)程序 >>> 狼  headers >>> 羊皮  服務(wù)器數(shù)據(jù) >>> 羊圈
    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'
    }
    # 發(fā)送請(qǐng)求 get
    # 通過(guò)requests數(shù)據(jù)請(qǐng)求模塊里面get請(qǐng)求方法 對(duì)于 url以及發(fā)送請(qǐng)求并且攜帶header請(qǐng)求頭, 最后用response變量接收返回?cái)?shù)據(jù)
    response = requests.get(url=url, headers=headers)
    # 獲取數(shù)據(jù)
    # print(response.text)
    # 解析數(shù)據(jù) re正則表達(dá)式 css選擇器 xpath 那一種更方便 更加舒服 就用哪一個(gè)
    # json 鍵值對(duì)取值
    # 提取我們想要的數(shù)據(jù)內(nèi)容
    # 把獲取下來(lái)的 response.text 網(wǎng)頁(yè)字符串?dāng)?shù)據(jù) 轉(zhuǎn)成selector 對(duì)象
    selector = parsel.Selector(response.text)
    # <Selector xpath=None data='<html lang="zh-CN" class="ua-windows ...'> 對(duì)象    # css選擇器 根據(jù)標(biāo)簽屬性提取數(shù)據(jù)
    # 第一次解析數(shù)據(jù), 獲取所有l(wèi)i標(biāo)簽
    lis = selector.css('.grid_view li')  # css選擇器語(yǔ)法
    # selector.xpath('//*[@class="grid_view"]/li') # xpath寫(xiě)法
    # [] 列表, 如果說(shuō)我想要一一提取列表里面的元素 怎么做?
    for li in lis:
        try:
            # span:nth-child(1) 組合選擇器  表示的選擇第幾個(gè)span標(biāo)簽
            # 1 選擇第一個(gè)span標(biāo)簽 text 獲取標(biāo)簽文本數(shù)據(jù)
            title = li.css('.hd a span:nth-child(1)::text').get()
            href = li.css('.hd a::attr(href)').get()  # 詳情頁(yè)
            # li.xpath('//*[@class="hd"]/a/span(1)/text()').get()
            # get返回字符串?dāng)?shù)據(jù) getall 是返回列表數(shù)據(jù)
            # get獲取第一個(gè)標(biāo)簽數(shù)據(jù) 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('導(dǎo)演: ', '').strip()  # 導(dǎo)演
            actor = actor_list[1].replace('主演: ', '').replace('/', '').replace('...', '') # 演員
            date = date_list[0].strip()  # 年份
            country = date_list[1].strip()  # 國(guó)家
            move_type = date_list[2].strip()  # 電影類(lèi)型
            comment = li.css('.star span:nth-child(4)::text').get().replace('人評(píng)價(jià)', '')  # 評(píng)論人數(shù)
            star = li.css('.star span:nth-child(2)::text').get()  # 星級(jí)
            world = li.css('.inq::text').get()  # 概述
            # 字符串的高級(jí)方法
            # replace() 字符串替換的方法  strip() 去除字符串左右兩端的空格 split() 分割 之后返回的列表
            # 字符串如何去除空格呢?
            # print(title, actor_list, date_list)
            dit = {
                '電影名字': title,
                '導(dǎo)演': director,
                '主演': actor,
                '年份': date,
                '國(guó)家': country,
                '電影類(lèi)型': move_type,
                '評(píng)論人數(shù)': comment,
                '評(píng)分': star,
                '概述': world,
                '詳情頁(yè)': href,
            }
            csv_writer.writerow(dit)
            print(title, director, actor, date, country, move_type, comment, star, world, href, sep=' | ')
        except:
            pass

到此,關(guān)于“Python爬蟲(chóng)怎么實(shí)現(xiàn)熱門(mén)電影信息采集”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI