爬取腾讯视频

黄鹏宇 469 2022-09-28
#coding:utf-8
# 导库
import requests
import json
import time
import pandas as pd
# 用pandas这么个库,为了保存csv格式
df = pd.DataFrame()

# 循环语句
# for xxx in range(a,b,c):
# for a in range(1,4):
#     print(a)

dataArray = [] 
# 可遍历的对象
for page in range(2, 3):
    # headers 伪造身份 
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    
    #### 构造url ####
    # https:协议头
    # mfm.video.qq.com : URL
    # ? 后面是参数名,可以有多个,用&来分割
    # otype 类型  otype = json×tamp={}    
    # target_id 视频ID 
    # count 返回的弹幕数量
    ####### {} 在python里面,叫做占位符
    url = 'https://mfm.video.qq.com/danmu?otype=json×tamp={}&target_id=5938032297%26vid%3Dx0034hxucmw&count=20'.format(page)
    # 发起一个http的Get请求,相当于 在浏览器的地址栏输入url后,敲下回车键
    # 然后把response用html这个变量存储
    html = requests.get(url,headers = headers)
    # <代表对象>
    # Response是对象的类型 200 是HTTP的状态码 404:not found
    # <Response [200]>
    # print(html.text)

    # 将string转化为json,格式化
    bs = json.loads(html.text,strict = False)  #strict参数解决部分内容json格式解析报错
    # json操作,用key来获取value
    
    # bs['comments'] 是个 Array,可以遍历
    # 休息一秒钟,目的是防止反爬虫机制    
    # #遍历获取目标字段
    # for i in bs['comments']:
    #     content = i['content']  #弹幕
    #     upcount = i['upcount']  #点赞数
    #     user_degree =i['uservip_degree'] #会员等级
    #     timepoint = i['timepoint']  #发布时间
    #     comment_id = i['commentid']  #弹幕id
    dataArray += bs['comments']
    time.sleep(1)
# 怎么把一个json 转成csv去存储
# 语法糖,简化文件操作的
# 第一个参数是文件名: temp.json
# 第二个参数是文件mode:w: write , r
# 文件的引用类型


with open("temp.csv",'w',encoding="utf-8") as f:
    # 写内容,写什么内容,写到哪
    # unicode
    # 第一步,写列名 \n是换行
    outputStr = ",弹幕,点赞数\n"
    for singleLine in dataArray:
        # 拼接字符串
        singleLineStr = "0,{},{}\n".format(singleLine['content'],singleLine['upcount'])
        outputStr = outputStr + singleLineStr

    f.write(str(outputStr))

    # json.dump(dataArray,f,ensure_ascii=False)