前言:

几乎所有主流信息网站/平台都有各自平台的榜单,这份榜单显示了网站在本日或一段时间以来的重要事件或突出内容。通过这份榜单可以获取这个网站的主流信息,以及诸多重要内容,一些大平台或主流应用的榜单甚至可以显示当前社会的某些现状与问题。

例如,通过微博热搜榜可以获取时下处于热点的时事新闻或娱乐花边。通过B站日榜可以获取当下年轻人爱好以及关注点,通过豆瓣榜单可以了解到大众对于书籍影视等产品类型的关注程度与喜好方向。这其中,前两者时限性很强,热搜榜每分钟进行一次更新,B站日榜每天进行更新

因此,如何获取这份榜单,并且持续高效的保存其中内容就显得十分具有现实意义。一天的榜单或许不能显示太多的信息,但大量的数据往往能展示出一定的规律性,也就具有了研究价值

流程

  1. 准备阶段

    • 云数据库的使用
    • 云服务器的使用
  2. 代码实现阶段
    • 利用python(bs4+pymysql+schedule)实现爬虫部分
    • SQL代码实现数据库创建
  3. 部署阶段
    • 云服务器选择
    • 数据库与服务器本地连接
    • SCREEN

准备阶段

云数据库

云数据库的好处主要在于方便简单,可以任意访问,并且使用云数据库可以避免爬取数据量过大时对自身电脑的影响

这里我选择购买的是腾讯云的MySQL基础班数据库,学生阶段还有很大的优惠

进入控制台后,选择管理就可以启动外网地址,这样我们就可以直接在本地连接到腾讯云数据库

获得了外网地址并且设置了用户名与密码后,就可以在本地直接连接已购买的云数据库了,这里采用了navicat连接云数据库,navicat在连接选项中直接包括了腾讯云的MySQL数据库,直接点击,然后选择SSH连接,在准确输入各项信息,就可以成功连接到云数据库中,非常的简单便利


云服务器

综合尝试了市面上常见的几款云服务器的基础班,阿里的阿里云,腾讯的腾讯云,亚马逊的AWS,以及谷歌的谷歌云,综合比较下来,由于我们要实现的功能比较简单,所以以上几款云服务器的基础版完全都可以实现,其中相对配置较复杂的是亚马逊(也可能是我选择的服务器问题)

代码实现阶段

代码实现主要分为两部分,首先是爬虫部分如何从微博与B站获取信息,以及获取到信息后如何进行数据清洗。其次是数据库与表格的创建

利用python实现爬虫部分

爬虫部分用到了bs4来解析网页,由于微博对热搜榜内容基本未作任何处理,所以很好获取

# 爬取微博热搜榜
def getHotNews():newsList=[]   # 存储热搜榜主要信息nums=[]headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'}  # 伪装标头res=requests.get('https://s.weibo.com/top/summary',headers=headers)  # 请求网页soup = BeautifulSoup(res.text,'html.parser')  # 解析网页result=soup.find_all('td',class_='td-02')  # 找到目标信息,td-02是每个新闻主体的类标签num=0startTime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 记录开始时间for i in result:num+=1content=i.find('a').text  # 事件内容try:attention=i.find('span').text  # 事件关注度except:attention=0nums.append([num,content,attention,startTime])  # 将有关信息添加至列表中return nums  # 返回信息列表# 爬取微博实时榜
def getSocialNews():newsList=[]headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'}res2=requests.get('https://s.weibo.com/top/summary?cate=socialevent',headers=headers)soup2 = BeautifulSoup(res2.text,'html.parser')result2=soup2.find_all('td',class_='td-02')num=0startTime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())for i in result2:num+=1content=(i.find('a').text).strip('#')newsList.append([num,content,startTime])return newsList

B站日榜爬虫部分

