python爬取b站排行榜_实时爬取B站排行榜并保存为表格——每周一个爬虫小教程系列...

从这周开始,每周来一个爬虫小教程,希望对你们有所帮助,这次的目标是B站排行榜202006130936459265479.png至于爬取什么内容,目前感觉就把序号,名称以及评分爬取下来吧(因为我是边写教程边写代码的)

这次需要用到的知识:Requests模块

Xpath模块(说白了就是Html)

有看我的博客:www.lanol.cn

首先来到这个页面https://www.bilibili.com/ranking/all/0/0/1,目前是全站榜,我们尝试切换到原创榜,就会发现网址栏对应的网址改变了,所以我们只需要修改网址就可以获取想要的榜单(我不确定会不会每天都变,没观察)202006130941238314545.png202006130941378827927.png

然后改变这个投稿类型和日期网址也会改变202006130942215684271.png到这里我们就已经获取到想要爬取的网址了。request中的url也就确定了。url = ‘https://www.bilibili.com/ranking/all/0/0/1’

我们按快捷键Ctrl+U,查看源代码,然后搜索一下排行第一的视频。202006130944476130795.png我们可以发现在源代码里面有,这样的话我们就可以直接用requests模块获取源码,再利用Xpath解析网页了。有关Xpath的时候方法可以看这篇文章Python爬虫:Xpath语法笔记。

然后来开始写代码,第一步永远都不会变的,先导入Requests模块和将网页源码转换为可以Xpath的模块(这两个模块如果没有可以pip一下,博客内也有教程,搜索即可)import requests

import parsel

然后就是做一个请求头(伪装成普通浏览器去访问),一般来说刚开始只加一个user-agent就可以了,如果有反爬机制,再去加。

请求头也就是这一块202006130951559489406.png我们一开始只放一个user-agent进去

202006130951255303101.pnguser-agent:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) ApplewebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36

我们复制下来之后是上面这样的,然后我们要转换成python里面字典的格式。也就是加个引号就行了。'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'

然后放到Python代码中就是这样子的。headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'

}

这样requests模块中的headers就构造好了

然后就是写上这一句就可以获取到源码了。response = requests.get(url=url, headers=headers).text

这句话的意思就是调用requests模块,然后get请求这个url,最后将获取到的内容取text格式然后赋值给response。

我们来执行看一下,不要忘记输出一下哦。

202006130959194012671.png

这样子我们的页面源码就获取到了,而且里面可以看到我们之前搜索的排行第一的视频:【官方MV】Mojito - 周杰伦。

然后我们回到网站,右键视频标题,点击检查。202006131001489824427.png我们再在源码这右键一下,点击Copy,点击Copy Xpath,这样Xpath就复制下来了,动画演示:原文地址:www.lanol.cn

202006131004523875718.gif//*[@id="app"]/div[1]/div/div[1]/div[2]/div[3]/ul/li[1]/div[2]/div[2]/a

我们将这句Xpath粘贴到浏览器插件里面测试一下。202006131007145950614.png

可以看见我们已经可以选中这句标题了,然后我们再利用HTML知识修改一下这句话,就可以获取到所有标题了。//div[2]/div[2]/a

202006131008294310755.png

我们放到Python里面执行一下。

202006131010485121591.png

发现获取的内容似乎有点多,这里不仅把标题弄出来了,而且还将这句代码弄出来了,我们在后面加一个text()只获取文本内容。

202006131012301186564.png

这样就可以了,我们再来试一下获取分数。一如之前的操作,右键分数,点击检查,再在代码处右键,点击Copy,点击Copy Xpath。//*[@id="app"]/div[1]/div/div[1]/div[2]/div[3]/ul/li[20]/div[2]/div[2]/div[2]/div

202006131013596016100.png

再修改一下这句话,以获取我们想要的全部内容。//div[2]/div[2]/div[2]/div/text()

202006131014439994707.png

然后放到Python里面执行一下。

202006131015509908919.png

成功获取所有分数。

综上我们想要获取的信息都已经取到了。

