爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

不温卜火 等级 537 0 0
标签: Python

  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!

目录


爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息


推荐

爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
  ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

  ♥欢迎大家关注公众号【不温卜火】,关注公众号即可以提前阅读又可以获取各种干货哦,同时公众号每满1024及1024倍数则会抽奖赠送机械键盘一份+IT书籍1份哟~♥
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

一、小小课堂

如今的网络直播非常火,有直播游戏的,直播旅行的…,有的人是去看美女主播的,有的人是抱着猎奇的心理的,有的是去寻找存在感的,有的就是纯粹消磨时间的,打发无聊,寂寞的…

既然是行业,那么就必定有竞争。经过了一段时间的发展,现在的直播行业你能想到的,无非是斗鱼或者虎牙这两大平台。其他的直播平台相较于此都略显逊色。

相信各位大都会在闲暇之时看一些直播。由于博主是个热爱游戏的宅男。所以贼钟爱这两个平台的游戏模块的主播。比如虎牙的彩旗,斗鱼的王继超…那么既然你喜欢观看直播,不知道你有没有想过爬取直播的数据,来看你所钟爱的主播的排名情况呢?

在此,本博主就以斗鱼直播为例,进行主播内容的爬取。

二、网页分析

首先我们先查看所有的在线直播
URL:https://www.douyu.com/directory/all
我们在打开之后,发现是下图这样的。
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
下面先点击第二页,观察其URL是否有所变化
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
这个时候,我们发现分页的时候url没发生变化,基本可以确定是通过异步加载的。

由于已经确定了此网页是由异步加载的,那么,接下来我们就需要通过点击开发者选项中Network的XHR查找我们需要的URL。

通过不断翻页,我们找到了URL。
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
通过对比,我们发现此URL正是我们需要找的URL,点击Headers 复制URL
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

https://www.douyu.com/gapi/rkc/directory/mixList/0_0/2 

我们下面试验下,通过修改URL最后的数字能否达到翻页的效果,我们以第三页为例。
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
由此我们可以断定所有的URL为下列的这种形式

https://www.douyu.com/gapi/rkc/directory/mixList/0_0/1
https://www.douyu.com/gapi/rkc/directory/mixList/0_0/2
https://www.douyu.com/gapi/rkc/directory/mixList/0_0/3
https://www.douyu.com/gapi/rkc/directory/mixList/0_0/4
...... 

三、反爬

由于这种网站一般反爬都比较完善,所以最好就是真实的模拟成浏览器访问,那么最简单的就是直接把打开开发者选项找到的cookie这些全都用上(其实是不想验证-。-)。

首先我们需要先找到此部分在哪!
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
🆗,下面我们把此部分复制出来

"""
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
cookie: dy_did=4844ec86b28c11d7d7c8b99000021501; acf_did=4844ec86b28c11d7d7c8b99000021501; acf_auth=9708CsFeg3RcDAECkBDT4Qji%2BPh5LV%2FNnFqX02YFz8%2BEAx0aGCTluy2zg4ChOu%2FrZ6NciX5j2FGYiQm5ggjPl0PX2BeNtnCPeLhqnpD8vHkZyTtKFXrG; dy_auth=2750VlVL%2Bwpc1BMjf85852zVxRl27Lansow3Eid1aiUkwVQrTpuuWro7EHl6pBlFW9jIRgW0kJ9mrcHMSEsbWYKBbjwU%2FFUR5R1zvhEvWQVC%2FeW1Ir7D; wan_auth37wan=de5497bf941cCxlNlIURQxQrIxreTkCAMyMb1QmNT3X4sDbfUqGUXVO6puH7KgEtBVVg8dk2948%2BcdvYnpoS%2Bvlu%2BH%2FNNUS5g6RpX9VRcfJC%2FmVYbQ; acf_uid=47553902; acf_username=47553902; acf_nickname=%E6%B7%A1%E5%BF%98%E4%B8%B6%E5%B9%B4%E5%8D%8E%E7%81%AC; acf_own_room=0; acf_groupid=1; acf_phonestatus=1; acf_ct=0; acf_ltkid=91034379; acf_biz=1; acf_stk=58e72209cb97b33e; acf_avatar=//apic.douyucdn.cn/upload/avatar/default/11_; Hm_lvt_e99aee90ec1b2106afe7ec3b199020a7=1602288432,1602913353,1603116859,1603159819; Hm_lpvt_e99aee90ec1b2106afe7ec3b199020a7=1603163131
referer: https://www.douyu.com/directory/all
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
x-requested-with: XMLHttpRequest
""" 

