Python爬虫实战进阶

Python爬虫实战进阶"

作者:李科均
ISBN:9787302627661
定价:¥89
字数:千字
页数:
出版时间:2023.05.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

本书主要满足网络爬虫从业者提升技术能力的需求。本书共9章,涉及经典爬虫框架Scrapy的架构、异步爬虫的原理及其实现、异步自动化浏览器控制库pyppeteer的使用、当下流行的反爬虫原理及其处理方案、基于常用通信中间件的分布式爬虫框架开发、Python常用的编码和加密的应用、针对前端深入的JavaScript分析策略和安全策略、网络搜索引擎的原理和技术实现,并在最后一章创建了一个垂直领域的搜索引擎系统。

本书面向网络爬虫开发的初、中级开发人员,以及对网络爬虫有一定基础的兴趣爱好者。

前言

什么是网络爬虫

狭义的网络爬虫是指从互联网网站上获取信息的程序,如常用的搜索引擎——百度、360、搜狗等。同时,网络爬虫也是一门复合型技术,涉及的技术领域广泛,如JavaScript、HTML、CSS、MySQL、Java等。广义的爬虫技术除狭义的网络爬虫的内容,还包括自动化。在这个概念下,网络爬虫不再只是从目标网站获取链接、图片、文字等信息,甚至不再是为了获取这些信息,而是为了完成某个特定任务,如定时打卡、自动统计、财务计算等。

网络爬虫的应用前景

随着互联网各大平台将网络爬虫列为防御的目标之一,网络爬虫与反爬虫技术开始全面角逐。网络爬虫行业越发地蓬勃发展,爬虫技术不断地更新迭代,同时,网络爬虫的技术体系愈加庞大和完善,不管是互联网的大公司还是小公司,或多或少都对网络爬虫有需求。此外,随着智能时代的到来,得益于RPA(Robotic Process Automation,机器人流程自动化)技术的发展,网络爬虫在自动化领域有着广泛的应用市场,如财务数据的统计分析、后台订单的自动化管理、用户的自动维护等,所以网络爬虫的需求呈现井喷式增长的趋势。

关于本书

本书指出了Python网络爬虫开发从业者的提升方向。在分布式爬虫方面,通过对Scrapy框架源码进行剖析,使读者全面掌握Scrapy的设计理念; 在异步编程方面,从异步编程原理到异步请求,再到数据库、文件读写的异步操作,对全体系做了全面的介绍,并从异步编程的思想上,详细介绍了异步的浏览器自动化工具pyppeteer; 在反爬虫方面,对指纹技术、滑动验证、字体和CSS样式反爬虫技术、动态渲染、图片验证码处理等方面的原理进行剖析,并对其处理方案做深入介绍,其中图片验证码处理还涉及机器学习的内容; 在分布式爬虫的设计上,通过不同的消息中间件设计满足具体业务场景的分布式框架,如基于RabbitMQ的分布式设计、基于Kafka的分布式设计和基于Celery的分布式设计; 在编码和加密方面,讲解编码原理和常用的集中加密算法,如DES、AES、MD5和SHA; 在JavaScript安全分析方面,对目前前端常用的反爬虫措施进行深入分析,同时对目前流程的混淆与还原进行全面的介绍; 在搜索引擎技术方面,对搜索引擎原理、搜索引擎的实现过程进行介绍,并通过Elasticsearch实现一个垂直领域的搜索服务。

各个章节的大致内容如下。

第1章讲解Scrapy的架构和使用方法,深入介绍Scrapy各个组件的工作原理及源码的实现流程,扩展分布式Scrapy的结构及重要组件的工作原理、实现流程,以及中间件开发的关键接口、常用的中间件源码解析。

第2章讲解异步爬虫,重点介绍异步请求和异步文件读写的实现,同时介绍了常用数据库MySQL、Redis、MongoDB的异步操作。

第3章讲解异步的浏览器自动化工具pyppeteer。作为与Selenium齐名的浏览器自动化工具,pyppeteer在一些特殊场景下拥有更出色的性能。

第4章讲解反爬虫的原理及其处理方案,包括设备指纹技术、滑动验证的轨迹识别和轨迹生成算法、字体反爬虫和CSS样式反爬虫的原理和处理方案、动态渲染流程及新的动态渲染处理技术方案、图片验证码的生成和识别训练、IP限制的现状和突破口。

第5章讲解针对具体的业务实现分布式爬虫框架,从消息系统的消息传递方式到基于RabbitMQ、Kafka、Celery的分布式爬虫设计。

第6章讲解编码和加密,主要介绍编码的原理及其发生乱码的原因、常用编码方式的转换和应用、Python实现常用的加密方式

