Python爬虫实现获取斗鱼主播信息

我发现首页是一些推荐的主播,并不全面,不能全部爬取,所以我这里选择了分类页

这里是斗鱼所以的直播分类,我们可以看到所有的分类全部都在这一页,所以我们只需要把每个分类的地址拿到。

在浏览器中按F12,我们看到

Python爬虫实现获取斗鱼主播信息

Python爬虫实现获取斗鱼主播信息

每个分类都是由

标签写的标签的class为unit,并且含有链接和文本

Python爬虫实现获取斗鱼主播信息

所有我们只需要

def main_wj():

r = requests.get("https://www.douyu.com/directory") #从分类目录读取所有分类的名字和链接地址

r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'html.parser') #美丽汤,用于html更加简便

urls = []

names = []

for link in soup.select('.unit '): #分类链接和名字的 class 是unit

urls.append(link.select('a')[0]['href']) #添加链接到urls列表

names.append(link.select('a')[0].text.strip().replace(":", "")) #添加分类名到names列表,

且替换掉名字中的:,避免后面创建文件夹失败

就能够把所有分类(分类名+分类地址)获取到了

下面我们随便进入一个分类中

如果是一般的分页都是 直接在链接中改 id ,但是我们点击第二页后发现,网页的地址没有改变,说明很可能是用JavaScript实现的分页功能,这怎么办呢,如果按照之前的方法只能获取到第一页。下面我们按F12,选中network-XHR,然后点击第二页。

Python爬虫实现获取斗鱼主播信息

我们看到一个2的文件,点击进去

Python爬虫实现获取斗鱼主播信息

我们发现是这个api给刚刚分类页面提供的数据

Python爬虫实现获取斗鱼主播信息

所有我们只需要从这个api,就能够获取所有的,信息了

我们发现这个链接,就两个参数,2_350,2,很明显可能看出,后面的2是第2页,不信的可以,点击3验证一下,那么2_350就是表示分类了,那么还有一个问题需要确定,就是一共有多少页,现在我们回到第一页,看源码,有一个JavaScript标签

Python爬虫实现获取斗鱼主播信息

rk_=”2_350”,就是分类 count = “5”,是总页数,

所以后面我们只需要提取这两个参数就行

def write_info(a1,a2,name): # a1 分类接口编号 a2 分类页数 name 分类名

os.mkdir("F:\yusheng\"+name) #以分类名创建目录,F:盘的yusheng文件夹下

global num # 初始化全局变量 用于统计主播数量

num = 1

for x in range(int(a2[0])): # 循环写入每一页的信息

getUrl_wj("/gapi/rkc/directory/" + str(a1[0]) + "/" + str(x + 1), name)

print("当前完成分类:"+name)

下面是在每个api分类中提取数据就简单了,只需要用个正则表达式就行了

def getUrl_wj(url,name): #接口url ,分类名

res = requests.get("https://www.douyu.com"+url)

res.encoding = 'utf-8'

ze = '"rid":(.?),"rn":".?","uid":.?,"nn":"(.?)"' #rid = 房间号 nn = 主播名

s = re.findall(ze, res.text) #获得主播的房间号 和 名字

global num

f = open("F:\\yusheng\\"+name+"\\zhubo.txt","a") #以追加的模式打开文件txt文件

for x in s:

t = list(x)

try:

f.write(str(t[0])+"\t\t"+str(t[1])+"\t\t"+str(num)+"\n") #写入信息,防止编码异常的问题,这里try一下

num+=1

except UnicodeEncodeError:

continue

f.close() #关闭文件

以上就是全部的过程了,仔细的朋友可能会发现一点不足,这只能获取在线的。第一次爬取,有不足之处,望见谅,也欢迎大家的批评指正,下面是完整代码:

from bs4 import BeautifulSoup #美丽汤 ,可以很好的读取html标签,本来想练练这个的,可是后来发现用到不到,情况特殊

import requests

import re

import os

def getUrl_wj(url,name): #接口url ,分类名

res = requests.get("https://www.douyu.com"+url)

res.encoding = 'utf-8'

ze = '"rid":(.*?),"rn":".*?","uid":.*?,"nn":"(.*?)"' #rid = 房间号 nn = 主播名

s = re.findall(ze, res.text) #获得主播的房间号 和 名字

global num

f = open("F:\\\\yusheng\\\\"+name+"\\\\zhubo.txt","a") #以追加的模式打开文件txt文件

for x in s:

t = list(x)

try:

f.write(str(t[0])+"\t\t"+str(t[1])+"\t\t"+str(num)+"\n") #写入信息,防止编码异常的问题,这里try一下

num+=1

except UnicodeEncodeError:

continue

f.close() #关闭文件

def getUrl(url):

res = requests.get("https://www.douyu.com" + url) #向指定某分类页发送请求

# 通过接收到的数据,是通过js动态实现多页数据显示的

# 后来通过查看js文件发现他调用了API的接口

# /gapi/rkc/directory/"(分类编号)/(分类页数)

# 所以后面只需要分析接口的数据就行

res.encoding='utf-8'

ze = 'PAGE.rk= "(.*?)";' #指定某个分类的接口编号

ze2 = 'count: "(.*?)",' #指定某个分类的页数

s = re.findall(ze,res.text) #通过正则表达式过滤出信息

s2 =re.findall(ze2,res.text)

return s,s2 #返回 分类接口编号 和 分类页数

def write_info(a1,a2,name): # a1 分类接口编号 a2 分类页数 name 分类名

os.mkdir("F:\\yusheng\\"+name) # 以分类名创建目录

global num # 初始化全局变量 用于统计主播数量

num = 1

for x in range(int(a2[0])): # 循环写入每一页的信息

getUrl_wj("/gapi/rkc/directory/" + str(a1[0]) + "/" + str(x + 1), name)

print("当前完成分类:"+name)

def main_wj():

r = requests.get("https://www.douyu.com/directory") #从分类目录读取所有分类的名字和链接地址

r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'html.parser') #美丽汤,用于html更加简便

