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)
python获取弹幕(iqiyi)
最新推荐文章于 2024-08-08 14:28:23 发布