着手写爬虫前,需要了解的几个概念:

URL

全称 Uniform Resource Locator (统一资源定位器),格式为:协议+主机+端口+路径。

比如:https://www.bilibili.com/video/BV17x411w7KC

https:// 是协议,www.bilibili.com 是主机域名,这个例子中端口号并未在主机域名后指定,使用的是默认端口,/video/BV17x411w7KC 是文件路径。

简单来说,就是使用浏览器打开一个网页时,显示在最上方搜索栏中的内容。

正则表达式

通过使用一些预设的字符来创建的通常用于检索字符串的具有一定规则的文本。

需要掌握基本的用法。

比如这个正则表达式:a(.*?)z

可以匹配的字符串有:“abz”,“ab123z”,“ab123字符串z”。

除了以上三种,只要字符串满足第一个字符是 ‘a’,最后一个字符是 ‘z’,都可以被这个正则表达式匹配。因为表达式中的 (.*?) 表示匹配任意字符串。

爬虫

自动从网页上抓取数据的程序或者脚本。

为什么需要爬虫?

试想一下,当你在某壁纸网站闲逛时,发现一个分栏下的壁纸都很好看,想要将他们都下载下来,如果手动操作的话,你需要一张一张地点击下载,而如果使用爬虫,你则可以运行爬虫,然后冲一杯咖啡,稍等片刻,壁纸就都已经下载并保存到你的文件中了。

了解了基本的概念,再来了解爬虫的基本流程。

爬虫的三个主要流程:

(1)请求

向服务器发送请求,并得到服务器响应后返回的数据。

(2)匹配

对返回的数据使用正则表达式进行处理,匹配出需要的内容。

(3)保存

匹配出的内容通常为资源链接,我们通过解析该链接并发送请求,将获取到的数据保存到本地。

OK,开始写爬虫吧。

本次目标:爬取B站首页热门推荐视频标题

首先,我们需要导入必要的模块

#HTTP请求
import urllib
import urllib.request
#正则表达式
import re
#文件
import os

然后,我们依次实现爬虫的三个流程:

请求

浏览器请求头需要我们进入网站按 f12 获取。

#发送请求并返回获取到的HTML数据(字符串)
def GetHTML(url):#伪装浏览器请求头header = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75'}#使用传入的url创建一个请求request = urllib.request.Request(url, headers = header)#发送请求并得到响应response = urllib.request.urlopen(request)#获取通过utf-8格式解码后的HTML数据HTML = response.read().decode('utf-8')#返回HTML数据return HTML

匹配:

正则表达式需要进入网站按 f12 定位到想要爬取的资源,根据资源的属性写出对应的正则表达式。

#从HTML数据中匹配出所有标题
def GetTitles(HTML):#通过正则表达式创建一个正则匹配模式pattern = re.compile('<p.*?class="title">(.*?)</p>')#得到所有匹配结果,findall的返回值类型为列表titles = re.findall(pattern, HTML)#返回所有标题内容return titles

保存:

#将数据保存到文件
def SaveData(data):#判断一个文件夹是否存在flag = os.path.exists('title')if not flag:#不存在则新建一个文件夹os.mkdir('title')print('文件夹','title','创建成功')else:print('文件夹','title','已存在')#将列表中的数据写入文件并保存在文件夹中i = 0for title in data:#打开文件时在文件名前加上文件夹路径file = open('title/'+'标题'+str(i)+'.txt', 'w')file.write(title)file.close()print('标题',str(i),'写入成功!')i += 1

欧克,调用函数运行一下:

#发送请求并获取数据
HTML = GetHTML('https://www.bilibili.com/')
#匹配出我们需要的数据
titles = GetTitles(HTML)
#将数据保存到本地
SaveData(titles)
#暂停一下
pause = input('任意键退出')

运行效果:


其他类型的资源的爬取思路相同,感兴趣的小伙伴赶快试试吧~

