最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+Selenium實現(xiàn)短視頻熱點爬取

 更新時間:2022年04月26日 08:31:50   作者:小六公子  
隨著短視頻的大火,不僅可以給人們帶來娛樂,還有熱點新聞時事以及各種知識,刷短視頻也逐漸成為了日常生活的一部分。本文將通過Pyhton依托Selenium來爬取短視頻熱點,需要的可以參考一下

隨著短視頻的大火,不僅可以給人們帶來娛樂,還有熱點新聞時事以及各種知識,刷短視頻也逐漸成為了日常生活的一部分。本文以一個簡單的小例子,簡述如何通過Pyhton依托Selenium來爬取短視頻,僅供學(xué)習(xí)分享使用,如有不足之處,還請指正。

涉及知識點

1.selenium,作為瀏覽器端一個自動化測試工具,可以模擬用戶操作瀏覽器的動作,就像是人自己操作瀏覽器一樣。關(guān)于selenium的具體信息如下

  • Selenium進(jìn)行元素定位,主要有ID,Name,ClassName,Css Selector,Partial LinkText,LinkText,XPath,TagName等8種方式。
  • Selenium獲取單一元素(如:find_element)和獲取元素數(shù)組(如:find_elements)兩種方式。
  • Selenium元素定位后,可以給元素進(jìn)行賦值和取值,或者進(jìn)行相應(yīng)的事件操作(如:click)。

2.requests,web請求對象,通過selenium獲取到視頻的url后,再通過requests庫進(jìn)行視頻流的獲取,然后保存成本地視頻文件。

3.瀏覽器開發(fā)者工具,通過開發(fā)者工具可以查看頁面上某一個按鈕或鏈接等頁面元素對應(yīng)的html標(biāo)識。

目標(biāo)分析

在爬取視頻之前,需要分析目標(biāo)結(jié)構(gòu),本視頻爬取分析可分為三步,具體如下所示:

1. 分析熱榜目錄

熱榜目錄是一個ul標(biāo)簽,每一個熱榜對象一個li子標(biāo)簽,分別包含熱度,標(biāo)題等內(nèi)容。點擊標(biāo)題鏈接可以進(jìn)入具體視頻播放頁面,目標(biāo)分析如下所示:

2.分析視頻播放頁面

視頻在video標(biāo)簽中播放,短視頻播放的真實地址,在video的source子標(biāo)簽中,且為了保證播放質(zhì)量,video下有三個source,任取其一即可,如下所示:

3. 分析彈出框

在爬取過程中,經(jīng)過彈出需要登錄的窗口,需要及時關(guān)閉掉,否則可能會導(dǎo)致找不到頁面元素,從而爬取不成功。如下所示:

核心代碼

經(jīng)過以上分析,就可以編寫爬蟲代碼了,如下所示:

1. 遍歷熱點目錄

通過獲取頁面上對應(yīng)的信息,解析出熱點視頻的目錄,如下所示:

self.__driver.get(self.__url)
self.close_popup_window()
# 4. 最大化窗口
self.__driver.maximize_window()
time.sleep(self.__wait_sec)
# 打開以后,根據(jù)class=BHgRhxNh獲取ul下的li
if self.checkIsExistsByClass(cls='BHgRhxNh'):
    # 獲取
    hots = self.__driver.find_elements(by=By.CLASS_NAME, value='BHgRhxNh')
    hot_infos = []
    index = 0
    for hot in hots:
        hot_info = {}
        a = hot.find_element(by=By.TAG_NAME, value='a')
        href = a.get_attribute("href")
        text = a.text
        hot_info['url'] = href
        hot_info['text'] = text
        if index > 0:
            div = hot.find_element(by=By.CLASS_NAME, value='GsuT_hjh')
            if div is not None:
                hot_value = div.find_element(by=By.TAG_NAME, value='span').text
                hot_info['value'] = hot_value
        hot_infos.append(hot_info)
        index = index + 1
    print(hot_infos)

2. 獲取真實短視頻url

打開單個熱點視頻的url,并解析真實短視頻播放url,如下所示:

def open_video_html(self, url):
    """打開具體視頻的頁面"""
    self.__driver.get(url=url)
    time.sleep(1)
    self.close_popup_window()  # 關(guān)閉彈窗
    video = self.__driver.find_element(by=By.TAG_NAME, value='video')
    source = video.find_element(by=By.TAG_NAME, value='source')
    src = source.get_attribute('src')
    return src

3. 下載視頻

獲取真實的url后,即可進(jìn)行下載,如下所示:

def download_video(self, url, video_name):
    """根據(jù)視頻源地址進(jìn)行下載"""
    if os.path.exists(video_name):
        # 如果已重新下載過,則不需要再次下載
        return
    else:
        with open(video_name, 'wb') as fp:
            fp.write(requests.get(url).content)

4. 關(guān)閉彈出的登錄窗口

在爬取過程中,經(jīng)常彈出需要登錄的遮罩窗口,需要進(jìn)行關(guān)閉,如下所示:

def close_popup_window(self):
    try:
        login = self.__driver.find_element(by=By.ID, value='login-pannel')
        if login is not None:
            login.find_element(by=By.CLASS_NAME, value='dy-account-close').click()
    except BaseException as e:
        pass
    try:
        login = self.__driver.find_element(by=By.CLASS_NAME, value='GaDkStRD')
        if login is not None:
            btns = login.find_elements(by=By.TAG_NAME, value='button')
            for btn in btns:
                if btn.text == '取消':
                    btn.click()
                    break
    except BaseException as e:
        pass