下面通过分割使其能够直接为我们所用

from pprint import pprint

headers = """accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
cookie: dy_did=4844ec86b28c11d7d7c8b99000021501; acf_did=4844ec86b28c11d7d7c8b99000021501; acf_auth=9708CsFeg3RcDAECkBDT4Qji%2BPh5LV%2FNnFqX02YFz8%2BEAx0aGCTluy2zg4ChOu%2FrZ6NciX5j2FGYiQm5ggjPl0PX2BeNtnCPeLhqnpD8vHkZyTtKFXrG; dy_auth=2750VlVL%2Bwpc1BMjf85852zVxRl27Lansow3Eid1aiUkwVQrTpuuWro7EHl6pBlFW9jIRgW0kJ9mrcHMSEsbWYKBbjwU%2FFUR5R1zvhEvWQVC%2FeW1Ir7D; wan_auth37wan=de5497bf941cCxlNlIURQxQrIxreTkCAMyMb1QmNT3X4sDbfUqGUXVO6puH7KgEtBVVg8dk2948%2BcdvYnpoS%2Bvlu%2BH%2FNNUS5g6RpX9VRcfJC%2FmVYbQ; acf_uid=47553902; acf_username=47553902; acf_nickname=%E6%B7%A1%E5%BF%98%E4%B8%B6%E5%B9%B4%E5%8D%8E%E7%81%AC; acf_own_room=0; acf_groupid=1; acf_phonestatus=1; acf_ct=0; acf_ltkid=91034379; acf_biz=1; acf_stk=58e72209cb97b33e; acf_avatar=//apic.douyucdn.cn/upload/avatar/default/11_; Hm_lvt_e99aee90ec1b2106afe7ec3b199020a7=1602288432,1602913353,1603116859,1603159819; Hm_lpvt_e99aee90ec1b2106afe7ec3b199020a7=1603163131
referer: https://www.douyu.com/directory/all
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36
x-requested-with: XMLHttpRequest"""

pprint({i.split(": ")[0]:i.split(": ")[1] for i in headers.splitlines()}) 

运行结果
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
最终headers

headers = {
    'accept': 'application/json, text/plain, */*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cookie': 'dy_did=5cbce4bf40d16268812d1ca500011601; acf_did=5cbce4bf40d16268812d1ca500011601; Hm_lvt_e99aee90ec1b2106afe7ec3b199020a7=1602166389,1602232258; Hm_lpvt_e99aee90ec1b2106afe7ec3b199020a7=1602289306',
    'referer': 'https://www.douyu.com/directory/all',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
    'x-requested-with': 'XMLHttpRequest'
} 

四、内容获取

爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
我们通过观察可以看到,我们所要爬取的内容都在上面的["data"]["rl"]内,所以我们可以先获取列表内的所有内容然后通过循环遍历,把我们所需要的内容全部遍历出来。

在此就直接给出代码及运行结果了

 data = parse_json(url)
    data_list = data["data"]["rl"]
    for data in data_list:
        item = {}
        item["name"] = data["rn"]#直播名字
        item["anchor"] = data["nn"]#主播名字
        item["hot"] = data["ol"]#热度
        item["pic"] = data["rs16"]#图片
        item["url"] = "https://www.douyu.com"+data["url"]#房间网址
        print(item) 

爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

五、翻页设计

所有的内容都已经获取了,那么下面就需要思考的是如何翻页!
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
通过查看,我们知道现在总共有104页得直播内容,那么我们接下来就通过代码自动获取这些URL

base_url = "https://www.douyu.com/gapi/rkc/directory/mixList/0_0/{}"

#分页
for i  in range(1,105):
    print(base_url.format(i)) 

我们先来运行一下
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

六、保存图片

爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
如果保存图片的话,我们由于已经找到了图片链接,因此只要把它保存到本地即可。代码如下:

 #获取字节
    content = parse_content(item["pic"])
    # 文件的名字
    filename = "./files/douyu/{}".format(item["pic"].split("/")[-2])
    # 文件写
    with open(filename, "wb") as file:
        file.write(content) 

七、完整代码

# encoding: utf-8
'''
  @author 李华鑫
  @create 2020-10-10 8:52
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: 保存图片版本.py
  @Version:1.0

'''
import requests
import csv
import time
import random
import os

