溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python+Selenium怎么實現短視頻熱點爬取

發布時間:2022-04-26 10:04:49 來源:億速云 閱讀:322 作者:iii 欄目:開發技術

本篇內容介紹了“Python+Selenium怎么實現短視頻熱點爬取”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    涉及知識點

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

    • Selenium進行元素定位,主要有ID,Name,ClassName,Css Selector,Partial LinkText,LinkText,XPath,TagName等8種方式。

    • Selenium獲取單一元素(如:find_element)和獲取元素數組(如:find_elements)兩種方式。

    • Selenium元素定位后,可以給元素進行賦值和取值,或者進行相應的事件操作(如:click)。

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

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

    目標分析

    在爬取視頻之前,需要分析目標結構,本視頻爬取分析可分為三步,具體如下所示:

    1. 分析熱榜目錄

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

    Python+Selenium怎么實現短視頻熱點爬取

    2.分析視頻播放頁面

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

    Python+Selenium怎么實現短視頻熱點爬取

    3. 分析彈出框

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

    Python+Selenium怎么實現短視頻熱點爬取

    核心代碼

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

    1. 遍歷熱點目錄

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

    self.__driver.get(self.__url)
    self.close_popup_window()
    # 4. 最大化窗口
    self.__driver.maximize_window()
    time.sleep(self.__wait_sec)
    # 打開以后,根據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()  # 關閉彈窗
        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后,即可進行下載,如下所示:

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

    4. 關閉彈出的登錄窗口

    在爬取過程中,經常彈出需要登錄的遮罩窗口,需要進行關閉,如下所示:

    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. 保存日志

    在爬取成功后,對爬取的短視頻的相關內容進行保存,如下所示:

    def save_data(self, hot_infos):
        """
        保存數據
        :param res_list: 保存的內容文件
        :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)

    示例截圖

    程序開發完成后,運行示例如下所示:

    Python+Selenium怎么實現短視頻熱點爬取

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

    Python+Selenium怎么實現短視頻熱點爬取

    “Python+Selenium怎么實現短視頻熱點爬取”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女