import requests, re, time, os

category_dic = {
"all": "全站榜",
"origin": "原创榜",
"rookie": "新人榜",
} day_dic = {1: "日排行榜", 3: "三日排行榜", 7: "周排行榜", 30: "月排行榜"}
all_or_origin_dic = {
0: "全站",
1: "动画",
168: "国创相关",
3: "音乐",
129: "舞蹈",
4: "游戏",
36: "科技",
188: "数码",
160: "生活",
119: "鬼畜",
155: "时尚",
5: "娱乐",
181: "影视",
} bangumi_dic = {
"番剧": 1,
"国产动画": 4,
} cinema_dic = {
"记录篇": 177,
"电影": 23,
"电视剧": 11,
} rookie_dic = {
0: "全站",
1: "动画",
3: "音乐",
129: "舞蹈",
4: "游戏",
36: "科技",
188: "数码",
160: "生活",
119: "鬼畜",
155: "时尚",
5: "娱乐",
181: "影视",
} BaseDict = {
"all": all_or_origin_dic,
"origin": all_or_origin_dic,
# "bangumi": bangumi_dic,
# "cinema": cinema_dic,
"rookie": rookie_dic,
} dic = {
"all": 1,
"origin": 2,
"rookie": 3,
} base_path = "D:\图片\\bilibili_ranking" # 文件保存的位置 def get_url():
for first in category_dic.keys():
if first in ["all", "origin", "rookie"]:
for second in BaseDict.get(first).keys():
for third in day_dic.keys():
url = "https://api.bilibili.com/x/web-interface/ranking?jsonp=jsonp&rid={}&day={}&type={}&arc_type=0&callback=__jp1".format(
second, third, dic.get(first))
yield url, [first, second, third] s = requests.Session()
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
"Referer": "https://www.bilibili.com/ranking/all/0/0/3"
}
url_list = get_url()
for url in url_list:
print("向{}发请求".format(url[0]))
response = s.get(url=url[0], headers=headers)
data = response.text.replace('"', "")
pattern = r'.*?author:(?P<author>.*?),.*?play:(?P<play>.*?),.*?pts:(?P<pts>.*?),.*?title:(?P<title>.*?),'
result_list = re.findall(pattern, data)
path = os.path.join(base_path, "{}-{}-{}".format(category_dic.get(url[1][0]),
rookie_dic.get(url[1][1]) or all_or_origin_dic.get(url[1][1]),
day_dic.get(url[1][2])))
f = open(path + ".txt", "a", encoding="utf-8")
print('正在写入....{}'.format(path + ".txt"))
for index, res in enumerate(result_list):
# print("排名:{}".format(index + 1))
# print("作者:{}".format(res[0]))
# print("播放量:{}".format(res[1]))
# print("综合分数:{}".format(res[2]))
# print("标题:{}".format(res[3]))
# print("-" * 90)
f.write("排名:{}\n".format(index + 1))
f.write("标题:{}\n".format(res[3]))
f.write("作者:{}\n".format(res[0]))
f.write("播放量:{}\n".format(res[1]))
f.write("综合分数:{}\n".format(res[2]))
f.write("-" * 90 + "\n")
f.close()
time.sleep(2)

python3爬虫-爬取B站排行榜信息的更多相关文章

  1. python爬取b站排行榜

    爬取b站排行榜并存到mysql中 目的 b站是我平时看得最多的一个网站,最近接到了一个爬虫的课设.首先要选择一个网站,并对其进行爬取,最后将该网站的数据存储并使其可视化. 网站的结构 目标网站:bil ...

  2. Python爬取B站视频信息

    该文内容已失效,现已实现scrapy+scrapy-splash来爬取该网站视频及用户信息,由于B站的反爬封IP,以及网上的免费代理IP绝大部分失效,无法实现一个可靠的IP代理池,免费代理网站又是各种 ...

  3. 爬虫---爬取b站小视频

    前面通过python爬虫爬取过图片,文字,今天我们一起爬取下b站的小视频,其实呢,测试过程中需要用到视频文件,找了几个网站下载,都需要会员什么的,直接写一篇爬虫爬取视频~~~ 分析b站小视频 1.进入 ...

  4. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  5. python3爬虫爬取网页思路及常见问题(原创)

    学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...

  6. python3爬虫-爬取58同城上所有城市的租房信息

    from fake_useragent import UserAgent from lxml import etree import requests, os import time, re, dat ...

  7. python3 爬虫---爬取糗事百科

    这次爬取的网站是糗事百科,网址是:http://www.qiushibaike.com/hot/page/1 分析网址,参数''指的是页数,第二页就是'/page/2',以此类推... 一.分析网页 ...

  8. python3 爬虫---爬取豆瓣电影TOP250

    第一次爬取的网站就是豆瓣电影 Top 250,网址是:https://movie.douban.com/top250?start=0&filter= 分析网址'?'符号后的参数,第一个参数's ...

  9. python3 爬虫爬取深圳公租房轮候库(深圳房网)

    深圳公租房轮候库已经朝着几十万人的规模前进了,这是截至16年10月之前的数据了,贴上来大家体会下 所以17年已更新妥妥的10W+ 今天就拿这个作为爬虫的练手项目 1.环境准备: 操作系统:win10 ...

随机推荐

  1. Spring Data MongoDB 模糊查询

    Pattern pattern = Pattern.compile("^.*" + value + ".*$"); Query query = new Quer ...

  2. How To Secure Apache with Let's Encrypt on Ubuntu (Free SSL)

    Introduction This tutorial will show you how to set up a TLS/SSL certificate from Let's Encrypt on a ...

  3. jQuery实现动态选中select

    // jquery实现动态选中select var active = $('.all_sla_title1 .active') var group_name = active.html(); var ...

  4. INSERT 语句总结

    一.基本语句 1.向指定的列中插入值(在插入批量数据时方式2优于方式1) <!--插入一条值--> INSERT INTO t1(field1,field2) VALUE(v001,v00 ...

  5. java笔记--局部内部类认识与理解

    java内部类 内部类应用最多的场景是在编写GUI程序时,将大量的事件监听处理放在了内部类中进行 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XH ...

  6. C++ 重载 重写 重定义

    重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰

  7. java抽象类,接口与异常

    1.抽象类: 定义;包含一个抽象方法的类称称为抽象类,抽象类在class前使用adstract关键词修饰. 抽象方法;只声明未实现的方法称为抽象方法,使用adstract关键字声明该方法. 抽象类定义 ...

  8. Python实例---三级菜单的实现[low]

    # version: python3.2.5 # author: 'FTL1012' # time: 2017/12/7 09:16 menu = { '陕西': { '西安': { '未名区': [ ...

  9. 企业级Apache详解2

    http_conf主配置说明 root@lamp01 apache]# grep -Ev "#|^$" conf/httpd.conf DocumentRoot "/us ...

  10. Shell脚本例子集合

    # vi xx.sh 退出并保存 # chmod +x xx.sh # ./xx.sh -2. 调试脚本的方法 # bash -x xx.sh 就可以调试了 . -1. 配置 secureCRT 的设 ...