为了关注某位主播热度的变化情况,特敲下以下代码。

本次程序导入了requests模块、time模块、lxml模块、matplotlib模块。

代码思维是:

  1. 根据输入的分区名称(area),向斗鱼(https://www.douyu.com/directory/all)发送请求获取响应,用xpath截取分区对应的链接;
  2. 向获取的新链接发送请求获取响应,用xpa替换截取对应主播的热度数据并用列表记录下来;
  3. 根据输入的间隔时间(interval,建议为60s)对步骤2进行循环,当主播下播时,则停止循环;
  4. 根据记录下来的数据,使用matplotlib绘制折线图,并保存图片;
  5. 主播下播后每隔一小时向网页发送请求,直到主播上播,继续循环2、3、4步骤。
    代码如下,欢迎学习交流:
# coding=utf-8import requests
import time
from lxml import etree
from matplotlib import font_manager
from matplotlib import pyplot as plt
from math import ceilclass Douyu_Spider:def __init__(self, area, name, interval):self.area = areaself.name = nameself.interval = intervalself.headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.3", }self.hot_list = []self.time_list = []response = requests.get("https://www.douyu.com/directory/all", headers=self.headers)ret = response.content.decode()html = etree.HTML(ret)self.url_part = html.xpath('''//a[@title="{}"]/@href'''.format(self.area))[0]self.url = "https://www.douyu.com/{}".format(self.url_part)def parse_url(self,url):time_list = list(time.localtime())[3:6]time_str = str(time_list[0]) + ":" + str(time_list[1]) + ":" + str(time_list[2])self.time_list.append(time_str)print(time_str)response = requests.get(url, headers=self.headers)return response.content.decode()def get_info(self,html_str):html = etree.HTML(html_str)hot = html.xpath('''//h2[text()="{}"]/..//span[@class="DyListCover-hot is-template"]/text()'''.format(self.name))if len(hot)>0:hot = hot[0]if hot.count("万"):hot = float(hot[0:-1])*10000else:hot = float(hot[0:-1])self.hot_list.append(hot)print(hot)return Falseelse:self.time_list.pop()return Truedef plot_hot(self):my_font1 = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc', size=18)my_font2 = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc', size=10)plt.figure(figsize=(20,8), dpi=80)x = range(len(self.time_list))plt.plot(x, self.hot_list)# 横坐标理想数为40if len(self.time_list)>40:x_interval = ceil(len(self.time_list)//40)else:x_interval = len(self.time_list)plt.xticks(x[::x_interval], self.time_list[::x_interval], fontproperties=my_font2, rotation=45)plt.xlabel('时间轴', fontproperties=my_font1)plt.ylabel('主播热度', fontproperties=my_font1)plt.title("斗鱼主播《{}》的热度变化图{}-{}".format(self.name, self.time_list[0], self.time_list[-1]), fontproperties=my_font1)plt.grid(alpha=0.3)file_name = "斗鱼主播《{}》的热度变化图{}-{}.png".format(self.name, self.time_list[0].replace(":","_"), self.time_list[-1].replace(":","_"))plt.savefig(file_name)def run(self):while True:time_list = list(time.localtime())[3:6]time_str = str(time_list[0]) + ":" + str(time_list[1]) + ":" + str(time_list[2])print("跟踪:{}".format(time_str))while True:# 1.发送请求,接受响应html_str = self.parse_url(self.url)# 2.每隔1min提取一次热度数据if self.get_info(html_str):if len(self.hot_list)>0:self.interval = len(self.time_list)print("主播已下播")else:print("主播未上线")breaktime.sleep(self.interval)# 3.绘制热度变化图并保存if len(self.hot_list)>0:self.plot_hot()self.hot_list = []self.time_list = []time.sleep(3600)if __name__ == "__main__":area = input('请输入游戏区域:')name = input('请输入主播名字:')a = Douyu_Spider(area, name, 60)a.run()

用Python写爬虫代码,记录斗鱼主播的热度变化情况,并绘制热度变化图。相关推荐

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

    先下载安装Python以及其编写软件 https://www.python.org/downloads/ Python下载官网 选择版本 下面使用的版本为3.6.5 根据自己的操作系统的位数选择 打开 ...

  2. 用python 写爬虫简要记录

    参阅   网络爬虫-Python和数据分析 王澎 中国科技大学 1.python 版本是2.6.6. 2.下载 wget http://www.crummy.com/software/Beautifu ...

  3. python实现直播功能rtmo_30 行 Python 代码实现 Twitch 主播上线实时通知

    在 freeCodeCamp 社区阅读原文. 大家好 :) 今天我将开始写作一个新的文章系列,特别面向 Python 初学者.简言之,我将会尝试更多新的工具,编写尽可能少的代码,来完成一个有趣的项目. ...

  4. 爬虫python 科研有用吗_为什么说用python写爬虫有优势?

    之前和做Java的小伙伴聊过对比Java和python,就以这个为开头,跟大家聊聊为什么要学习python,他有哪些优势吧~ 对比Java和python,两者区别: 1.python的requests ...

  5. python+mysql库+json_用python写爬虫-5.1json用pandas入mysql库

    pandas是一个数据处理模块,前面也已经提到了好些,用python写爬虫--4.5pandas存入excel. 这次来统一说一说,使用感想. pandas主要是Seriers和Dataframe,S ...

  6. 爬虫技术python爬到女性语音_python爬虫看看虎牙女主播中谁最“顶”步骤详解

    网页链接:https://www.huya.com/g/4079 这里的主要步骤其实还是和我们之前分析的一样,如下图所示: 这里再简单带大家看一下就行,重点是我们的第二部分. 既然网页结构我们已经分析 ...

  7. 用Python写爬虫有哪些好处?

    大家都知道,关于爬虫几乎每种编程语言都可以实现,比如:Java.C.C++.python等都可以实现爬虫,但是之所以会选择python写爬虫,是因为python具有独特的优势.那么用python语言写 ...

  8. Python写的代码打包成.exe可执行文件

    Python写的代码打包成.exe可执行文件 1. 安装pyinstaller 2. [在线生成icon](http://www.ico51.cn/) 3. 打包命令 pyinstaller -i x ...

  9. python写表情代码

    python写表情代码 #coding=utf-8 for i in range(0x1f600,0x1f650):print(chr(i),end=" ")if i%16==15 ...

  10. 为什么多迪技术人员都喜欢用python写爬虫?

    有更加成熟的一种爬虫脚本语言,而非框架.是通用的爬虫软件ForeSpider,内部自带了一套爬虫脚本语言.很多同学学php的,但是也自学过python,对php了解还是比较深的,为什么多迪技术人员都喜 ...

最新文章

  1. java多线程的同步
  2. 新手福利:Apache Spark 入门攻略
  3. VS中的C#项目怎样引入另一个项目
  4. (转)怎样完全用 GNU/Linux 工作
  5. JS OOP -02 深入认识JS中的函数
  6. python在工厂中的应用_Python工厂方法
  7. 2-6 基于SpringBoot的SpringSecurity环境快速搭建与验证
  8. LeetCode 914. 卡牌分组
  9. pdfwin10闪退_win10系统打开文件夹闪退的解决方法
  10. dcopserver出错解决办法
  11. [转载]DB2数据库移植罕见结果周全理会(3)
  12. C++_limits头文件
  13. 用友ERP-NC系统 漏洞 NCFindWeb接口任意文件下载
  14. 数学建模小白必备手册
  15. 基于c语言图书管理系统设计与开发,基于C语言图书管理系统设计与实现.doc
  16. vscode ubuntu18.04安装失败
  17. Mstar平台_遥控器驱动
  18. Day01_01_Linux_Ubuntu教程之Linux系统简介
  19. 计算机工程与应用 卷号,计算机专业毕业设计软件设计类论文各章节标题与格式规范...
  20. 《周志华机器学习》简要

热门文章

  1. Win10商店打开无法加载页面,代码0x80131500,解决办法
  2. 移动光猫拨号,IPV6访问内网
  3. 突发!阿里巴巴大调整
  4. OPPO R7Plusm(全网通)root、刷入twrp recovery、卡刷刷入CM系统教程合集_ recovery.img文件下载 联想A7600-m线刷刷机教程 手机卡在双4G双百兆无法开
  5. 《关键信息基础设施安全保护条例》来了!完善网络安全体系 华云数据构筑云上安全屏障
  6. git基于master创建新分支
  7. 安卓的数据共享——从一个APP中调用另一个APP数据的方法
  8. cPanel主机自定义php.ini文件
  9. js 鼠标悬浮div显示tip,离开tip消失,不用单独写鼠标离开事件
  10. 工程经济作业1答案_2018年电大《工程经济与管理》阶段作业1及答案(网上作业).doc...