base_url = "https://www.douyu.com/gapi/rkc/directory/mixList/0_0/{}"

headers = {
    'accept': 'application/json, text/plain, */*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cookie': 'dy_did=5cbce4bf40d16268812d1ca500011601; acf_did=5cbce4bf40d16268812d1ca500011601; Hm_lvt_e99aee90ec1b2106afe7ec3b199020a7=1602166389,1602232258; Hm_lpvt_e99aee90ec1b2106afe7ec3b199020a7=1602289306',
    'referer': 'https://www.douyu.com/directory/all',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
    'x-requested-with': 'XMLHttpRequest'
}

def parse_json(url, params={}):
    """解析url,得到字典"""
    time.sleep(random.random())
    response = requests.get(url=url, headers=headers, params=params)
    return response.json()

def parse_content(url, params={}):
    """解析url,得到字节"""
    time.sleep(random.random())
    response = requests.get(url=url, headers=headers, params=params)
    return response.content

def get_data(url):
    """获取数据"""
    data = parse_json(url)
    data_list = data["data"]["rl"]
    for data in data_list:
        item = {}
        item["name"] = data["rn"]#直播名字
        item["anchor"] = data["nn"]#主播名字
        item["hot"] = data["ol"]#热度
        item["pic"] = data["rs16"]#图片
        item["url"] = "https://www.douyu.com"+data["url"]#房间网址

        save(item)
        save_pic(item)

