zoukankan      html  css  js  c++  java
  • 2020.2.9

    今天以爬取一个六间房直播的视频联系使用python的爬虫

    爬虫的思路
    通过控制台确定出来爬取的数据包的地址
    发送请求---通过requests模块 模拟浏览器发送的数据请求获取响应数据
    解析数据---json字符串转化成python可以进行交互的数据类型
    将数据保存在目标文件夹中

    这里用到的数据包就是常见的两个requests还有json

    requests是python最简单实用的HTTP库,这力爬虫使用的就是requests库

    json主要是用来转化爬取到的数据包的格式为字典

    #练习通过爬取数据包的形式爬取数据
    #@Time 2020.2.10
    #xzy
    #爬虫的思路
    #通过控制台确定出来爬取的数据包的地址
    #发送请求---通过requests模块 模拟浏览器发送的数据请求获取响应数据
    #解析数据---json字符串转化成python可以进行交互的数据类型
    #将数据保存在目标文件夹中
    import requests
    import json
    #定义一个函数
    def video_spider():
    
        #确定了爬取的URL地址 确定请求头headers
        base_url = 'https://v.6.cn/minivideo/getlist.php?act=recommend&page=1&pagesize=20'
        headers = {'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0'}
        #发送请求模拟浏览器获取该网址的数据
        #定义了一个相应对象
        response = requests.get(base_url,headers = headers)
        data = response.text
        #接下来就进行解析数据
        #转化数据的类型
        dict_data = json.loads(data)#转化成为字典的格式 方便之后使用键值对的方式去获取到数据的
        #解析数据
        data_list = dict_data['content']['list']
        #print (data_list)
        #接下来遍历一下list下面的字典
        for data_dict in data_list :
            video_title = data_dict['title'] + '.mp4'
            video_url = data_dict['playurl']
    
            #print(video_title,video_url)
            #需要在title后缀添加.mp4后缀,才可以变成视频
            video_data = requests.get(video_url,headers=headers).content
            #保存到文件当中
            with open('video\' + video_title, 'wb') as f:
                f.write(video_data)
    
    
    
    #定义main 调用这个函数
    if __name__ == '__main__':
        video_spider()

    在爬取视频的时候遇到一个错误,需要在requests.get方法后面加上.content才可以得到视频

    requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等。其中返回的网页部分会存在.content和.text两个对象中。两者区别在于,content中间存的是字节码,而text中存的是Beautifulsoup根据猜测的编码方式将content内容编码成字符串。直接输出content,会发现前面存在b'这样的标志,这是字节字符串的标志,而text是',没有前面的b,对于纯ascii码,这两个可以说一模一样,对于其他的文字,需要正确编码才能正常显示。大部分情况建议使用.text,因为显示的是汉字,但有时会显示乱码,这时需要用.content.decode('utf-8'),中文常用utf-8和GBK,GB2312等。这样可以手工选择文字编码方式。所以简而言之,.text是现成的字符串,.content还要编码,但是.text不是所有时候显示都正常,这是就需要用.content进行手动编码。

  • 相关阅读:
    HDU 5835 Danganronpa 贪心
    HDU 5842 Lweb and String 水题
    HDU 5832 A water problem 水题
    Codeforces Beta Round #14 (Div. 2) A. Letter 水题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem K. UTF-8 Decoder 模拟题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem I. Alien Rectangles 数学
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem F. Turning Grille 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem C. Cargo Transportation 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem G. k-palindrome dp
  • 原文地址:https://www.cnblogs.com/xuzhaoyang/p/12290444.html
Copyright © 2011-2022 走看看