python爬虫_爬取B站视频标题相关推荐

  1. python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...

    学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...

  2. python爬虫:Selenium爬取B站视频标题、播放量、发布时间

    上次尝试了利用Ajax机制爬取B站视频播放量等数据(链接在下方),但是发现响应的JSON数据中没有发布时间的数据,这次决定用Selenium试一下. python爬虫:Ajax爬取B站视频标题.播放量 ...

  3. python抓取视频违法吗,科学网—【python爬虫】抓取B站视频相关信息(一) - 管金昱的博文...

    昨天我在B站上写了这么一篇文章,但是被他们锁住了.无奈之下我复制到知乎上先保存起来 在这篇名为<三天学会用python进行简单地爬取B站网页视频数据>文章中我主要提到了两点在已知aid的情 ...

  4. 如何去使用Python爬虫来爬取B站的弹幕数据?

    哔哩哔哩众所周知是弹幕的天堂,视频观看人数越多,弹幕也就越多.今天小千就来教大家如何去使用Python开发一个爬虫来爬取B站的弹幕数据. 1.弹幕哪里找? 平常我们在看视频时,弹幕是出现在视频上的.实 ...

  5. python爬虫_爬取京东商品写入Excel表

    新人的第二篇文章,写的不好请见谅 这段代码只是针对京东的商品信息爬取,很多都是根据页面源码去匹配获取数据的,别的网站用不了,也可能过一段时间官方修改了页面就不能用了,不过这里也只是提供学习使用,希望可 ...

  6. python爬虫_爬取豆瓣读书top500存入到excel文件

    目的:学习笔记 代码写的有点糟糕,还得努力,欢迎各位帮忙优化代码,嘻嘻嘻. 代码: import requests,xlwt #导入相关库,xlwt库用来写入到excel from lxml impo ...

  7. python爬虫:爬取某网站视频

    把获取到的下载视频的url存放在数组中(也可写入文件中),通过调用迅雷接口,进行自动下载.(请先下载迅雷,并在其设置中心的下载管理中设置为一键下载) 实现代码如下: from bs4 import B ...

  8. Python爬虫_爬取36kr

    Python3.6环境 from lxml import etree import requests#输入页数,得到网址 def wb_url(page_num):for num in range(1 ...

  9. 解决使用python爬取b站视频并使用ffmepg把音频和视频合成失败

    首先我们需要下载ffmepg,并且配置环境变量 把下载下来的文件中的bin文件夹的路径添加到Path中 然后打开Anaconda Prompt,使用命令conda install ffmpeg安装ff ...

最新文章

  1. 大学生创业难?现在已不是问题!
  2. Navicat for Oracle
  3. 【CMU】图卷积神经网络中的池化综述,Pooling in Graph Convolutional Neural Network
  4. Linux内核 - tcp发送数据从应用到驱动经历的函数调用
  5. Npm的配置管理及设置代理
  6. 基于ZXing的二维码,你可以这样改造它
  7. 产品问答 | 入职一家公司,你的选择依据是什么?
  8. LeetCode 24 两两交换链表中的节点
  9. 解决Mac nginx问题 [emerg] 54933#0: bind() to 0.0.0.0:80 failed (13: Permission denied)
  10. MSSQL 2008 企业管理器打开命令
  11. 数据结构php语言,PHP语言做网页开发,会用到什么数据结构,算法?
  12. 理解ROS Navigation Stack,看完这篇你就知道啦!
  13. visio 绘图矢量图素材网站
  14. Jenkins骚操作第十三章之基于Kubernetes/K8S构建Jenkins持续集成平台(上)
  15. ssh+dwr实现级联操作
  16. 主要计算机网络设备及其主要用途
  17. Mybatis基础学习之万能的Map和模糊查询
  18. 手游无限多开器安卓版_手游多开器安卓版-手游多开器手机版 _5577安卓网
  19. Oracle数据库update语句用法,多表批量更新对应的字段值
  20. LaTex排版 正文间距(段行列间距)调整与表格调整(宽度, 合并, 表注)

热门文章

  1. 大学计算机软件编程,计算机程序设计VC++-中国大学mooc-题库零氪
  2. Python3-excel文档操作(四):利用openpyxl库处理excel表格:将数据进行可视化展示在Excel中
  3. 10 legospike 官方教程 06——词语模块、更多词语模块、帮助功能
  4. 力扣 5930. 两栋颜色不同且距离最远的房子
  5. LabVIEW操作者框架(Actor Framework)范例集锦之四:官网论坛(上)
  6. 单线复用场景下,详解IPTV透传原理
  7. springboot+vue房产销售平台(源码+文档)
  8. i5 9400和9400f区别 i5 9400和9400哪个好
  9. kindeditor自定义添加网络视频插件。修改批量图片上传方式原flash改为JS和h5上传
  10. Windows上安装ROS教程