def save(item):
    """将数据保存到csv中"""
    with open("./斗鱼直播.csv", "a", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerow(item.values())

def save_pic(item):
    """保存图片"""
    # 创建文件夹
    if not os.path.exists("./files/douyu"):
        os.makedirs("./files/douyu")
    #获取字节
    content = parse_content(item["pic"])
    # 文件的名字
    filename = "./files/douyu/{}".format(item["pic"].split("/")[-2])
    # 文件写
    with open(filename, "wb") as file:
        file.write(content)

def main():
    #分页
    for i  in range(1,105):
        print(i)
        get_data(base_url.format(i))

if __name__ == '__main__':
    main() 

八、最终结果

爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!


爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

  好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
  如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
  码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!

爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息

本文转自 https://buwenbuhuo.blog.csdn.net/article/details/109412573,如有侵权,请联系删除。

收藏
评论区

相关推荐

爬虫入门经典(十六) | 一文带你爬取斗鱼主播相关信息
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
2000万条直播数据,揭秘斗鱼主播生存现状
前言: 《凹凸数读》新文章已发,可以先看数据分析结果再回来看过程: 《2000万直播数据看20万游戏主播能否月入100万》(http://mp.weixin.qq.com/s?__bizMzIxNjgyOTA3NQ&mid2247484088&idx1&snd57ac021af33b83d2e66546384bcea4c&chksm
商业数据分析从入门到入职(9)Python网络数据获取
@toc 前言本文主要讲Python最常见的应用之一——网络数据获取,即爬虫:先介绍了网页和网络的基础知识,为从网页中获取数据打好基础;接下来以两个案例介绍从网络中获取数据和处理数据的不同方式,以进一步认识Python爬虫和数据处理。 一、网络和网页基础知识 1.数据来源数据源有很多,可以从数据库中获取,可以从文件中获取,也可以从
爬取千万条基金数据是怎样的体验?
大家好,我是朱小五 昨天的文章中就提了一嘴,最近爬了一些股票和基金数据。再加上我们之前也做过,那就简单跟大家说一下如何爬取tiantian基金的数据。基金代码爬取基金的数据有个必要条件就是要知道基金代码,如何获取呢,打开官网找吧。点了一圈,发现了基金代码的主页,寻思翻页爬取就完事了http://fund.eastmoney.com/allfund.html
Python网络爬虫与信息提取
title: Python网络爬虫与信息提取date: 20201210 01:00:23tags: Pythoncategories: 学习笔记 写在前面 不知道写啥其实说实话[TOC] 网络爬虫之规则 安装requests库cmd 命令行打开输入pip3 install requests,等待即可简单测试,爬一下bkjwpythonimport requ
《Python3网络爬虫开发实战》
提取码:1028内容简介 · · · · · ·本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib、requests、正则表达式、Beautiful Soup、XPath、pyquery、数据存储、Ajax数据爬取等内容,接着通过多个案例介绍了不同场景下如何实现数据爬取,后介绍了pyspider框架、S
2000万条直播数据,揭秘斗鱼主播生存现状
前言:《凹凸数读》新文章已发,可以先看数据分析结果再回来看过程: 2019年7月17日游戏直播平台斗鱼在美国纳斯达克股票交易所成功上市,成为继虎牙直播之后第二家赴美上市的国内直播平台。 7月底斗鱼因为平台主播“乔碧萝殿下”事件再次被推上热搜。 段子手们纷纷调侃成为主播的门槛之低:只需要变声软件+盗图+超级美颜。那么直播行业真的如同网友们所说的这
基于TypeScript从0到1搭建一款爬虫工具
前言今天,我们将使用TS这门语言搭建一款爬虫工具。目标网址是什么呢?我们去上网一搜,经过几番排查之后,我们选定了这一个网站。https://www.hanju.run/ 一个视频网站,我们的目的主要是爬取这个网站上视频的播放链接。下面,我们就开始进行第一步。第一步俗话说,万事开头难。不过对于这个项目而言,恰恰相反。你需要做以下几个事情:1. 我们需要创建
创建免费ip代理池
     反爬技术越来越成熟,为了爬取目标数据,必须对爬虫的请求进行伪装,骗过目标系统,目标系统通过判断请求的访问频次或请求参数将疑似爬虫的ip进行封禁,要求进行安全验证,通过python的第三方库faker可以随机生成header伪装请求头,并且减缓爬虫的爬取速度,能很好的避过多数目标系统的反扒机制,但对一些安全等级
3000字 “婴儿级” 爬虫图文教学 | 手把手教你用Python爬取 “实习网”!
1\. 为"你"而写 这篇文章,是专门为那些 "刚学习" Python爬虫的朋友,而专门准备的文章。希望你看过这篇文章后,能够清晰的知道整个 "爬虫流程"。从而能够 "独立自主" 的去完成,某个简单网站的数据爬取。好了,咱们就开始整个 “爬虫教学” 之旅吧!2\. 页面分析 ① 你要爬取的网站是什么?首先,我们应该清楚你要爬去的网站是什么?由于这里我们想要
手把手教你使用XPath爬取免费代理IP
大家好,我是霖hero。前言 可能有人说,初学者Python爬虫爬数据太难啦,构造正则表达式的时候,太烦琐了,眼睛都看花了,而且前一秒还可以愉快地爬取,下一秒IP就被封了,这还爬个屁啊,不爬了。哎,不要着急,这篇文章我们教你如何使用XPath来爬取快代理中的免费代理IP,告别眼花,告别IP被封的烦恼。XPath首先我们来简单了解一下XPath,想要了解更多
实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!
大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据。 并且将数据写入Excel中同时自动生成折线图,主要有以下几个步骤。本文将分为以下两个部分进行讲解 在虎扑NBA官网球员页面中进行爬虫,获取球员数据。 清洗整理爬取的球员数据,对其进行可视化。
手把手教你用Pycharm连接远程Python环境
前言本次咱们来操作一下如何在Pycharm上,使用远程服务器上的Python环境。 为什么这样做?这个要从我的一次经历说起,有一次我帮朋友爬取一些东西,由于类别不同,分了几次爬取,这一次我写好规则之后,依然正常爬取,由于我本人比较善良,加上数据量目测并不是太多,并没有使用代理ip,并且将scpay的速度控制的比较慢,一般爬取时,一般也就几分钟而已,泡一杯咖
用Python分析《令人心动的offer2》的13万条弹幕,网友们都在吐槽什么?
前言大家好,我是J哥。综艺,是我们劳累了一天的放松方式,也是我们饭后的谈资。看着自己喜欢的综艺,时光足够美。而《令人心动的offer》,就是一个不错的综艺选择。《令人心动的offer》目前为止已经播出了两季,第一季在豆瓣为8.3分,共有5万余人评分,第二季目前评分低于第一季,评分仅7.1分。本文通过爬取《令人心动的offer》第二季13万+弹幕,进行可视化分
爬虫
爬虫什么是爬虫使用编程语言所编写的一个用于爬取web或app数据的应用程序怎么爬取数据1.找到要爬取的目标网站、发起请求2.分析URL是如何变化的和提取有用的URL3.提取有用的数据爬虫数据能随便爬取吗? 遵守robots.txt协议 爬虫的分类通用网络爬虫百度,Google等搜索引擎,从一些初识的URL扩展到整个网站,主要为门户站点搜索引擎和大型网站服务采