,如DES、3DES、AES、RSA、MD5和SHA。

第7章讲解前端的JavaScript分析,包括常用的前端调试方法和工具、前端使用JavaScript防护的常用措施、基于AST的JavaScript源码混淆原理和还原方法。

第8章讲解搜索引擎技术的原理和架构,以及开源搜索引擎框架Elasticsearch的常用操作,介绍Elasticsearch集群的快速部署、Elasticsearch的常用管理接口,以及Python与之交互的方法。

第9章开发一个搜索引擎的项目,主要涉及Elasticsearch的部署、搜索引擎爬虫的开发、搜索结果的展示等环节。

本书配套源代码请扫描下方二维码下载。

关于作者

我是非科班出身的程序员,中途转行从事Python网络爬虫开发和Python全栈开发工作,从零基础到掌握网络爬虫开发的全体系技术,一路走过很多曲折的道路。编写本书的原因之一是帮助那些与曾经的我一样不知道如何提升技术水平,以及在网络爬虫领域还比较迷茫的读者。在技术道路上没有成功的捷径,如果有,那就是昼夜兼程地学习和实践。希望本书能起到抛砖引玉的效果。我曾就职于Synnex,这是一家优秀的世界五百强公司。在职时,我从事流程自动化方面的工作,遇到了平易近人的领导及一群友好和富有爱心的同事,他们在我的技术提升和视野开阔方面给予了很大的帮助,在这里我十分感谢他们。同时,在个人博客中我不断地总结,并将平时工作中的经验记录在其中。这个习惯也为我编写本书奠定了基础。为了更系统地学习和总结,我萌生了写这本书的想法,这也是编写本书的另一个原因。在离开Synnex,向更高技术台阶奋进的同时,我也开启了本书的编写。

由于我的水平有限,书中不当之处在所难免,欢迎广大同行和读者批评指正。

李科均2023年1月

目录

第1章Scrapy框架

1.1关于Scrapy

1.1.1Scrapy简介

1.1.2Scrapy安装

1.2Scrapy基础

1.2.1Scrapy测试流程

1.2.2Scrapy开发流程

1.2.3Scrapy框架架构

1.2.4Request对象和Response对象

1.2.5HTML页面解析

1.2.6HTML页面泛解析

1.3爬虫组件

1.3.1基础爬虫

1.3.2通用爬虫

1.4中间件组件

1.4.1爬虫中间件

1.4.2下载中间件

1.4.3随机UserAgent中间件

1.4.4Selenium中间件

1.4.5pyppeteer中间件

1.5数据管道组件

1.5.1自定义Pipeline

1.5.2文件下载Pipeline

1.5.3文件下载案例

1.6数据导出器组件

1.6.1内置数据导出器

1.6.2自定义数据导出器

1.7分布式Scrapy

1.7.1分布式架构

1.7.2分布式通信队列

1.7.3分布式爬虫

1.7.4分布式调度

1.7.5分布式去重

1.7.6自定义去重组件

1.7.7基本开发流程

1.8Scrapy参考手册

1.8.1常用命令

1.8.2常用配置项

1.9案例:  使用Scrapy获取当当网商品信息

1.9.1项目需求

1.9.2项目分析

1.9.3编码实现

1.9.4容器化部署

第2章异步爬虫

2.1异步I/O与协程

2.1.1迭代器与生成器

2.1.2yield from关键字

2.1.3Python协程原理

2.2asyncio异步框架

2.2.1创建可等待对象

2.2.2运行asyncio程序

2.2.3asyncio结果回调

2.2.4asyncio并发和多线程

2.3异步请求和文件操作

2.3.1aiohttp异步请求库

2.3.2requests异步方案

2.3.3aiofiles异步文件操作

2.4异步数据库

2.4.1MySQL异步读写

2.4.2MongoDB异步读写

2.4.3Redis异步读写

2.5案例:  全流程异步爬虫的运用

2.5.1案例需求

2.5.2案例分析

2.5.3编码实现

第3章pyppeteer

3.1pyppeteer基础

3.1.1pyppeteer简介

3.1.2pyppeteer环境安装

3.2pyppeteer的常用内部方法

3.2.1浏览器启动器

3.2.2页面常用操作

3.2.3页面Cookie处理

3.2.4页面节点选择器

3.2.5键盘和鼠标操作

3.2.6内嵌框处理

3.2.7JavaScript操作

3.2.8Request和Response

3.3pyppeteer常用操作

3.3.1启动项参数设置

3.3.2识别特征处理

3.3.3配置代理及认证

3.3.4拦截请求和响应

3.4案例:  pyppeteer动态代理的切换

