锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

python爬取某鱼的直播间信息

时间:2023-01-17 07:30:01 dfn6晶体管

python某鱼直播间信息

  • 获取分类信息
    • 一级类别![插入图片描述](https://web.ruidan.com/images/aritcle/20220728/20200507110516892.png)
    • 二级类目
    • 三级类别(标签)
  • 获取直播间信息
    • 附上鱼类代码
    • 附上获取主播信息代码
    • 注:

获取分类信息

先找一级类别,再根据一级类别找二级类别,再由二级类别找三级类别(这里叫标签)

一级类目在这里插入图片描述

二级类目

三级类别(标签)

以英雄联盟为例

以上是某鱼的直播分类。这里唯一需要注意的是自己做各个类别之间的关系。这些分类很简单,不反爬,直接用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
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章