# 爬取B站日榜新闻
def BilibiliNews():newsList=[]# 伪装标头headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'}res=requests.get('https://www.bilibili.com/ranking/all/0/0/3',headers=headers) # 请求网页soup = BeautifulSoup(res.text,'html.parser')  # 解析网页result=soup.find_all(class_='rank-item')  # 找到榜单所在标签num=0startTime=time.strftime("%Y-%m-%d", time.localtime())  # 记录爬取的事件for i in result:try:num=int(i.find(class_='num').text)  # 当前排名con=i.find(class_='content')  title=con.find(class_='title').text  # 标题detail=con.find(class_='detail').find_all(class_='data-box')play=detail[0].text  # 播放量view=detail[1].text  # 弹幕量# 由于这两者存在类似15.5万的数据情况,所以为了保存方便将他们同义转换为整型if(play[-1]=='万'):play=int(float(play[:-1])*10000)if(view[-1]=='万'):view=int(float(view[:-1])*10000)# 以下为预防部分数据不显示的情况if(view=='--'):view=0if(play=='--'):play=0author=detail[2].text  # UP主url=con.find(class_='title')['href']  # 获取视频链接BV=re.findall(r'https://www.bilibili.com/video/(.*)', url)[0]  # 通过正则表达式解析得到视频的BV号pts=int(con.find(class_='pts').find('div').text)   # 视频综合得分newsList.append([num,title,author,play,view,BV,pts,startTime])  # 将数据插入列表中except:continuereturn newsList  # 返回数据信息列表

常见问题解决

在爬取信息过程中,出现了一部分难以处理的数据,就是B站的标题部分,在爬取到舞蹈区时出现了数据无法成功上传到数据库的情况,问题的原因就是标题内容中含有emoji表情字符。

解决方法有两种,一种是修改数据库的编码格式,适应emoji表情包即可,另一种就是在获取数据后,筛除掉数据中的表情包字符,由于表情包字符对于数据分析以及最后的结果几乎不构成影响,所以我这里采用了直接筛除表情包字符的方式来解决这个问题

筛除的方式也是多样的,可以利用正则表达式限定字符的范围,从而过滤掉表情包内容。一种比较简便的方式就是利用python中的emoji库,里边内置了一系列方法可以解决这个问题

title=con.find(class_='title').text  # 获取标题
title2=emoji.demojize(title)  # 转换emoji字符
title=re.sub(r':(.*?):','',title2).strip()  # 然后利用正则表达式删除这部分内容

MySQL部分-数据库创建与数据插入

关于数据库的创建,你可以选择直接定义在python中,再插入数据前自动创建表格,也可以选择先创建好表格,这样之后的方法中只需要定义如何插入数据

mysql> create table BILIBILI(-> NUM INT,-> TITLE CHAR(80),-> UP CHAR(20),-> VIEW INT,-> COMMENT INT,-> BV_NUMBER INT,-> SCORE INT,-> EXECUTION_TIME DATETIME);

将数据插入MySQL

def GetMessageInMySQL():# 连接数据库db = pymysql.connect(host="cdb-cdjhisi3hih.cd.tencentcdb.com",port=10056,user="root",password="xxxxxx",database="weixinNews",charset='utf8')cursor = db.cursor()  # 创建游标news=getHotNews()  # 调用getHotNews()方法获取热搜榜数据内容sql = "INSERT INTO WEIBO(NUMBER_SERIAL,TITLE, ATTENTION,EXECUTION_TIME) VALUES (%s,%s,%s,%s)"  # 插入语句timebegin=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 记录开始事件,便于查找错误发生情况try:# 执行sql语句,executemany用于批量插入数据cursor.executemany(sql, news)# 提交到数据库执行db.commit()print(timebegin+"成功!")except :# 如果发生错误则回滚db.rollback()print(timebegin+"失败!")# 关闭游标cursor.close()# 关闭数据库连接db.close()

数据插入数据库过程失败常见原因

  • 数据类型不匹配
  • 数据大小超出规定限制
  • 插入语句不准确
  • 插入列表的问题

利用schedule实现定时爬取

# 记录程序运行事件
time1=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print("开始爬取信息,程序正常执行:"+time1)
# 每20分钟执行一次程序
schedule.every(20).minutes.do(startFunction)
# 检查部署的情况,如果任务准备就绪,就开始执行任务
while True:schedule.run_pending()time.sleep(1)

部署到云服务器阶段

由于榜单的时效性,所以我们必须不断获取数据,得到大量资料才有分析的价值。因此在自己个人电脑上运行程序就变得不现实,一方面,我们无法持续运行程序,电脑的开关机以及软件的关闭都会终止程序,我们需要时刻关注着代码进程才能及时重新运行软件。另一方面,持续在后台运行多个程序会占用电脑CPU,影响我们的日常使用

