爬虫笔记
有的没的
这个笔记是一个目录性质的笔记,主要是方便自己日后回忆,如果有有缘的大兄弟也学习了这套课程,欢迎交流。这套课程感觉还是挺实用的,在学习过程中也试着解决了一些正好遇到的需求。课程在B站上有(路飞学城)。
自己学习过程中写的相关代码都push到了自己的GitHub上,可以自由查阅。之后可能也会就一些部分写详细的学习笔记。
http
常用请求头信息
- User-Agent:请求载体的身份标识
- Connection:请求完毕后,是否保持连接
常用响应头信息
- Content-Type:服务器响应回客户端的数据类型
https
安全的超文本传输协议
加密方式
- 对称密钥加密
- 非对称密钥加密
- 证书密钥加密(https)
requests模块
python中原生的基于网络请求的模块,用于模拟浏览器发请求。
流程
- 指定url
- 发起请求
- 获取响应数据
- 持久化存储
实例
例1 爬取百度首页
例2 爬取百度查询页面
例3 爬取百度翻译结果
例4 爬取豆瓣电影排名
练习 爬取KFC餐厅地址
例5 爬取药监局网站信息
聚焦爬虫
流程
- 指定url
- 发起请求
- 获取响应数据
- 数据解析
- 持久化存储
实现
正则
利用正则表达式从爬取的数据中匹配出我们所需要的部分
常用表达式

实例 爬取糗事百科图片
bs4
步骤简介
- 实例化BeautifulSoup对象
- 将页面源码数据加载到该对象中
- 通过BeautifulSoup对象的属性或方法定位标签以及数据提取
数据解析相关方法和属性
- tagName:返回html中第一次出现的tagName标签
- find():
- find('tagName'):返回html中第一次出现的tagName标签
- find('tagName',class_/id/attr='xxx' ):属性定位
- find_all():同find,但是返回所有符合条件项(列表)
- select():
- select('某种选择器(id,class,标签)'):返回列表
- select('用>以及空格连接的多个选择器组成层级选择器'):返回列表(>表示一个层级,空格表示多个层级)
- 获取标签之间的文本数据
- text/string/get_text()
- text/get_text():获取所定位标签下所有文本
- string:只获取所定位标签下直系文本
- text/string/get_text()
- 获取标签中的属性值
- ['标签名']
实例 爬取三国演义所以章节标题和内容
xpath
最常用且最便捷高效的解析方式,同时具有较好的通用性
步骤简介
- 实例化etree的对象
- 加载本地文档:etree.parse(filePath)
- 加载网络上获取的源码数据:etree.HTML('page_text')
- 将页面源码数据加载到该对象中
- 调用rtree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获
xpath表达式
返回基本为列表,定位阶段列表内为对象(tips:谷歌浏览器F12下,Elemens窗口下选中需要的标签右键->copy->copy Xpath 可以复制对应Xpath,按需修改) - 标签定位:'/html/head/title'(层级定位) - /:表示一个层级 - //:表示多个层级,或表示从任意位置开始定位 - 属性定位:'//div[@class="song"]' - 索引定位:'//div[@class="song"]/p[3]'(该div下第三个p标签,从1开始) - 取文本:'/html/head/title/text()' - 取属性:'//div[@class="song"]/img/@src'
实例
实例1 爬取58同城二手房标题
实例2 爬取图片
实例3 爬取城市名称
练习1 爬取简历模板
验证码识别
简介
这边采用将验证码图片下载下来后调用第三方识别服务进行识别,本文采用超级鹰的服务,需要提前前往其网站注册账号并充值。
实例
实例1 超级鹰服务测试
实例2 古诗文网站验证码识别
代理爬虫
简介
主要作用有
- 突破自身IP访问的限制
- 隐藏自身真实IP
代理相关工具网站
- 快代理
- 西祠代理
- www.goubanjia.com
实现
实例 代理爬虫查询IP
异步爬虫
简介
单线程串行的方式爬取效率较低,需要我们通过一些方法实现异步爬虫。
实现方式
- 多线程,多进程(不推荐)
- 好处 :为相关的阻塞操作开启线程或进程,阻塞操作就可以异步执行
- 弊端:无法无限制开启多线程或多进程
- 线程池、进程池(适当使用)
- 好处:降低系统对进程或者线程创建和销毁的频率,降低系统开销
- 弊端:池中线程或进程的数量有上限
- 单线程+异步协程(推荐)
- 使用asyncio以及aiohttp实现
selenium模块
简介
是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器
实例
- 例1 人人网模拟登录
scrapy框架
简介
一个为了爬取网站数据,提取结构性数据而编写的应用框架。其内部已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)。
流程
- 创建工程:
- scrapy startproject ProName
- 进入工程目录:
- cd ProName
- 创建爬虫文件:
- scrapy genspider spiderName www.xxx.com
- 编写相关操作代码
- 执行工程:
- scrapy crawl spiderName
功能
基于管道的持久化存储
- 修改item文件
- 修改pipelines文件
- 修改配置文件
便捷的全站爬取
支持分布式集群
实例
例1 爬取糗百(持久化)
例2 爬取boss直聘(中间件)
例3 爬取图片
例4 爬取网易(手动全站)
例5 爬取阳光政务(自动全站)