思路

1, 解析URL

2, 利用爬虫神器 bs4 和 正则表达式得到想要的信息;
3, 进库和本地保存

DJango后台展示和本地CSV(卖相太差,不发了)

* 存储本地的CSV 直接运行 DySpyder().summary_data180() 即可*

直接上代码

# -*- coding: utf-8 -*-
import os
import re
import django
import urllib.request as urclass DySpyder():def __init__(self):passdef open_url(self, url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}req = ur.Request(url=url, headers=headers)  # python2,urllib.request()response = ur.urlopen(req)  # python2,urllib2.urlopen()return response.read().decode('utf-8')def tv_spyder(self):## 通过 xhr 请求可以看到url = "https://www.douyu.com/directory/all/?page=1&isAjax=1"data = self.open_url(url)from bs4 import BeautifulSoupcate = ['', 'serach_lastli', 'last','lastserach_lastli']  # - - s- l - ll 6loopsoup1 = BeautifulSoup(data, 'html.parser')soup = soup1.find("ul", id='live-list-contentbox')res = []for c in cate:tmp = soup.findAll('li', c)res.extend(tmp)return resimport datetimedef set_data(self, x):import datetimeres = {}# title.__init__title0 = str(x.find("h3").next_element)spans = x.findAll(["span"])# basic info to the linktag, dy_name, dy_num = tuple([s.next_element for s in spans][2:5])parterb = r'''.*<img data-original=(.*?) height="163" src=(.*?) width="283"/>.*'''# the urls of img and gifimg, gif = re.findall(parterb, repr(x))[0]p2 = r'''.*a class="play-list-link" (.*?)=(.*?) (.*?)=(.*?) (.*?)=(.*?) (.*?)=(.*?) (.*?)=(.*?) (.*?)=(.*?) (.*?)=(.*?) (.*?)=(.*?)>.*'''t1 = [x for x in re.findall(p2, repr(x))][0]# the head of link-infofor i in range(int(len(t1)/2 - 1)):res.setdefault(t1[2*i], t1[2*i+1])res.setdefault("dt", datetime.datetime.today())res.setdefault('tag', tag)res.setdefault('dy_name', dy_name)res.setdefault('dy_num', dy_num)res.setdefault('title0', title0)res.setdefault('img', img)res.setdefault('gif', gif)return resdef summary_data180(self):l = [self.set_data(x) for x in self.tv_spyder()]import pandas as pddf_tmp = pd.DataFrame(l)df_tmp.to_csv("C:\\Users\\lenovo\\Desktop\\dy180.csv")return df_tmp#print(summary_data180())def main(self):os.environ.setdefault("DJANGO_SETTINGS_MODULE", "minicms.settings")django.setup()from tv.models import Infofrom django.utils import timezonedf = self.summary_data180()print(df.columns)import numpy as nparray2 = np.array(df)for i in range(len(df)):Info.objects.create(data_rid=array2[i][0],data_rpos=array2[i][1],data_sid=array2[i][2],data_sub_rt=array2[i][3],data_tid=array2[i][4],dt=timezone.now(), ##修改了时间dy_name=array2[i][6],dy_num=array2[i][7],gif=array2[i][8],href=array2[i][9],img=array2[i][10],tag=array2[i][11],target=array2[i][12],title0=array2[i][13])print("执行完毕")dyspyder = DySpyder()
#dyspyder.main()

没有 Django 模板, 爬取所有的模板2

