这是b站的完结番剧界面,它属于b站-番剧分区-完结动画区,今天来爬取b站的完结番剧,来了解他们的播放量和硬币数等。

爬取方法:

B站是一个对于爬虫是一个很友好的网站,它对于爬虫有专门的接口

https://github.com/uupers/BiliSpider/wiki


这个网址中有b站各个区域的接口,由于我们爬取的是b站二级分区数据,所以我们可以在这个网页右侧的[Bilibili API 二级分区视频分页数据(投稿时间逆序)]链接中,我们可以看到b站视频数据接口的信息。它是一个json文件。

我们需要用到的就是这部分信息,我们就转而获取视频接口信息的json文件,提取出想要的文件来保存在csv文件中。

我们总的思路是获取视频信息的json文件->提取json数据->保存数据为csv

在爬取过程中,很多网站都有自己的接口,我们可以去寻找接口来让爬取过程变得简单。

具体实现:

这个就是我们所需要获取的json文件的地址了

def get_url():url = 'http://api.bilibili.com/x/web-interface/newlist?rid=32&pn='for i in range(1, 328):urls.append(url + str(i) + '&ps=50')

得到json文件中的信息

def get_message(url):print(url)time.sleep(1)#一秒爬一次,运用了4个线程就是一秒爬4次try:r = requests.get(url, timeout=5)data = json.loads(r.text)['data']['archives']for j in range(len(data)):content = {}content['aid'] = data[j]['aid']content['title'] = data[j]['title']content['view'] = data[j]['stat']['view']content['danmaku'] = data[j]['stat']['danmaku']content['reply'] = data[j]['stat']['reply']content['favorite'] = data[j]['stat']['favorite']content['coin'] = data[j]['stat']['coin']comic_list.append(content)except Exception as e:print(e)

然后写入csv文件

def write_to_file(comic_list):#写入csv文件with open(r'bilibili-comic.csv', 'w', newline='', encoding='utf-8') as f:fieldnames = ['aid', 'title', 'view', 'danmaku', 'reply', 'favorite', 'coin']writer = csv.DictWriter(f, fieldnames=fieldnames)writer.writeheader()try:writer.writerows(comic_list)except Exception as e:print(e)

我的电脑是4核的就创建4个线程,然后调用map函数运行get_messsage函数

get_url()
pool = ThreadPool(4)
pool.map(get_message, urls)
pool.close()
write_to_file(comic_list)

整体的代码

import requests
import json
import csv
from multiprocessing.dummy import Pool as ThreadPool#导入多线程库
import time
import oscomic_list = []
urls = []
6def get_url():url = 'http://api.bilibili.com/x/web-interface/newlist?rid=32&pn='for i in range(1, 328):urls.append(url + str(i) + '&ps=50')def get_message(url):print(url)time.sleep(1)#一秒爬一次,运用了4个线程就是一秒爬4次try:r = requests.get(url, timeout=5)data = json.loads(r.text)['data']['archives']for j in range(len(data)):content = {}content['aid'] = data[j]['aid']content['title'] = data[j]['title']content['view'] = data[j]['stat']['view']content['danmaku'] = data[j]['stat']['danmaku']content['reply'] = data[j]['stat']['reply']content['favorite'] = data[j]['stat']['favorite']content['coin'] = data[j]['stat']['coin']comic_list.append(content)except Exception as e:print(e)def write_to_file(comic_list):#写入csv文件with open(r'bilibili-comic.csv', 'w', newline='', encoding='utf-8') as f:fieldnames = ['aid', 'title', 'view', 'danmaku', 'reply', 'favorite', 'coin']writer = csv.DictWriter(f, fieldnames=fieldnames)writer.writeheader()try:writer.writerows(comic_list)except Exception as e:print(e)get_url()
pool = ThreadPool(4)
pool.map(get_message, urls)
pool.close()
write_to_file(comic_list)
os.system("python ./send.py")

发送到邮箱

第一步:准备一个发送邮件的邮箱
•这里,我去163邮箱注册了一个邮箱地址.这里为了在客户端发送邮件,需要对注册好后的邮箱进行设置一下.163邮箱很容易设置. 网页端登进邮箱主页后,点击设置选项后,在下拉菜单里面点击POP3/SMTP/IMAP.这时,左侧页面会有客户端授权密码一栏,点击这一栏, 网页右侧出现设置客户端授权密码,默认是关闭的,因为我们需要用程序发送邮件,程序本身就被当成客户端,所以这里需要点击开启,开启后会自从弹出界面,让你设置授权码(这个授权码是用在程序里面使用的).按照其说明,设置完毕后,就可以了. 这样这个邮箱就可以用在程序里面进行操作了。注意要先关闭pop3和IMAP,才能开启SMTP!!
第2步:发送到自己的qq邮箱

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication_user = "xxx@163.com"
_pwd = "xxx"
_to = "xxx@qq.com"# 如名字所示Multipart就是分多个部分
msg = MIMEMultipart()
msg["Subject"] = "bilibili"
msg["From"] = _user
msg["To"] = _to# ---这是文字部分---
part = MIMEText("xxxx")
msg.attach(part)# ---这是附件部分---
# csv类型附件
csvpart = MIMEApplication(open('C:/Users/asus/PycharmProjects/untitled1/venv/bilibili-comic.csv', 'rb').read())
csvpart.add_header('Content-Disposition', 'attachment', filename='bilibili-comic.csv')
msg.attach(csvpart)s = smtplib.SMTP("smtp.163.com", timeout=500)  # 连接smtp邮件服务器,端口默认是25
s.login(_user, _pwd)  # 登陆服务器
s.sendmail(_user, _to, msg.as_string())  # 发送邮件
s.close()