urls = []

names = []

for link in soup.select('.unit '): #分类链接和名字的 class 是unit

urls.append(link.select('a')[0]['href']) #添加链接到urls列表

names.append(link.select('a')[0].text.strip().replace(":", "")) #添加分类名到names列表,

# 且替换掉名字中的:,避免后面创建文件夹失败

for url, name in zip(urls, names): #循环遍历列表 urls 和 names

a1, a2 = getUrl(url)

write_info(a1, a2, name)

num = 1

main_wj()

Python爬虫实现获取斗鱼主播信息

我发现首页是一些推荐的主播,并不全面,不能全部爬取,所以我这里选择了分类页

这里是斗鱼所以的直播分类,我们可以看到所有的分类全部都在这一页,所以我们只需要把每个分类的地址拿到。

在浏览器中按F12,我们看到

Python爬虫实现获取斗鱼主播信息

Python爬虫实现获取斗鱼主播信息

每个分类都是由

标签写的标签的class为unit,并且含有链接和文本

Python爬虫实现获取斗鱼主播信息

所有我们只需要

def main_wj():

r = requests.get("https://www.douyu.com/directory") #从分类目录读取所有分类的名字和链接地址

r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'html.parser') #美丽汤,用于html更加简便

urls = []

names = []

for link in soup.select('.unit '): #分类链接和名字的 class 是unit

urls.append(link.select('a')[0]['href']) #添加链接到urls列表

names.append(link.select('a')[0].text.strip().replace(":", "")) #添加分类名到names列表,

且替换掉名字中的:,避免后面创建文件夹失败

就能够把所有分类(分类名+分类地址)获取到了

下面我们随便进入一个分类中

如果是一般的分页都是 直接在链接中改 id ,但是我们点击第二页后发现,网页的地址没有改变,说明很可能是用JavaScript实现的分页功能,这怎么办呢,如果按照之前的方法只能获取到第一页。下面我们按F12,选中network-XHR,然后点击第二页。

Python爬虫实现获取斗鱼主播信息

我们看到一个2的文件,点击进去

Python爬虫实现获取斗鱼主播信息

我们发现是这个api给刚刚分类页面提供的数据

Python爬虫实现获取斗鱼主播信息

所有我们只需要从这个api,就能够获取所有的,信息了

我们发现这个链接,就两个参数,2_350,2,很明显可能看出,后面的2是第2页,不信的可以,点击3验证一下,那么2_350就是表示分类了,那么还有一个问题需要确定,就是一共有多少页,现在我们回到第一页,看源码,有一个JavaScript标签

Python爬虫实现获取斗鱼主播信息

rk_=”2_350”,就是分类 count = “5”,是总页数,

所以后面我们只需要提取这两个参数就行

def write_info(a1,a2,name): # a1 分类接口编号 a2 分类页数 name 分类名

