selenium之爬取梨视频

一、前言

之前学了requests库,正跃跃欲试打算去随便爬一些东西时,发现梨视频网站的视频利用requests完全没办法爬取,使用开发者完全搜索不到视频的连接网站,虽然有一个阿贾克斯请求里面包含的字典中有一个MP4连接,但是对那个阿贾克斯请求的url发请求获取的字典里面关于超链接地址的全部找不到,且即使找到了那个MP4连接访问后也是404错误。以其中一个视频为例。


image.png

该MP4超链接返回的是404,且该阿贾克斯的url访问后也得不到这个MP4超链接。


image.png

二、selenium模拟浏览器获取页面信息

后来学了selenium后发现通过该库模拟浏览器爬取页面信息后可以获取MP4的超链接。


image.png

于是尝试的对梨视频的视频文件进行下载,代码如下:

import requests
from lxml import etree
from selenium import webdriver

if __name__ == '__main__':
    #进行头部信息伪装
    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'
    }
    url = 'https://www.pearvideo.com/category_8'
    #获取科技页面中最新的视频所包含的网站的li列表
    page_text = requests.get(url=url,headers=headers).text
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//*[@id="listvideoListUl"]/li')
    #print(li_list)

    #生成一个浏览器对象
    option = webdriver.ChromeOptions()
    option.binary_location = 'E:\\Google Chrome浏览器\\Google\\Chrome\\Application\\chrome.exe'
    bro = webdriver.Chrome(executable_path=r'E:\chrome浏览器驱动程序\chromedriver_win32\chromedriver', options=option)

    for li in li_list:
        #对li列表循环获取每个最新视频的url
        deta_url = 'https://www.pearvideo.com/' + li.xpath('./div/a/@href')[0]
        name = li.xpath('./div/a/div[2]/text()')[0] + '.mp4'
        #利用浏览器对象访问每个视频页面
        bro.get(deta_url)
        # page_source获取视频页面源码数据
        page_text_mp4 = bro.page_source
        #生成etree对象来进行xpath解析
        tree = etree.HTML(page_text_mp4)
        #提取页面数据中的MP4连接
        mp4_url = tree.xpath('//*[@id="JprismPlayer"]/video/@src')[0]
        #获取MP4的二进制数据并存储
        mp4_rar = requests.get(url=mp4_url,headers=headers).content
        with open(name,'wb') as fp:
            fp.write(mp4_rar)
            print(name,'爬取成功!!')
    #关闭浏览器对象
    bro.quit()

上面的代码只爬取了一个页面四个视频,如果要爬取更多则需要加一个循环即可。

你可能感兴趣的:(selenium之爬取梨视频)