Python爬虫_第三篇 动态网页(1)_好看视频 json

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-16 21:47   31   0

7、对动态网页好看视频进行爬虫,利用json模块解析数据,爬取多页视频

7.1 爬虫的一般思路

  • 分析目标网页,确定爬取的url路径,headers参数
  • 发送请求 --requests 模拟浏览器发送请求,获取响应数据
  • 解析数据 --json模块,把json字符串转化为python可交互的数据类型
  • 保存数据 --保存在目标文件夹中

7.2 好看视频下载分析

  • 判断网页是静态还是动态?
  • 如何下载单个网页中的视频?
  • 如何下载多个网页中的视频?

7.3 源代码

import requests
import json   # json是内置模块,不需要进行pip install

7.3.1 判断网页是静态还是动态?

利用ctrl+u 或者 右击,查看网页源代码,在源代码中检索ctrl+f 网页中信息,如检索到,则为静态网页,如检索不到,则为动态网页。

所以:好看视频是动态网页

7.3.2 获取动态网页的动态数据包

7.3.3 伪造请求头及获取动态数据包url

# 动态数据包的实际地址url
base_url='https://haokan.baidu.com/videoui/api/videorec?tab=gaoxiao&act=pcFeed&pd=pc&num=20&shuaxin_id=1595137580836'
'''
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
浏览器的标识/版本(window操作系统的参数)谷歌浏览器的版本及内核

'''
headers={'user_agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4',
         'cookie':'BIDUPSID=38A1339AB9DB3E403533B6DAC9A25100; PSTM=1593503342; BAIDUID=38A1339AB9DB3E4080915F2EFABD3F20:FG=1; BDUSS=MyUWtMQldqVmNRYW8tS00xbktLZXlKVlMzV1p0bGpwdTVaQ1lITzdIOW5VeXBmRVFBQUFBJCQAAAAAAAAAAAEAAAAhNQJW0rvR-bfot-jxsvGyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGfGAl9nxgJffl; hkpcvideolandquery=%u4F0A%u80FD%u9759%u5D29%u6E83%u5927%u54ED%uFF0C%u59D0%u59D0%u4EEC%u5404%u79CD%u5FAE%u8868%u60C5%u5F15%u70ED%u8BAE%uFF0C%u552F%u6709%u949F%u4E3D%u7F07%u4E3E%u52A8%u611F%u4EBA; BDRCVFR[mkUqnUt8juD]=mk3SLVN4HKm; BDRCVFR[8gzLr2xelNt]=IdAnGome-nsnWnYPi4WUvY; delPer=0; PSINO=1; H_PS_PSSID=1458_31253_32046_32230_32116_26350_32261; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BCLID=10710859748477330018; BDSFRCVID=lTkOJexroG3_5qRrLcVOulPXA3qMFyTTDYLEJs2qYShnrsPVJeC6EG0PtoWQkz--EHtdogKK0gOTH6KF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tR333R7oKRu_HRjYbb__-P4DeUvnaMRZ56bHWh0bXK5aV4os-pjc5tArW-LebxrlMGnnKUT13lc5h4jX0P7_KRtr346-35543bRTLn76LRv0Kj6HybOfhP-UyN3MWh37Je3lMKoaMp78jR093JO4y4Ldj4oxJpOJ5JbMopCafJOKHIClDT_53e; PC_TAB_LOG=haokan_website_page; Hm_lvt_4aadd610dfd2f5972f1efee2653a2bc5=1594459245,1594465977,1594951275,1595137250; Hm_lpvt_4aadd610dfd2f5972f1efee2653a2bc5=1595137318; reptileData=%7B%22data%22%3A%2220fd0bc3e44db424b83dd1ba0795e50c75a5055be4203fb780de85cba0ed36444244724521177586219277f40728d4f0f1751d57d2a3af3cd38115bcb6202b108ee5c6a9b3d3b5d682b997cbc1ff71c3ed409510ce31e6a34ecc5098f310dd93274bb92d43fc8d1e6bfc7d846e9740988c68c5e555fffef88fff8cf7bdc98a79%22%2C%22key_id%22%3A%2230%22%2C%22sign%22%3A%2285b0c241%22%7D'}

7.3.4 下载单个网页的视频

def one_page_load(base_url,headers):

    # 1.获取响应对象
    response=requests.get(base_url,headers=headers)
    ''' 
     取出响应对象的数据,即文本数据的字符串
    '''
    data=response.text
    
    # 2.数据转换
    '''
    data不能与python进行交互,需要把json字符串转化为python可交互的数据类型
    json.loads()
    '''
    json_data=json.loads(data)

    # 3.数据解析
    data_list=json_data['data']['response']['videos']

    # 4.遍历每个视频数据
    for data0 in data_list:  # 利用键_值对的方法进行提取
        video_title=data0['title'] +'.mp4'# 视频的文件名+视频的后缀
        video_url=data0['play_url'] # 视频的url地址

        # 5.保存数据
        print('正在下载:',video_title)
        '''
         二进制数据通过.content获得response响应对象的数据,
         二进制的有:图片、音频、视频
        '''
        video_data = requests.get(video_url,headers=headers).content# 视频数据是二进制的
        with open('.\\video\\'+ video_title,'wb') as f: 
            f.write(video_data)
            print('下载完成')

7.3.5 下载多个网页的视频

相同的url地址发生请求,但是返回的数据发生变化。大数据推荐系统

for page in range(2):
    print('======================正在获取第{}页数据==============='.format(page+1))
    one_page_load(base_url,headers)
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP