python爬取某鱼的直播间信息
时间:2023-01-17 07:30:01
python某鱼直播间信息
- 获取分类信息
-
- 一级类别
- 二级类目
- 三级类别(标签)
- 获取直播间信息
-
- 附上鱼类代码
- 附上获取主播信息代码
- 注:
获取分类信息
先找一级类别,再根据一级类别找二级类别,再由二级类别找三级类别(这里叫标签)
一级类目
二级类目
三级类别(标签)
以英雄联盟为例
以上是某鱼的直播分类。这里唯一需要注意的是自己做各个类别之间的关系。这些分类很简单,不反爬,直接用xpath分析网页。完整代码将附在文章的最后。
获取直播间信息
随便打开一个主播的直播间,你会看到直播间里有很多信息,比如直播间的等级、标题、开播状态、主播昵称、主播工会等等。
通过charls抓包和chrom调试后,控制台发现这些数据是通过的json数据的传输方式,没有反爬,只需要将相应的房间传输到相应的房间id替换。然后通过分析json数据可以得到你想要的数据。
附上鱼类代码
from apps.douyu.tools import * import requests class getDouyuCategory(object): def __init__(self): self.headers = {
'user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36', } self.session = MysqlSvr.get('diandian_zl') self.first_category_id = get_first_category_id() def get_data(self): url = 'https://www.douyu.com/directory' res = requests.get(url, headers=self.headers) tree = tree_parse(res) categories = tree.xpath('//section["layout-Module"]/div[position()>=3]') for category
in categories
: category_first_info
=
{
} category_first_info
[
'category_name'
]
= category
.xpath
(
'./div/h4/text()'
)
[
0
] _
, row_first
= DouYuCategoryFirstInfo
.upsert
( self
.session
,
'category_name'
, category_first_info
) category_seconds
= category
.xpath
(
'./ul/li'
)
for category_second
in category_seconds
: category_second_info
=
{
} category_second_info
[
'category_name'
]
= category_second
.xpath
(
'./a/strong/text()'
)
[
0
] category_second_info
[
'category_level_first_id'
]
= self
.first_category_id
[ category_first_info
[
'category_name'
]
] _
, row_second
= DouYuCategorySecondInfo
.upsert
( self
.session
,
'category_name'
, category_second_info
) cid3_url
= category_second
.xpath
(
'./a/@href'
)
[
0
] res_3
= requests
.get
(
'https://www.douyu.com'
+ cid3_url
, headers
=self
.headers
) tree_3
= tree_parse
(res_3
) cid3_list
= tree_3
.xpath
(
'//div[@class="layout-Module-filter-list"]'
)
for cid3_info
in cid3_list
: cid3_url_info
= cid3_info
.xpath
(
'./a[contains(@href,"directory")]/strong/span/text()'
)
if cid3_url_info
: cid3_ids
= cid3_info
.xpath
(
'./a/@href'
)
for index
in
range
(
len
(cid3_url_info
)
)
: cid3_id
= cid3_ids
[index
]
.split
(
'/'
)
[
-
1
] cid3_text
= cid3_url_info
[index
]
.split
(
'/'
)
[
-
1
] cid3_info
=
{
} cid3_info
[
'id'
]
= cid3_id cid3_info
[
'category_level_first_id'
]
= row_first
.
id cid3_info
[
'category_level_second_id'
]
= row_second
.
id cid3_info
[
'category_name'
]
= cid3_text DouYuCategoryThirdInfo
.upsert
( self
.session
,
'id'
, cid3_info
)
附上获取主播信息代码
import asyncio import re import json import aiohttp import urllib3 from apps.app_360.conn_redis import AioRedisService urllib3.disable_warnings() from apps.douyu.tools import * class getRoomLiveInfo(object): def __init__(self): self.headers = { 'user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36', } self.session = MysqlSvr.get('diandian_zl') self.second_category_id = { '英雄联盟': 1, '绝地求生': 2, '穿越火线': 3, '使命召唤:战区': 4, 'DNF': 5, 'DOTA2': 6, '炉石传说': 7, 'CS:GO': 8, 'lol云顶之弈': 9, '魔兽争霸': 10, '魔兽怀旧服': 11, '自走棋': 12, '传奇': 13, '星际争霸': 14, '格斗游戏': 15, '怀旧游戏': 16, '守望先锋': 17, 'DOTA': 18, '魔兽世界': 19, 'COD16': 20, '剑网3': 21, '我的世界': 22, '三国杀': 23, '梦幻西游': 24, '天涯明月刀': 25, '跑跑卡丁车': 26, 'NBA2KOL2': 27, 'QQ飞车端游': 28, '军事游戏': 29, '棋牌娱乐': 30, 'FIFA ONLINE4': 31, '热门网游': 32, 'APEX英雄': 33, '流放之路POE': 34, '逆水寒': 35, '风暴英雄': 36, '逆战': 37, '街头篮球': 38, '巫师之昆特牌': 39, '反恐精英Online': 40, '暗黑破坏神3': 41, '梦三国2': 42, '传奇世界': 43, '
方舟:生存进化': 44, '刀塔霸业': 45, '神武4电脑版': 46, '群雄逐鹿': 47, '堡垒之夜': 48, '无限法则': 49, '问道电脑版': 50, '最终幻想14': 51, '使命召唤OL': 52, '战意': 53, '剑灵': 54, '星际战甲': 55, '龙之谷': 56, '铁甲雄兵': 57, '古剑奇谭网络版': 58, '神途': 59, '迷你世界': 60, '激战2': 61, '高达文化区': 62, '忍者村大战2': 63, 'RPG网游专区': 64, '诛仙3': 65, 'Artifact': 66, '斗鱼游戏': 67, '笑傲江湖OL': 68, '冒险岛2': 69, '万智牌': 70, '无尽战区': 71, '生死狙击': 72, '斗战神': 73, '永恒之塔': 74, '竞速游戏': 75, '九阴真经': 76, '我的起源': 77, 'FPS综合网游': 78, '劲舞团': 79, '天下3': 80, '刀锋铁骑': 81, '火箭联盟': 82, '300专区': 83, '泡泡堂': 84, '影子战场': 85, '枪林弹雨': 86, '武侠乂': 87, '音乐游戏': 88, '百变球球': 89, '游戏装机': 90, '新倩女幽魂': 91, '创世战车': 92, '天谕': 93, '征途2': 94, 'QQ炫舞': 95, '泰亚史诗': 96, '大唐无双': 97, '枪火游侠': 98, '超激斗梦境': 99, '海战世界': 100, '真·三国无双Online': 101, '兽人必须死': 102, '神枪少女': 103, '跳伞行动': 104, '怪物猎人ol': 105, '虚幻争霸': 106, 'Hytale': 107, '火源': 108, '生存竞技': 109, '乐高无限': 110, '动漫自走棋': 111, '手工星球': 112, '艾兰岛': 113, '暴雪游戏': 114, '湖北好货': 115, '主机游戏': 116, '最终幻想': 117, '最后的绿洲': 118, '骑马与砍杀': 119, '逃离塔科夫': 120, '马里奥制造': 121, '饥荒': 122, '战地风云': 123, '三国志系列': 124, '怪物猎人': 125, '拾遗记': 126, '塞尔达传说系列': 127, '主机其他游戏': 128, '恐怖游戏': 129, '命运2': 130, '荒野大镖客': 131, '暗黑地牢': 132, 'Dayz': 133, '挺进地牢': 134, '勇者斗恶龙:建造者2': 135, '只狼': 136, '僵尸世界大战': 137, '俄罗斯钓鱼': 138, '腐烂国度': 139, 'FIFA': 140, '全面战争': 141, '使命召唤': 142, '绿色地狱': 143, 'NBA2K': 144, '灵魂筹码': 145, '刺客信条': 146, '植物大战僵尸': 147, '环世界': 148, '亿万僵尸': 149, '帝国时代': 150, '人类一败涂地': 151, '宝可梦:剑/盾': 152, '星露谷物语': 153, '仁王': 154, 'raft': 155, '欧洲卡车模拟器': 156, '破坏领主': 157, '孤岛惊魂': 158, '泰拉瑞亚': 159, '军团战争': 160, '仙剑奇侠传': 161, '文明': 162, '足球经理': 163, '全境封锁': 164, '海贼无双': 165, '辐射': 166, '缺氧': 167, '逆转裁判': 168, '森林': 169, '生化危机3 重制版': 170, '龙珠斗士Z': 171, '无主之地': 172, '古墓丽影': 173, '反恐精英': 174, '火影忍者:究极忍者风暴': 175, 'SCUM': 176, '英雄连': 177, '九劫曲': 178, '神界:原罪': 179, '皇家美食': 180, '半条命': 181, '三国群英传': 182, '消逝的光芒': 183, '九霄缳神记': 184, '风暴岛': 185, '鬼泣': 186, '精灵宝可梦': 187, '深海迷航': 188, '深岩银河': 189, '了不起的修仙模拟器': 190, '杀手': 191, '马里奥赛车': 192, '超级马里奥': 193, '龙珠:超宇宙': 194, '漫漫长夜': 195, '精灵与萤火意志': 196, '石质碎片': 197, '龙珠Z': 198, '都市:天际线': 199, '火影忍者博人传': 200, '黑色幸存者': 201, '模拟农场': 202, '猎人:荒野的召唤': 203, '伤害世界': 204, '狙击精英': 205, '隐形守护者': 206, '侏罗纪世界:进化': 207, '我的朋友佩德罗': 208, '杀戮尖塔': 209, '瘟疫传说:无罪': 210, '以撒的结合': 211, '信长之野望': 212, '奇妙探险队': 213, '飙酷车神': 214, '女神异闻录': 215, '荣耀战魂': 216, '神秘海域': 217, '底特律:变人': 218, '领地人生': 219, '孤岛危机': 220, '幽灵行动:断点': 221, '任天堂明星大乱斗特别版': 222, '钓鱼星球': 223, 'GT赛车系列': 224, '血源': 225, '火炬之光': 226, '模拟人生': 227, '空洞骑士': 228, '纪元1800': 229, '英雄传说': 230, 'ATLAS': 231, '河洛群侠传': 232, '模拟城市': 233, '盗贼之海': 234, '正当防卫': 235, '命令与征服': 236, '八方旅人': 237, '群星': 238, '流放者柯南': 239, "精灵宝可梦Let's Go!": 240, '雨中冒险': 241, '光环': 242, '沉没之城': 243, '星际公民': 244, '极限竞速': 245, '血污:夜之仪式': 246, '真三国无双': 247, '我还活着': 248, '尼尔:机械纪元': 249, '碧蓝幻想': 250, '双点医院': 251, '天国:拯救': 252, '奇异人生': 253, '神力科莎': 254, '攻城英雄': 255, '火焰纹章': 256, '无人深空': 257, '工作模拟器': 258, '罗马2:全面战争': 259, 'NBA 2K 欢乐竞技场2': 260, '往日不再': 261, '港诡实录': 262, '无尽世界': 263, '进击的巨人': 264, '波西亚时光': 265, '橙光': 266, '莎木': 267, '圣歌': 268, '喷射战士': 269, '中土世界:战争之影': 270, '行尸走肉': 271, '层层恐惧': 272, '圣女战旗': 273, '哆啦A梦:牧场物语': 274, '鬼哭邦': 275, '不屈者柯南': 276, '风之旅人': 277, '太吾绘卷': 278, '战神': 279, '全面吃鸡模拟器': 280