os.mkdir("F:\yusheng\"+name) #以分类名创建目录,F:盘的yusheng文件夹下

global num # 初始化全局变量 用于统计主播数量

num = 1

for x in range(int(a2[0])): # 循环写入每一页的信息

getUrl_wj("/gapi/rkc/directory/" + str(a1[0]) + "/" + str(x + 1), name)

print("当前完成分类:"+name)

下面是在每个api分类中提取数据就简单了,只需要用个正则表达式就行了

def getUrl_wj(url,name): #接口url ,分类名

res = requests.get("https://www.douyu.com"+url)

res.encoding = 'utf-8'

ze = '"rid":(.?),"rn":".?","uid":.?,"nn":"(.?)"' #rid = 房间号 nn = 主播名

s = re.findall(ze, res.text) #获得主播的房间号 和 名字

global num

f = open("F:\\yusheng\\"+name+"\\zhubo.txt","a") #以追加的模式打开文件txt文件

for x in s:

t = list(x)

try:

f.write(str(t[0])+"\t\t"+str(t[1])+"\t\t"+str(num)+"\n") #写入信息,防止编码异常的问题,这里try一下

num+=1

except UnicodeEncodeError:

continue

f.close() #关闭文件

以上就是全部的过程了,仔细的朋友可能会发现一点不足,这只能获取在线的。第一次爬取,有不足之处,望见谅,也欢迎大家的批评指正,下面是完整代码:

from bs4 import BeautifulSoup #美丽汤 ,可以很好的读取html标签,本来想练练这个的,可是后来发现用到不到,情况特殊

import requests

import re

import os

def getUrl_wj(url,name): #接口url ,分类名

res = requests.get("https://www.douyu.com"+url)

res.encoding = 'utf-8'

ze = '"rid":(.*?),"rn":".*?","uid":.*?,"nn":"(.*?)"' #rid = 房间号 nn = 主播名

s = re.findall(ze, res.text) #获得主播的房间号 和 名字

global num

f = open("F:\\\\yusheng\\\\"+name+"\\\\zhubo.txt","a") #以追加的模式打开文件txt文件

for x in s:

t = list(x)

try:

f.write(str(t[0])+"\t\t"+str(t[1])+"\t\t"+str(num)+"\n") #写入信息,防止编码异常的问题,这里try一下

num+=1

except UnicodeEncodeError:

continue

f.close() #关闭文件

def getUrl(url):

res = requests.get("https://www.douyu.com" + url) #向指定某分类页发送请求

# 通过接收到的数据,是通过js动态实现多页数据显示的

# 后来通过查看js文件发现他调用了API的接口

# /gapi/rkc/directory/"(分类编号)/(分类页数)

# 所以后面只需要分析接口的数据就行

res.encoding='utf-8'

ze = 'PAGE.rk= "(.*?)";' #指定某个分类的接口编号

ze2 = 'count: "(.*?)",' #指定某个分类的页数

s = re.findall(ze,res.text) #通过正则表达式过滤出信息

s2 =re.findall(ze2,res.text)

return s,s2 #返回 分类接口编号 和 分类页数

def write_info(a1,a2,name): # a1 分类接口编号 a2 分类页数 name 分类名

os.mkdir("F:\\yusheng\\"+name) # 以分类名创建目录

global num # 初始化全局变量 用于统计主播数量

num = 1

for x in range(int(a2[0])): # 循环写入每一页的信息

getUrl_wj("/gapi/rkc/directory/" + str(a1[0]) + "/" + str(x + 1), name)

print("当前完成分类:"+name)

def main_wj():

r = requests.get("https://www.douyu.com/directory") #从分类目录读取所有分类的名字和链接地址

r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'html.parser') #美丽汤,用于html更加简便

urls = []

names = []

for link in soup.select('.unit '): #分类链接和名字的 class 是unit

urls.append(link.select('a')[0]['href']) #添加链接到urls列表

names.append(link.select('a')[0].text.strip().replace(":", "")) #添加分类名到names列表,

# 且替换掉名字中的:,避免后面创建文件夹失败

for url, name in zip(urls, names): #循环遍历列表 urls 和 names

a1, a2 = getUrl(url)

write_info(a1, a2, name)

num = 1

main_wj()