然后就是写到表格之中,这里为了方便直接写到csv即可。直接贴代码了。with open('B站排行榜www.lanol.cn.csv', 'w') as f:

f.write('标题,分数\n')

for index, i in enumerate(titles):

f.write(f'{i},{grades[index]}\n')

202006131020371689342.png

这样子,就可以了,这个只是一个思路,获取更多信息你可以自由发挥。

所有代码一共才17行,人生苦短,Python当歌,其实其他语言也可以,只是麻烦了一点而已。

所有代码如下:

[CommShow]import parsel

import requests

url = 'https://www.bilibili.com/ranking/all/0/0/1'

headers = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'

}

response = requests.get(url=url, headers=headers).text

response = parsel.Selector(response)

# www.lanol.cn Lan的小站

titles = response.xpath('//div[2]/div[2]/a/text()').extract()

grades = response.xpath('//div[2]/div[2]/div[2]/div/text()').extract()

with open('B站排行榜www.lanol.cn.csv', 'w') as f:

f.write('标题,分数\n')

for index, i in enumerate(titles):

f.write(f'{i},{grades[index]}\n')

print(grades)

[/CommShow]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java7优化,让Eclipse在10秒内启动的7个优化提速技巧

大约一个月前,我发表了一篇博客,其中介绍了对Eclipse的爱与恨。 有些人问我如何给Eclipse提速,这篇文章就来讨论这个问题。顺带提一下,这篇文章不是比较IDE,所以不要说你讨厌某个IDE而选择另外一个。这篇文章只是关注如…

python四位的千位百位十位_输入一个四位正整数,使用字符串切片方法,计算出这个数的个位 十位 百位 千位?...

展开全部#includeint main(){ char s[5],s1[9]"千百十62616964757a686964616fe59b9ee7ad9431333433653938个";int i;printf("输入一个四位数:");scanf("%s",s);for(i3;i>-1;i--)printf("%c%c位数:%c\n",s1[ii],s1[ii1],…

css 垂直居中_html中div使用CSS实现水平/垂直居中的多种方式