5. 保存日志

在爬取成功后,對爬取的短視頻的相關(guān)內(nèi)容進(jìn)行保存,如下所示:

def save_data(self, hot_infos):
    """
    保存數(shù)據(jù)
    :param res_list: 保存的內(nèi)容文件
    :return:
    """
    t = time.strftime("%Y-%m-%d", time.localtime())
    with open(f'logs[{t}].json', 'a', encoding='utf-8') as f:
        res_list_json = json.dumps(hot_infos, ensure_ascii=False)
        f.write(res_list_json)

示例截圖

程序開發(fā)完成后,運(yùn)行示例如下所示:

爬取的視頻保存在download目錄下,如下所示:

總結(jié)

 為什么會采用selenium進(jìn)行本次短視頻的爬取,而不直接采用requests庫,原因如下:

  • 在對目標(biāo)網(wǎng)站進(jìn)行分析的過程中,發(fā)現(xiàn)目標(biāo)網(wǎng)站采用異步調(diào)用的方式數(shù)據(jù)獲取,即網(wǎng)址請求獲取的只是空殼,并沒有真實的數(shù)據(jù)。
  • 在對異步接口調(diào)用的url進(jìn)行分析時發(fā)現(xiàn),很多接口的url都具有時效性及有效性驗證,如token,時間戳等,構(gòu)造起來相當(dāng)麻煩。

由于以上兩點原因,結(jié)合selenium的特點及優(yōu)勢,所以最終采用selenium進(jìn)行此次爬蟲的最佳選擇。

以上就是Python+Selenium實現(xiàn)短視頻熱點爬取的詳細(xì)內(nèi)容,更多關(guān)于Python Selenium熱點爬取的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用memory_profiler監(jiān)測python代碼運(yùn)行時內(nèi)存消耗方法

    使用memory_profiler監(jiān)測python代碼運(yùn)行時內(nèi)存消耗方法

    今天小編就為大家分享一篇使用memory_profiler監(jiān)測python代碼運(yùn)行時內(nèi)存消耗方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python數(shù)據(jù)分析之公交IC卡刷卡分析

    python數(shù)據(jù)分析之公交IC卡刷卡分析

    這篇文章主要介紹了python數(shù)據(jù)分析之公交IC卡,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python求兩個文本文件以行為單位的交集、并集與差集的方法

    Python求兩個文本文件以行為單位的交集、并集與差集的方法

    這篇文章主要介紹了Python求兩個文本文件以行為單位的交集、并集與差集的方法,涉及Python文本文件與集合運(yùn)算的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 對python csv模塊配置分隔符和引用符詳解

    對python csv模塊配置分隔符和引用符詳解

    今天小編就為大家分享一篇對python csv模塊配置分隔符和引用符詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python設(shè)計模式行為型責(zé)任鏈模式

    Python設(shè)計模式行為型責(zé)任鏈模式

    這篇文章主要介紹了Python設(shè)計模式行為型責(zé)任鏈模式,責(zé)任鏈模式將能處理請求的對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理請求為止,避免請求的發(fā)送者和接收者之間的耦合關(guān)系,下圍繞改內(nèi)容介紹具有一點的參考價值,需要的朋友可以參考下
    2022-02-02
  • Jmeter如何使用BeanShell取樣器調(diào)用Python腳本

    Jmeter如何使用BeanShell取樣器調(diào)用Python腳本

    這篇文章主要介紹了Jmeter使用BeanShell取樣器調(diào)用Python腳本,文章圍繞Jmeter調(diào)用Python腳本的相關(guān)詳情展開標(biāo)題內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • Python導(dǎo)包模塊報錯的問題解決

    Python導(dǎo)包模塊報錯的問題解決

    這篇文章主要介紹了Python導(dǎo)包模塊報錯的問題解決,文章圍繞主題相關(guān)內(nèi)容詳細(xì)介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • python+PyQt5 左右聲道測試源代碼

    python+PyQt5 左右聲道測試源代碼

    這篇文章主要介紹了python+PyQt5 左右聲道測試源代碼,左聲道,人機(jī)交互測試,點擊右邊聽到的對應(yīng)序號按鈕,對python左右聲道測試感興趣的朋友一起看看吧
    2024-02-02
  • python?包(模塊?函數(shù)?類?定義?導(dǎo)入)使用詳解

    python?包(模塊?函數(shù)?類?定義?導(dǎo)入)使用詳解

    這篇文章主要為大家介紹了python?包(模塊?函數(shù)?類?定義?導(dǎo)入)的使用詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 分享十個Python提高工作效率的自動化腳本

    分享十個Python提高工作效率的自動化腳本

    在這個自動化時代,我們有很多重復(fù)無聊的工作要做。 想想這些你不再需要一次又一次地做的無聊的事情,讓它自動化,讓你的生活更輕松。本文分享了10個Python自動化腳本,希望對大家有所幫助
    2022-10-10

最新評論

桐梓县| 隆德县| 马公市| 乐陵市| 墨竹工卡县| 昭觉县| 永州市| 江口县| 桦甸市| 南川市| 疏附县| 临江市| 金沙县| 南乐县| 瓮安县| 哈尔滨市| 石景山区| 南陵县| 安溪县| 闻喜县| 南华县| 甘南县| 三亚市| 罗源县| 中卫市| 嘉义县| 伊吾县| 互助| 容城县| 南岸区| 库车县| 翼城县| 民丰县| 都江堰市| 博白县| 临西县| 大城县| 龙井市| 莱芜市| 三门峡市| 怀仁县|