发送邮件和爬取是2个程序,因为如果写入一个程序中,那门运行的时间会很久,那门就分为2个程序,通过

os.system("python ./send.py")

来运行另一个文件来发送文件。

bilibili完结番剧分区数据抓取并发送到邮箱相关推荐

  1. 数据抓取之(一):抓取北京交通管理网站的车辆违法信息(已完结)

    我的个人信息: 本猿92年小生一枚,10级三流本科院校的软件工程专业,今年2013年10月份开始实习,说长不长说短不短的时间混迹在中小型互联网公司,主要从事的java研发工作.更确切一点的职责则是数据 ...

  2. b站视频详情数据抓取,自动打包并发送到指定邮箱(单个或者群发)

    BiLiBiLi Time: 2020年11月6日19:44:58 Author: Yblackd BiLiBiLi BiLiBiLi 介绍 软件架构 安装教程 使用说明 源码下载 BiLiBiLi ...

  3. 1.3 网页数据抓取

    1.3 网页数据抓取 李沐 B站:https://space.bilibili.com/1567748478/channel/collectiondetail?sid=28144 课程主页:https ...

  4. 北京弘易信泰 网络数据抓取技术实践分享

    弘易信泰,作为大数据产品厂商,长期关注业界数据抓取技术的变化,当前,互联网数据以前所未有的态势迅猛增长,对于信息化技术而言,海量数据的抓取技术尤为重要,在数据迅速发展的大背景下,中国政府与企业类型的信 ...

  5. 基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化

    目录 项目介绍 研究背景 国内外研究现状分析 研究目的 研究意义 研究总体设计 数据获取 网络爬虫介绍 豆瓣电影数据的采集 数据预处理 数据导入及环境配置 Flume介绍 Hive介绍 MySQL介绍 ...

  6. 掘金站内用户和文章排行分析 | 数据抓取和排序实现

    文章教你如何做掘金站内数据抓取,数据解析,最后形成排序后的排名. 项目起因是我突然想看看掘金站内有哪些优质作者,为了不错过每一个大佬,我选择直接抓取站内所有的文章信息找到作者并进行排名.各位关注 + ...

  7. 关于Python爬虫原理和数据抓取1.1

    为什么要做爬虫? 首先请问:都说现在是"大数据时代",那数据从何而来? 企业产生的用户数据:百度指数.阿里指数.TBI腾讯浏览指数.新浪微博指数 数据平台购买数据:数据堂.国云数据 ...

  8. 干货!链家二手房数据抓取及内容解析要点

    "本文对链家官网网页进行内容分析,可以作为一般HTTP类应用协议进行协议分析的参考,同时,对链家官网的结构了解后,可以对二手房相关信息进行爬取,并且获取被隐藏的近期成交信息." 另 ...

  9. vba抓取网页数据到excel_R语言网页数据抓取XML数据包

    有些网络上的数据无法复制粘贴,一个一个录入有点费时费力,此时用这种数据抓取方法,短短几句,简单实用.XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用 ...

最新文章

  1. Flutter 基础布局Widgets之Baseline、AspectRatio详解
  2. Java项目经验——程序员成长的关键
  3. 试说明机器指令和微指令之间的关系_男女关系之间,是他在说谎吗?观察他的肢体语言说明一切...
  4. java json设置编码,如何设置数组以产生这种json编码格式
  5. oracle_j000,Process J000 died, kkjcre1p: unable to spawn jobq slave process引起的宕机
  6. android+主界面所有应用程序图标添加统一背景主题,Android 4.0替Launcher主界面所有应用程序图标添加统一背景主题...
  7. 深入理解张正友相机标定法:数学理论详细推导
  8. 设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动
  9. ES6学习笔记(四)-数值扩展
  10. MongoDB更新文档(非常详细,不要错过~)
  11. C++的STL标准库学习(stack)栈
  12. 百度Hi Csrf蠕虫攻击
  13. 通信原理 概念 笔记
  14. 流固耦合仿真案例及教学
  15. (Word论文插入高清图片)软件设置教程
  16. Linux命令行运行多线程程序 和 QT集成IDE下运行多线程程序的问题。
  17. office2016 excel表格如何插入复选框
  18. win7一点计算机就卡死,win7系统电脑经常卡住假死页面关不掉的解决方法
  19. 实现java多线程的3种方式
  20. 物联网平台的结构组成有哪些

热门文章

  1. mysql设置单个表的删除权限_Mysql管理命令-查看,创建用户、赋权、删除表用户数据库等操作...
  2. Python学习之旅-21
  3. alertdialog报错_alertdialog创建
  4. FinalShell国产ssh连接工具简单的使用教程
  5. 模拟量信号干扰的主要原因及解决方案
  6. 【FPGA教程案例54】深度学习案例1——基于FPGA的CNN卷积神经网络之理论分析和FPGA模块划分
  7. 一向不爱房地产的港股市场,为何对龙湖集团青睐有加?
  8. 通过前端方法实现水印加密
  9. c#连接字符串形式访问微软共享文件夹sharefile
  10. 小米9 Pro 3699元起!目前最便宜的一款5G手机!