网络爬虫笔记

爬虫笔记

有的没的

这个笔记是一个目录性质的笔记,主要是方便自己日后回忆,如果有有缘的大兄弟也学习了这套课程,欢迎交流。这套课程感觉还是挺实用的,在学习过程中也试着解决了一些正好遇到的需求。课程在B站上有(路飞学城)。
自己学习过程中写的相关代码都push到了自己的GitHub上,可以自由查阅。之后可能也会就一些部分写详细的学习笔记。

http

常用请求头信息

  • User-Agent:请求载体的身份标识
  • Connection:请求完毕后,是否保持连接

常用响应头信息

  • Content-Type:服务器响应回客户端的数据类型

https

安全的超文本传输协议

加密方式

  • 对称密钥加密
  • 非对称密钥加密
  • 证书密钥加密(https)

requests模块

python中原生的基于网络请求的模块,用于模拟浏览器发请求。

流程

  • 指定url
  • 发起请求
  • 获取响应数据
  • 持久化存储

实例

  • 例1 爬取百度首页

  • 例2 爬取百度查询页面

  • 例3 爬取百度翻译结果

  • 例4 爬取豆瓣电影排名

  • 练习 爬取KFC餐厅地址

  • 例5 爬取药监局网站信息

聚焦爬虫

流程

  • 指定url
  • 发起请求
  • 获取响应数据
  • 数据解析
  • 持久化存储

实现

正则

利用正则表达式从爬取的数据中匹配出我们所需要的部分

常用表达式
LearningGp
实例 爬取糗事百科图片

bs4

步骤简介
  1. 实例化BeautifulSoup对象
  2. 将页面源码数据加载到该对象中
  3. 通过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:只获取所定位标签下直系文本
  • 获取标签中的属性值
    • ['标签名']
实例 爬取三国演义所以章节标题和内容

xpath

最常用且最便捷高效的解析方式,同时具有较好的通用性

步骤简介
  1. 实例化etree的对象
    • 加载本地文档:etree.parse(filePath)
    • 加载网络上获取的源码数据:etree.HTML('page_text')
  2. 将页面源码数据加载到该对象中
  3. 调用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 古诗文网站验证码识别

代理爬虫

简介

主要作用有

  1. 突破自身IP访问的限制
  2. 隐藏自身真实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 爬取阳光政务(自动全站)