python爬斗鱼直播房间名和主播名,Python爬虫获取斗鱼主播信息相关推荐

  1. python爬取自如房间信息(一)

    使用python和selenium+Chrome Headless爬取自如房间信息,并将结果存储在MongoDB中.其中最麻烦的应该是每间房的价格,因为自如是用一张图片和offset来显示价格,所以不 ...

  2. 使用seleniumphantomjs+bs4抓取斗鱼直播房间信息

    使用selenium&phantomjs+bs4抓取斗鱼直播房间信息 # -*- coding:utf-8 -*-from selenium import webdriver from bs4 ...

  3. python爬虫获取肯德基门店信息

    python爬虫获取肯德基门店信息 1.在谷歌浏览器中打开肯德基官网,进入餐厅查询页面 2.在搜索框中输入地区并按f12打开开发者工具 发现已经抓取到了一条Ajax请求,可以从中获取请求的url,以及 ...

  4. python爬斗鱼直播房间名和主播名_斗鱼爬虫,爬取颜值频道的主播图片和名字

    在斗鱼的界面中,如果滚动条没有拉下去,那么下面的图片都只是一条鱼的图片,所以要使浏览器自动拉动滚动条,可以用到python的selenium库, 1.配置浏览器 要使用selenium,还需要安装 c ...

  5. python爬取直播_python selenium爬取斗鱼所有直播房间信息过程详解

    还是分析一下大体的流程: 发现所有房间的信息都是保存在一个无序列表中的li中,所以我们可以先获取一个装有li的element对象的列表,然后在对每个element逐一操作 分析斗鱼的翻页,有一个下一页 ...

  6. python 爬取直播弹幕视频_调用斗鱼API爬取直播间弹幕信息(用户昵称及弹幕内容)...

    调用斗鱼API爬取直播间弹幕信息(用户昵称及弹幕内容) 查看<斗鱼弹幕服务器第三方接入协议v1.4.1>,了解斗鱼API的使用方法,即如何连接斗鱼弹幕服务器.维持连接及获取弹幕信息 Pyt ...

  7. 经典爬虫学习(四)-selsenium实现斗鱼直播房间信息爬取

    本案例中通过两种不同的selenium作用实现了对斗鱼直播平台的房间信息进行多页爬取. selenium实现信息爬取以及页面跳转功能 selenium实现页面跳转功能,lxml解析库实现数据爬取功能 ...

  8. Python爬虫获取斗鱼主播信息

    感谢参考原文-http://bjbsair.com/2020-03-27/tech-info/7150.html 下面我们进入正题 首先 我们进入斗鱼的官网 我发现首页是一些推荐的主播,并不全面,不能 ...

  9. python爬取直播礼物信息_python爬行虎牙弹幕礼品资料,爬取,礼物,数据

    查看官方文档 官方文档链接:https://dev.huya.com/docs#/%E5%BC%80%E6%94%BEAPI%E6%8E%A5%E5%85%A5%E8%AF%B4%E6%98%8E 会 ...

  10. 基于selenium的斗鱼直播房间详细信息自动化爬虫

    from selenium import webdriver import time #导入 ActionChains 类 from selenium.webdriver import ActionC ...

最新文章

  1. 删除中间结点(直接用来当前节点操作)
  2. densenet tensorflow 中文汉字手写识别
  3. 智能布线系统,“智”在何方
  4. android 关闭蓝牙打电话功能,Android蓝牙开发【八】hfp接听、挂断电话
  5. MySQL 修改视图
  6. 使用CSS和JQuery,模拟超链接的用户单击事件
  7. 【HeadFirst设计模式——开篇】
  8. TensorFlow基础篇(七)——tf.nn.conv2d()
  9. 美赛整理之Matlab的工程数学计算学习笔记(高等数学)
  10. 《YOLO系列原理实战笔记》高清.pdf
  11. 极大似然估计(MLE)
  12. Matlab 2015b安装教程
  13. 一名优秀项目经理需具备的五种基本素质及八大管理技能
  14. C#MySql.Data报错Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
  15. MacBook常用快捷键总结
  16. urho3D 运动逆解Inverse Kinematics
  17. 网络安全中的NISP-SO安全运维工程师都需要那些工具?
  18. 推荐几个ai生成绘画软件给你
  19. Redisson闭锁
  20. 使用VS Code开发AngularJS 2 第一个应用程序

热门文章

  1. Ubuntu安装WebStorm
  2. 什么是自然语言处理(NLP)?
  3. 内外双修,人剑合璧——IT运维人员的九阳神功(大结局)
  4. IMF传奇行动第85课:Spark Streaming第四课:基于HDFS的Spark Streaming案例实战和内幕源码解密
  5. RxJava 学习笔记(七) --- Filtering 过滤操作
  6. 手机wifi显示连接到服务器地址,手机连接路由器wifi上网总是提示正在获取IP地址怎么办...
  7. 麻将开金算法java代_通用麻将胡牌算法
  8. 【matlab实现股票量化分析收盘价曲线作图-附源码】
  9. 清除计算机策略,利用组策略清除历史记录
  10. C语言main函数参数[转:C语言中文网]