python获取弹幕(iqiyi)

import sys
import zlib
from xml.dom.minidom import parse
import xml.dom.minidom
import requests
import pandas as pd


# 构造URL
def get_urls():
    urls = []
    for x in range(1, 11):
        url = f'https://cmts.iqiyi.com/bullet/55/00/2655670311625500_300_{x}.z'
        urls.append(url)
    return urls


# 保存xml文件 ,
def get_xml():
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
        'Accept-Encoding': 'gzip, deflate'
    }
    urls = get_urls()
    count = 1
    for url in urls:
        content = requests.get(url, headers=headers).content
        decode = zlib.decompress(bytearray(content), 15 + 32).decode('utf-8')
        with open(f'F:/download/zx-{count}.xml', 'a', encoding='utf-8') as f:
            f.write(decode)
        count += 1

    # 提取数据


def parse_data():
    danmus = []
    for x in range(1, 11):
        DOMTree = xml.dom.minidom.parse(f'F:/download/zx-{x}.xml')
        collection = DOMTree.documentElement
        entrys = collection.getElementsByTagName('entry')
        print(f"第{x}页")
        for entry in entrys:
            # danmu = entry.getElementsByTagName('content')[0].childNodes[0].data
            # print(danmu)
            content_nodes = entry.getElementsByTagName('content')

            # 检查是否有<content>标签
            if content_nodes:
                content_node = content_nodes[0]

                # 检查content_node是否有子节点,并且至少有一个子节点是文本类型(nodeType为3)
                if content_node.childNodes and content_node.childNodes[0].nodeType == 3:
                    danmu = content_node.childNodes[0].data
                    danmus.append(danmu)
                    print(danmu)
                else:
                    # 处理没有文本数据的情况
                    print("No data in <content> for an entry.")
            else:
                # 处理找不到<content>标签的情况
                print("<content> tag not found for an entry.")
    #         danmus.append(danmu)
    df = pd.DataFrame({
        '弹幕': danmus
    })
    return df

    # 保存数据


def save_data():
    df = parse_data()
    df.to_csv('danmu.csv', encoding='utf-8-sig', index=False)


if __name__ == '__main__':
    get_xml()
    save_data()

    # with open('2655670311625500_300_1.z', 'rb') as f:
    #     data = f.read()
    # decode = zlib.decompress(bytearray(data), 15 + 32).decode('utf-8')
    # with open('zx-1.xml', 'w', encoding='utf-8') as f:
    #     f.write(decode)
    # DOMTree = xml.dom.minidom.parse('zx-1.xml')
    # print(DOMTree)
    # sys.exit()
    # collection = DOMTree.documentElement
    # entrys = collection.getElementsByTagName('entry')
    # for entry in entrys:
    #     content = entry.getElementsByTagName('content')[0].childNodes[0].data
    #     print(content)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值