import os
import re
import urllib.request as urclass DySpyder():def __init__(self, url):self.url = urldef open_url(self, url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}req = ur.Request(url=url, headers=headers)  # python2,urllib.request()response = ur.urlopen(req)  # python2,urllib2.urlopen()return response.read().decode('utf-8')def from_url_get_all_lis(self):data = self.open_url(self.url)from bs4 import BeautifulSoupsoup1 = BeautifulSoup(data, 'html.parser')soup = soup1.findAll("li")return soupdef tv_spyder(self, x):rid = re.findall(""".*?data-rid="(.*?)".*""", str(x))[0]title = re.findall(""".*?title=(.*?)>.*""", str(x))[0]href = re.findall(""".*?href="(.*?)".*""", str(x))[0]pic = re.findall('''.*?<img data-original="(.*?)".*''', str(x))[0]tag = re.findall('''.*<span class="tag ellipsis">(.*?)</span>.*''', str(x))[0]name = re.findall('''.*<span class="dy-name ellipsis fl">(.*?)</span>.*''', str(x))[0]see_num = re.findall('''.*<span class="dy-num fr".*?>(.*?)</span>.*''', str(x))[0]t = rid, pic, title, tag, name, see_num, hrefreturn tdef get_url(page):return "https://www.douyu.com/directory/all?page="+ str(page) +"&isAjax=1"res1 = []
for i in [j+1 for j in range(20)]:douyu = DySpyder(get_url(i))for x in douyu.from_url_get_all_lis():try:res1.append(list(douyu.tv_spyder(x)))except:print(x)
import pandas as pd
import numpy as np
df = pd.DataFrame(np.array(res1))
df.to_csv("demo.csv")

后续

  • 随着时间更新, 每隔 10min 自动一次到数据库——可以获取 Tag 或者用户的规律
  • 增加 虎牙-战旗-龙珠 的数据
  • 增加图片进库和自己定义的页面实时优化; 实现多直播平台的归一化推荐

Django 存库模板

from django.db import models# Create your models here.class Info(models.Model):data_rid = models.CharField("房间ID", max_length=20)data_rpos = models.CharField("", max_length=20)data_sid= models.CharField("", max_length=20)data_sub_rt = models.CharField("", max_length=20)data_tid = models.CharField("", max_length=20)dt = models.DateTimeField("时间")dy_name = models.CharField("账号名字", max_length=50)dy_num = models.CharField("观看数", max_length=20)gif= models.CharField("GIF", max_length=120)href = models.CharField("房间url", max_length=20)img = models.CharField("IMG_url", max_length=120)tag = models.CharField("标签", max_length=120)target = models.CharField("目标", max_length=20)title0 = models.CharField("标题", max_length=120)def __str__(self):return self.dy_name + "_" + self.title0class Meta:verbose_name = '斗鱼时间信息'verbose_name_plural = '斗鱼时间信息180条'class ImgTools(models.Model):img_url = models.URLField(verbose_name="线上路径")dt = models.DateTimeField("时间")data_rid = models.CharField("房间ID", max_length=20)upload_to = models.URLField(verbose_name="本地路径")

TXT 爬取更新

def find_min(nums):for i in range(len(nums)):if nums[i+1] > nums[i]:return i, nums[i]def set_urls(book_id):url = "http://www.biqudu.com/" + book_id + "/"partern = r".*<dd> <a href=(.*?)>(.*?)</a></dd>.*"import pandas as pdimport numpy as np## 本方法不能分卷, 后续补上相关的事情优化df1 = pd.DataFrame(np.array(re.findall(partern, open_url(url))), columns=["url", "title"])df1["num"] = [int(list(re.findall(r".*/(.*?).html", x))[0]) for x in df1["url"]]####### find all-spanstart_index = find_min(df1["num"])[0]return df1[start_index: len(df1)]# 为单独一个小说页面爬取;txt 文档; content;
def detail():url = "http://www.biqudu.com/21_21470/1394112.html"data = open_url(url)from bs4 import BeautifulSoupsoup = BeautifulSoup(data, 'html.parser')content = soup.findAll('div', id="content")[0]return content# print(detail())def test(request):content = detail()return render(request, "base_test.html", {"content": content})

* 近期会花精力弄微信小程序, 爬虫放置一段时间。 ==== END ====*