综上,将代码部署在云服务器上,是一种最优的解决方案,云服务器不会有关机的顾虑,代码可以持续运行不断爬取数据,云服务器还可以利用screen进行终端切换,完全不影响我们其他程序的正常运行


为了使程序的进行不影响云服务器的使用,而是独立运行,可以使用大部分Linux系统中都有的screen。

利用screen创建独立终端:

screen -S TEST
# TEST是终端的名称

执行后会进入一个新的终端,我们可以直接在这个新终端中执行程序

python3 /usr/main.py

程序开始执行后,我们不需要再操作这个终端时,就可以按住CTRL+a+d退出该终端界面,退出终端后,如果向再次进入该终端可以通过screen -ls查看当前存在的终端列表

然后通过以下命令就可以再次进入该终端中

screen -r 1602
# 1602就是要进入的终端编号

程序在终端中成功运行:

最终数据库效果

结语

因为部分内容是初步学习,所以不足之处肯定还有很多,也饶了很多弯路,花费时间最长的就是在服务器和数据库的配置过程上,各个平台内置软件并不相同,采用的系统或版本也出入很大,可以说做了很多无用功。不过最终得到的成功还是比较满意,也基本实现了初始设想的功能。

数据是基础,后续的分析过程是关键,只有不断了解深入,才能让获取到的数据展现出应有的功用与价值


http://www.taodudu.cc/news/show-2619036.html

相关文章:

  • Windows 8轻松用系列
  • 从一条微博揭秘专黑大V名人的定向攻击
  • Win10电脑出现No Bootable Device且无法开机或开机后蓝屏无限重启的多个解决方法
  • 计算机桌面文件能单独设密码吗,win7文件夹设置密码_给单独一个文件夹设密码...
  • Python+MySQL+云服务器 定时爬取B站日榜与微博热搜榜信息并保存至数据库
  • python 爬虫3 新浪微博 爬虫 实战
  • 【数据分析与挖掘(二)】面试题汇总(附答案)
  • Win8快速开关机的奥妙:假关机还是真休眠?
  • win2008 mysql 群集_win2003服务器下配置 MySQL 群集(Cluster)的方法 -电脑资料
  • 为Win7关机按钮菜单增加“休眠”选项
  • 假关机or真休眠? Win 8开关机刨根问底
  • android刷win8,驰为VX8 3G Win8刷安卓系统固件教程发布
  • 用css做一个梦幻西游动画特效
  • CSS-animation-梦幻西游小案例
  • 梦幻西游ps计算机,五开选择PS与NE:那是因为效率高的缘故
  • CSS实例——梦幻西游
  • 梦幻西游小动画仿写
  • CSS动画:梦幻西游
  • ccs 动态梦幻西游
  • 实战:利用CSS动画制作一个梦幻西游动态页面
  • 本周测试服务器角色转移系统仅开放转入,梦幻西游3月11日更新一览
  • 梦幻西游战斗中服务器维护,梦幻西游10月22日维护公告 连续战斗自动问题修复...
  • 单机梦幻西游
  • 利用CSS制作一个梦幻西游小动画
  • css和html实现梦幻西游页面特效
  • html图片铺底代码,梦幻西游底部师徒四人动态图
  • 服务器尚未完成维护梦幻西游,梦幻西游维护公告
  • animate.css 梦幻西游动画
  • css轻松写出梦幻西游动画效果
  • css梦幻西游动画

