斗鱼直播实时数据爬取
思路
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 ====*
斗鱼直播实时数据爬取相关推荐
- Python 大数据分析疫情:如何实现实时数据爬取及 Matplotlib 可视化?
作者 | 杨秀璋 来源 | CSDN博客专家Eastmount 责编 | 夕颜 思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图 ...
- [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势
思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图显示.情感分析.舆情分析.主题挖掘.威胁情报溯源.知识图谱.预测预警及AI和NL ...
- 经典爬虫学习(四)-selsenium实现斗鱼直播房间信息爬取
本案例中通过两种不同的selenium作用实现了对斗鱼直播平台的房间信息进行多页爬取. selenium实现信息爬取以及页面跳转功能 selenium实现页面跳转功能,lxml解析库实现数据爬取功能 ...
- Scrapy项目 - 数据简析 - 实现斗鱼直播网站信息爬取的爬虫设计
一.数据分析截图(weka数据分析截图 2-3个图,作业文字描述) 本次将所爬取的数据信息,如:房间数,直播类别和人气,导入Weka 3.7工具进行数据分析.有关本次的数据分析详情详见下图所示: ...
- python爬斗鱼直播_python selenium爬取斗鱼所有直播房间信息过程详解
还是分析一下大体的流程: 发现所有房间的信息都是保存在一个无序列表中的li中,所以我们可以先获取一个装有li的element对象的列表,然后在对每个element逐一操作 分析斗鱼的翻页,有一个下一页 ...
- 【爬虫】基于requests的B站直播实时弹幕爬取
网页分析 进入Network在众多响应中寻找和弹幕相关的API, 图3-1 B站直播房间页面的开发者工具界面preview 图3-2 在3-2展示的页面中可以查看到URL中有参数room ...
- 百度地图实时路况数据爬取
最近为了参加"华为杯"数学建模的国赛,学校组织了一次校内选拔,题目要求收集不同时段的交通方面数据,建立评价体系,并对整体交通划线效果给出相应评价,看到题目我就方了,这个交通数据怎么 ...
- python动态爬取实时_python爬取动态数据实战---猫眼专业版-实时票房(二)
学习python进行简单的数据爬取(基于python 3.x).再进行数据页面解析之后,使用scrapy框架进行爬取数据.没有实现自己预想的效果,着实是自己能力有限,无法灵活使用该框架.就使用自己的办 ...
- python数据爬取疫情实时数据
jupyter笔记本 交互性强,可以代码块执行 一.数据爬取 网站:实时更新:新冠肺炎疫情最新动态 1. 导入所需库 #导入库 import time import json import reque ...
- 爬虫之websocket数据爬取
收集了大家的问题.我又重新写了一篇websocket的代码,并添加了注释,在文章最后.希望可以解决大家遇到的问题- websocket是最近开发很常用的技术之一,他可以一直保持着连接不断,但是你的页面 ...
最新文章
- Java中ThreadPoolExecutor的参数理解
- optee中添加一个中断以及底层代码的相关解读
- 【Python】精选30张炫酷的动态交互式图表,Pandas一键生成,通俗易懂
- 循环队列 队空、队满 条件
- 细学PHP 09 MySql
- 机器学习笔记(2):单变量线性回归
- android创建Menu菜单
- Apache HTTP Server与Tomcat 的三种连接方式介绍
- []TLD code run
- 王道 计算机网络试题讲解_王道考研 计算机网络(7)学习笔记
- 乌班图服务器系统升级,快速从Ubuntu 20.10升级到Ubuntu 21.04的方法
- 关于PreScan的Vissim插件
- DataSet用法详细 转
- 人大金仓数据库工程师培训实战教程(同步复制、读写分离、集群高可用)
- Iterator中的 FailFast FailSafe【学习笔记】
- GIS案例学习笔记-多边形内部缓冲区地理模型
- Bmob后端云的使用
- Qt调用7z实现压缩和解压缩
- 数字化经营快速发展,微火专注做智慧数字经营系统解决方案提供商
- Unity学习笔记1 简易2D横版RPG游戏制作(一)
热门文章
- 200套web前端期末大作业 HTML+CSS+JavaScript网页设计实例 企业网站制作 [建议收藏]
- Mac上的免费数据库可视化工具:Sequel Pro
- html js打开一个新页面跳转,js页面跳转
- chrome PPAPI 开发(一)
- 如何获取JVM的dump文件
- 如何进行cad地理配准_如何对扫描图片进行ArcGIS配准?
- Springboot个人博客搭建(附源码)
- 声网Agora 孙雨润:下一代实时传输体系结构的升级与应用
- 矢量地图自定义切片样式
- 三菱伺服驱动器示例_三菱PLC控制伺服电机编程实例