斗鱼直播实时数据爬取相关推荐

  1. Python 大数据分析疫情:如何实现实时数据爬取及 Matplotlib 可视化?

    作者 | 杨秀璋 来源 | CSDN博客专家Eastmount 责编 | 夕颜 思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图 ...

  2. [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势

    思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图显示.情感分析.舆情分析.主题挖掘.威胁情报溯源.知识图谱.预测预警及AI和NL ...

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

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

  4. Scrapy项目 - 数据简析 - 实现斗鱼直播网站信息爬取的爬虫设计

    一.数据分析截图(weka数据分析截图 2-3个图,作业文字描述) 本次将所爬取的数据信息,如:房间数,直播类别和人气,导入Weka 3.7工具进行数据分析.有关本次的数据分析详情详见下图所示:   ...

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

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

  6. 【爬虫】基于requests的B站直播实时弹幕爬取

    ​​​​​​ 网页分析 进入Network在众多响应中寻找和弹幕相关的API, 图3-1 B站直播房间页面的开发者工具界面preview 图3-2 在3-2展示的页面中可以查看到URL中有参数room ...

  7. 百度地图实时路况数据爬取

    最近为了参加"华为杯"数学建模的国赛,学校组织了一次校内选拔,题目要求收集不同时段的交通方面数据,建立评价体系,并对整体交通划线效果给出相应评价,看到题目我就方了,这个交通数据怎么 ...

  8. python动态爬取实时_python爬取动态数据实战---猫眼专业版-实时票房(二)

    学习python进行简单的数据爬取(基于python 3.x).再进行数据页面解析之后,使用scrapy框架进行爬取数据.没有实现自己预想的效果,着实是自己能力有限,无法灵活使用该框架.就使用自己的办 ...

  9. python数据爬取疫情实时数据

    jupyter笔记本 交互性强,可以代码块执行 一.数据爬取 网站:实时更新:新冠肺炎疫情最新动态 1. 导入所需库 #导入库 import time import json import reque ...

  10. 爬虫之websocket数据爬取

    收集了大家的问题.我又重新写了一篇websocket的代码,并添加了注释,在文章最后.希望可以解决大家遇到的问题- websocket是最近开发很常用的技术之一,他可以一直保持着连接不断,但是你的页面 ...

最新文章

  1. Java中ThreadPoolExecutor的参数理解
  2. optee中添加一个中断以及底层代码的相关解读
  3. 【Python】精选30张炫酷的动态交互式图表,Pandas一键生成,通俗易懂
  4. 循环队列 队空、队满 条件
  5. 细学PHP 09 MySql
  6. 机器学习笔记(2):单变量线性回归
  7. android创建Menu菜单
  8. Apache HTTP Server与Tomcat 的三种连接方式介绍
  9. []TLD code run
  10. 王道 计算机网络试题讲解_王道考研 计算机网络(7)学习笔记
  11. 乌班图服务器系统升级,快速从Ubuntu 20.10升级到Ubuntu 21.04的方法
  12. 关于PreScan的Vissim插件
  13. DataSet用法详细 转
  14. 人大金仓数据库工程师培训实战教程(同步复制、读写分离、集群高可用)
  15. Iterator中的 FailFast FailSafe【学习笔记】
  16. GIS案例学习笔记-多边形内部缓冲区地理模型
  17. Bmob后端云的使用
  18. Qt调用7z实现压缩和解压缩
  19. 数字化经营快速发展,微火专注做智慧数字经营系统解决方案提供商
  20. Unity学习笔记1 简易2D横版RPG游戏制作(一)

热门文章

  1. 200套web前端期末大作业 HTML+CSS+JavaScript网页设计实例 企业网站制作 [建议收藏]
  2. Mac上的免费数据库可视化工具:Sequel Pro
  3. html js打开一个新页面跳转,js页面跳转
  4. chrome PPAPI 开发(一)
  5. 如何获取JVM的dump文件
  6. 如何进行cad地理配准_如何对扫描图片进行ArcGIS配准?
  7. Springboot个人博客搭建(附源码)
  8. 声网Agora 孙雨润:下一代实时传输体系结构的升级与应用
  9. 矢量地图自定义切片样式
  10. 三菱伺服驱动器示例_三菱PLC控制伺服电机编程实例