[数据库+python] 定时爬取B站日榜与微博热搜榜信息并保存至数据库相关推荐

  1. 从入门到入土:Python实现爬取某站视频|根据视频编号|支持通过视频名称和创作者名称寻找编号|以及python moviepy合并音频视频

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) Python实现爬取某站视频|根据视频编号|支持通过视频名称 ...

  2. Python爬取微博热搜榜,将数据存入数据库

    一直想学习用Python来进行数据的爬取,也一直想知道Python连接数据库的操作,今天刚好看到的这篇文章满足了这两个条件,我试着爬了下微博,并成功将数据添加到数据库中,颇为欢喜.作者写的很简单,有些 ...

  3. Python定时爬取上证指数

    Python定时爬取上证指数 作为一名初出茅庐的股民,在这中美贸易战的关键时刻,当然得实时关注我大A股的动向啦,所以就写了这只小爬虫~ 选择网站 首先呢,各大网站都有A股指数的数据,但是对网易云的喜爱 ...

  4. python爬取微博热搜榜

    python爬取微博热搜榜 最近应我大学室友得需求,做了一个简单的爬虫案例,先给大家看一下程序运行效果 接下来就是贴出代码了,在这里我会做一些简单说明,对如刚入门的同学可能会有所帮助,这里使用的是py ...

  5. Python 超简单爬取微博热搜榜数据

    微博的热搜榜对于研究大众的流量有非常大的价值.今天的教程就来说说如何爬取微博的热搜榜. 热搜榜的链接是: https://s.weibo.com/top/summary/ 用浏览器浏览,发现在不登录的 ...

  6. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...

    一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...

  7. c#使用正则表达式获取TR中的多个TD_使用python+BeautifulSoup爬取微博热搜榜

    本文将介绍基于Python使用BeautifulSoup爬取微博热搜榜的实现过程 1.首先导入需要使用的库 from bs4 import BeautifulSoup from urllib.requ ...

  8. 爬虫—爬取微博热搜榜

    1. 引言 利用scrapy框架爬取微博热搜榜网站前50条热搜. 爬取信息:热搜排名.热搜新闻名.热搜新闻热搜量. 数据存储:存储为.csv文件. 2.爬取流程 新建scrapy爬虫项目: 在终端输入 ...

  9. python热搜排行功能_用Python做一个微博热搜榜的语音播报

    微博是一个社交平台,有高效的信息流,几乎所有人能在这上面找到自己感兴趣的内容.经常使用微博的小伙伴,大家对微博热搜榜应该都不会很陌生.每天发生了什么新闻呢,谁谁谁又上热搜了. 在这个信息社会,每天发生 ...

  10. python热搜排行功能_手把手教你用Python+Pyecharts让微博热搜榜动起来

    今天教大家如何用pyecharts制作微博热搜榜动态展示视频,先上视频看看效果: 教程主要有2部分: 一是python爬取微博热搜内容 二是用pyecharts制作动态视频 下面给大家详细介绍一下 一 ...

最新文章

  1. 物联网的层次结构如何划分?
  2. Delphi制作图像特殊显示效果
  3. 笔趣看小说全部章节爬取实战
  4. 很强大的一个jquery分页插件
  5. python attention机制_从零开始学Python自然语言处理(26)—— 强大的Attention机制...
  6. django+layUI表格序号自动增加
  7. Spring框架----IOC的概念和作用之程序的耦合和解耦
  8. linux搭建邮件服务器
  9. Windows电脑添加打印机
  10. CenterNet: Keypoint Triplets for Object Detectiontection学习笔记
  11. windbg挂代理下载pdb
  12. 什么是Linux内存管理中的RSS和VSZ
  13. 连接到mysql提示错误:The server time zone value is unrecognized or represents more than one time zone
  14. python 一张图画多条线_Python画多条线在一个图里
  15. 【PANDA教程】PANDA详细教程笔记
  16. 红外热成像仪原理与用途——TFN TD97 双目手持热像仪红外夜视仪
  17. Internet Explorer 11内置浏览器的下载
  18. 命令python所在的驱动器和文件夹_Python文件夹与文件的操作-阿里云开发者社区...
  19. ffmpeg从视频中提取图片
  20. Js 日期与字符串互相转换

热门文章

  1. 修改电脑IP地址和MAC地址
  2. Eclipse WindowBuilder安装过程
  3. adjacent_diffenerce
  4. 2022 职业院校移动开发总结(uni-app)
  5. 2022年12月最新微博新版批量删除微博博文代码_删除清空微博博文的微博批量删除代码与方法
  6. 大量用户反馈 QQ 账号被盗;​AirPods Pro2 或支持查找功能;Spring Boot 2.7.1发布|极客头条
  7. DSP大数据精准广告的介绍
  8. 复合文档格式(一)- Excel XLS文件格式
  9. 【luoguP1922】女仆咖啡厅桌游吧
  10. TYPHOON cms漏洞 简书(ssh篇)