CSS中的居中,在工作中,会经常遇到。它可以分为水平居中和垂直居中,以下是几种实现居中的方式。以下例子中,涉及到的CSS属性值。.parent-frame { width: 200px; height: 200px; border: 1px solid red; } .child-frame { width…

python同时输出两个数组_python中实现将多个print输出合成一个数组

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

matlab如何实现降维,matlab怎么把矩阵降维

1. matlab如何对一个矩阵 求导而且不降维gradient计算数值梯度。函数F(x,y,。)在(x0,y0,。)的梯度就是函数在该点的导数,通常在数学上记作▽F(x0,y0,。)或gradF(x0,y0,。)。梯度是一个向量, 它的方向是函数在一点变化率…

python线程等待_python3 中 Event.wait 多线程等待

原博文 2018-04-26 20:45 − event.wait(time) 等待 time 时间后,执行下一步。或者在调用 event.set() 后立即执行下一步。 event.clear() 清除信号 event.set() 设置信号 event.isSet() 判断是否设置信号 要求: 定义一个按钮,等待 3... 相关推荐 2019-1…

php表白情话,朋友圈唯美表白短句情话 适合发朋友圈的情话

1、一个人经历了所有的苦难,也不要指望能和谁在一起;我曾经真诚的尝试过,但是结果我不想说。2、只要你愿意,只要我有,整个世界都是你的,而你只能是我的。3、只要你愿意,当你失落失意的时候&…

高德地图看各省分界线_深度解读|高德宣布高精地图“百元时代”背后的商业逻辑是什么...

车展前夕,高德的一次媒体沟通会,或许将为国内自动驾驶的发展带来深远影响。4月11日,高德地图在北京举行“高精宣言”媒体沟通会,表示将对高精地图服务进行升级,并以成本价格提供标准化高精地图,与合作伙伴分…

js获取ip地址_(原创)Node.JS实战31:大名鼎鼎的Express!

Express (http://expressjs.com)是Node.JS中一个简洁、灵活、强大的Web应用框架, 它提供了一系列强大特性,可以帮助我们快速创建各种Web 应用,也可用来编写各种的Web工具。Express博大精深,本文在此只做简单…

pythonpath manager_python 路径操作工具 pathlib,比 os 模块好用太多

在 python 当中,如果你想控制路径,基本上绕不开 os.path。我希望看完这篇文章以后,熟练使用 python 的你能立刻开始使用 pathlib 模块,一刻也不要耽误。pathlib 相对于 os.path 有以下优势:pathlib 导入更加清晰&#…

mysql跳过安全_Navicat连接MySQL数据库

前言:在使用Gin架构搭建博客的时候,需要设计数据库,以及连接数据库.命令端口操控效率实在是太低且不好管理,这个时候使用Navicat就能轻松高效的使用数据库了.步骤:下载安装Navicat,Mysql配置Mysql及其账号密码 Navicat连接Mysql1.下载安装Navicat,MysqlNavicat官网下载地址:…

python深入和扩展_加速方案 — Python扩展模块

原标题:加速方案 — Python扩展模块ctypes(一)— 初识这章我们介绍Python的扩展名之ctypes,教大家认识ctypes。喜欢Python的读者们可以加Python学习交流群:579817333 让我们共同进步!很多初学Python的新手,总是嘴边挂着…

java 切面_实用|AOP切面编程手段大汇总

点击上方"欧学长的架构成长之路" 关注我前言首先说一下什么是AOP?AOP就是面向切面编程,它是一个思想,通过切面,我们可以将那些反复出现的代码抽取出来,放在一个地方统一处理,提高代码的复用性。A…

php可以控制硬件吗,控制面板的作用是设置硬件接口吗?

错误,控制面板的作用是对系统进行有关的设置。控制面板是一个系统文件夹,用来提供各种对计算机系统进行设置和管理的工具;使用控制面板可以对系统进行设置与管理,例如设置系统环境参数的默认值和属性,添加新的应用程序…

python dict保存到文件_将dict写入txt文件并将其读回?

我正试着把字典写成一个txt文件。然后用raw_input键入键来读取dict值。我觉得我只是错过了一步,但我已经找了一段时间了。我知道这个错误File "name.py", line 24, in readingprint whip[name]TypeError: string indices must be integers, not str我的代…

不知道工作组名称怎样加入_剩米饭不知道怎样做?试试泡菜炒饭,再也不用担心米饭做多了...

剩米饭不知道怎样做?试试泡菜炒饭,再也不用担心米饭做多了东北的朋友这几天连续经历了春天,初夏和冬天,甚至在一天中看到了雪、雨和冰雹。这变化莫测的天气让大家一时间慌了神,不知到底要穿些什么。由于楼上都已经停了…

php元素浮动会产生哪些影响,css浮动带来什么问题

css浮动带来的影响:1、由于浮动元素脱离了文档流,所以父元素的高度无法被撑开,影响了与父元素同级的元素;若没有给父元素设置高度,那么父元素就不会在显示屏上显示。2、浮动元素不再占用原文档流的位置,它会…

pointnet分割自己的点云数据_细嚼慢咽读论文:PointNet论文及代码详细解析

论文标题:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation标签:有监督 | 特征学习、点云分类、语义分割首先回答3个问题作为引子:Q1:什么是点云?简单来说就是一堆三维点的集合&#xf…

linux将字符串转小写_小猿圈总结Linux常见命令(一)

科技发展的今天,互联网不断的发达,很多人学习Linux云计算的时候回因为记不住一些命令从而去找度娘,有时候因为因为找不到linux的命令而烦恼,下面是小猿圈linux讲师给大家总结的linux常见命令,希望对你有所帮助。1、cd命…

java声明arraylist,在java构造函数中声明ArrayList

我正在研究一个项目,并且我被教导在构造函数中实例化变量.我在使用ArrayList思想时遇到了一些麻烦.您能否提出一些最佳实践,我是否需要使用实例变量定义ArrayList,或者我可以在构造函数中执行此操作.谢谢你的建议!我有一个我正在谈论的内容的例子://impo…