第4章反爬虫

4.1设备指纹

4.1.1Canvas指纹

4.1.2WebGL指纹

4.1.3Font指纹

4.1.4AudioContext指纹

4.2滑动验证

4.2.1滑动距离识别

4.2.2轨迹生成算法

4.2.3滑动验证示例

4.3字体反爬虫

4.3.1字体反爬虫原理

4.3.2通用解决方案

4.3.3字体反爬虫示例

4.4CSS样式反爬虫

4.4.1元素排序覆盖

4.4.2雪碧图拼凑

4.4.3选择器插入

4.5动态渲染

4.5.1Ajax动态加载信息

4.5.2requestshtml渲染

4.5.3替Splash渲染方案

4.6图片验证码

4.6.1验证码生成及验证原理

4.6.2Tesseract 4环境部署

4.6.3二值化、去噪点和识别

4.6.4Tesseract 4样本训练

4.7IP限制

4.7.1代理技术原理及发展现状

4.7.2全新分布式家庭代理

4.7.3零成本纯净测试IP

第5章分布式爬虫系统的设计

5.1消息系统的消息传递模式

5.1.1发布订阅模式

5.1.2点对点模式

5.1.3Redis发布订阅框架

5.2基于RabbitMQ中间件的设计

5.2.1RabbitMQ基础

5.2.2Docker部署RabbitMQ

5.2.3RabbitMQ可视化管理

5.2.4Python中使用RabbitMQ

5.3基于Kafka中间件的设计

5.3.1Kafka基础

5.3.2docker部署Kafka集群

5.3.3Kafka可视化管理

5.3.4Python中使用Kafka

5.4基于Celery分布式框架的设计

5.4.1Celery基础

5.4.2Celery的使用

5.4.3Celery可视化管理

5.4.4路由任务与定时任务

第6章编码及加密

6.1编码及转换

6.1.1编码与乱码原理

6.1.2URL编码转换

6.1.3Bytes对象

6.1.4Base64编码

6.2加密与解密

6.2.1概述

6.2.2DES与3DES

6.2.3AES加密

6.2.4RSA加密及签名

6.2.5散列函数

第7章JavaScript安全分析

7.1JavaScript分析基础

7.1.1浏览器开发者工具

7.1.2断点及动态调试

7.1.3加密库CryptoJS

7.1.4Python中运行JavaScript

7.2JavaScript入口定位 

7.2.1全局搜索

7.2.2事件记录器

7.2.3油猴插件Hook

7.3JavaScript防护

7.3.1域名锁定

7.3.2源码校验

7.3.3防格式化

7.3.4鼠标轨迹检测

7.3.5控制面板检测

7.3.6浏览器特征检测

7.3.7浏览器指纹检测

7.3.8debugger反调试

7.4AST基础

7.4.1抽象语法树

7.4.2基于AST混淆策略 

7.4.3Ob混淆工具

7.5Babel插件开发

7.5.1Babel及模块

7.5.2解析与生成

7.5.3AST转换

7.5.4节点类型

7.5.5节点与路径

7.5.6作用域管理

7.6案例:  Ob混淆还原

7.6.1编码还原

7.6.2算术表达式还原

7.6.3长数组还原

7.6.4控制流还原

7.6.5逗号表达式还原

7.6.6一些细节处理

7.7独立源码运行

7.7.1运行环境监测

7.7.2构建window对象

7.7.3调用JavaScript代码

7.7.4案例:  调用JavaScript源码实现接口请求

第8章搜索引擎技术

8.1搜索引擎概述

8.1.1概述

8.1.2系统架构

8.1.3网络爬虫

8.1.4倒排索引

8.2Elasticsearch引擎

8.2.1Elasticsearch简介

8.2.2Elasticsearch集群部署

8.2.3索引管理

8.2.4插入文档

8.2.5删除文档

8.2.6更新文档

8.2.7文档批处理

8.2.8文档搜索

8.2.9Python操作Elasticsearch

第9章项目:  创建搜索引擎系统

9.1项目简介

9.1.1项目概述

9.1.2环境准备

9.2搜索引擎爬虫

9.2.1分布式通用爬虫

9.2.2修改配置试运行

9.2.3保存数据到Elasticsearch

9.2.4布隆过滤器去重

9.3前端交互

9.3.1前端页面

9.3.2后端服务

9.3.3模板渲染

9.4项目部署

9.4.1基础服务部署

9.4.2爬虫部署

附录A参考资源网址

作者简介

编辑推荐

本书是Python网络开发从业者的提升方向,理论结合实践,是一本全面的学习指南。

作者寄语

电子资料

www.luweidong.cn

下一个