Python3 网络爬虫开发实战

第二章 基本库的使用

urlib的使用

比较好用的是parse模块来进行URL的各种处理,

requests的使用

  • requests库也可以session维持,s=requests.Session(),s.get(url=‘…’)

  • 有些网站没有设置好HTTPS证书,导致出现不是私密连接的错误,我们可以设置忽略证书的验证,在get请求中加上verify=false即可。

  • 有些网站开启了身份认证,这个时候通过auth参数设置即可。
    img

正则表达式

会用就行

httpx的使用

对于强制使用HTTP/2.0的网站,urlib和requests是不支持的,这个时候就得使用httpx了。

第三章 网页数据的解析提取

XPath的使用

基于XML路径选择

Beautiful Soup的使用

非常强大的HTML解析器,推荐使用。

针对HTML语言,能够十分方便的进行解析提取。

pyquery的使用

适用于了解jQuery、CSS的选手

parsel的使用

同时支持Xpath和CSS选择器,并且融合了正则表达式的提取功能。parsel灵活且强大,同时也是最流行的爬虫框架Scrapy的底层支持。

第四章 数据的存储

TXT文本文件存储

采用基本的文件操作读写即可

JSON文件存储

使用Json库来处理Json数据,再采用文件操作读写

CSV文件存储

逗号分隔值或字符分隔值,可以用excel打开

采用csv库来读取csv文件

MySQL存储

采用pymysql库来操作

MongoDB存储

非关系型数据库,基于键值对

采用PyMongo库来操作

Redis缓存存储

redis是一个基于内存的、高效的键值型非关系型数据库,存取效率极高,使用也很简单

采用redis-py库来操作

Elasticsearch搜索引擎存储

方便对存储的数据进行搜索。

使用elasticsearch库

RabbitMQ的使用

RabbitMQ是一个消息队列,可以用于进程间的通信

第五章 Ajax数据爬取

在读本章之前,已经掌握Ajax数据的爬取,无需过多总结

第六章 异步爬虫

协程:运行在用户态的轻量级线程。用户态线程要映射到内核态线程,只有内核态线程才能被CPU调度,用户态线程不行。

异步爬虫的好处就是,在等待服务器返回响应的时候,CPU可以去处理其他事情。

  • 并发限制,由于aiohttp支持非常高的并发量,如几万,十万,百万都可以做到,很可能将网站爬挂,所以需要控制并发量。

第七章 JavaScript动态渲染页面爬取

Selenium的使用

Selenium是一个自动化测试工具,可以驱动浏览器完成特定的操作,比如点击、下拉,还可以运行JS代码。

优势是所见即所爬,可以避免有些页面由JS生成,非原始HTML代码,这其中并不包含Ajax请求的情况。也可以避免Ajax中请求接口加密,难以逆向的情况。

有些操作Selenium是不支持的,如下拉进度条,这个时候可以运行JS代码,将进度条下拉。

切换Frame,Selenium默认是在父Frame进行操作的,这个时候就可以切换到子页面进行操作。

延时等待:确保页面加载出来后,再进行操作。

还可以方便对Cookie进行操作,比如获取,添加,删除

Selenium反屏蔽

Splash的使用

  • 可以运行Lua脚本
  • 支持异步
  • Splash相当于一个服务器,可以使业务逻辑更加轻量级。

Pyppeteer的使用

Pyppeteer是Selenium的替代品,相比于Selenium,其不用安装相关浏览器,也不用安装对应驱动,也不用安装对应版本的Selenium库。

  • 支持调试模式
  • 用户数据持久化,避免重新打开浏览器时又要登录。

Playwright的使用

API简洁又强大

  • 支持所有主流浏览器
  • 支持移动端页面测试
  • 安装、配置简单
  • 提供自动等待相关API,减少代码编写复杂度

可以录制浏览器操作,并生成相应代码。

  • 支持网络劫持和修改,例如修改request的属性,修改响应结果等。

第八章 验证码的识别

OCR技术识别图形验证码

只能识别图形验证码,就是类似于数字,字母组合的那种

优势是简单(也不是很简单),缺点是正确率较低

OpenCV识别滑动验证码的缺口

其中涉及一些图像处理算法——高斯滤波、边缘检测、轮廓提取等算法,这些技术运用到其他工作中也很有帮助

缺点正确率较低

深度学习识别图形验证码、滑动验证码

优势:正确率较高

缺点:训练和维护模型较为复杂,需要大量训练数据(可能需要自己构造),而且技术实现难度也较高(得写深度学习代码)。

打码平台使用验证码

优势:啥都好,基本上什么都能识别。有自动识别和人工识别,自动识别使用人工智能训练模型,人工识别就识别复杂的。

缺点:付费

手机验证码的自动化处理

关键两步:

  • 监听手机短信内容
  • 将短信内容转发至指定位置

对于大量手机短信监控与转发,可以使用群控处理,也可以使用卡池,猫池,例如一个设备可以支持插128张电话卡。但是卡池,猫池仅仅用来做短信收发,有点浪费。

接码平台:好处:省事 缺点:付费,不稳定,说不定就用不了了。

第九章 代理的使用

代理的设置

本章详细讲述了各个请求库的代理设置方法,如requests、selenium等

代理池的维护

为什么需要维护代理池?

因为无论是免费代理,还是付费代理,都不能保证可用,所以我们需要维护代理池中代理的可用性,要保证从代理池中取到的代理是可用的。

代理池分为四个模块

  • 存储模块:负责存储爬取下来的代理
  • 获取模块:负责定时在各大代理网站爬取代理
  • 检测模块:负责定时检测代理是否可用
  • 接口模块:用API提供对外服务的接口。用接口是因为如果直接连存储模块的数据库的话,需要知道数据库连接信息,也要配置连接,而且别人使用这个代理池的话,也要数据库的连接信息,十分不方便,也不安全。

付费代理的使用

付费代理分为两类设置方案

  • 通过接口提取代理:可以灵活控制使用哪个代理
  • 使用隧道代理:无需关心具体使用哪个代理,并且代理商会在背后维护整个代理池,更加省心。相当于代理池中的接口模块。

ADSL拨号代理的搭建方法

通过ADSL拨号的机制,实现代理的切换。因为ADSL每次拨号,便会切换一个IP,同时ADSL对应的云主机上搭建了代理服务,我们就可以使用这个代理了。

这种方法的优点就是,由于是单独使用一个服务器,其稳定性更好(不会很多人一起用),速度也更快。

模拟登录

模拟登录的基本原理

模拟登录主要分为两种模式:

  • 基于Session和Cookie

    分为两种实现方式。1.Cookie里只保存了SessionID相关的信息,服务器根据收到的SessionID找到对应的Session。2.Cookie里直接保存了某些凭证信息,比如Set-cookie字段,服务器拿到Cookie里的凭证信息后,直接校验即可。

    对于简单的登录请求,直接获取Set-cookie字段即可,复杂的比如加密参数,可以通过selenium获取cookie字段

  • 基于JWT

    由于前后端分离越来越普遍,这种方式也越来越流行。JWT实际上就是通过一个Token字段来校验登录状态。

账号池

有些网站采取了反爬虫措施,对于单个账号的频繁爬取会采用封号或禁止访问的风险,这个时候就可以采用账号池来应对。

账号池就是里面有很多账号,然后保存了每个账号相应的cookie或jwt,每次请求时则随机从账号池里选取的cookie或jwt即可。

基于Session和Cookie的模拟登录爬取实战

对于cookie的维持,我们可以直接使用requests库中的session类,就不用去管cookie了,session类会自动帮我们维持cookie。

基于JWT的模拟登录爬取实战

在登录返回的响应中,给了token。

在以后的每个请求头中的authorization字段传入这个token即可。

大规模账号池的搭建

为了避免单个账号频繁的请求被封号,账号池应运而生。

JavaScript逆向爬虫

网站加密和混淆技术简介

网站加密可以分为两类:

  • URL/API参数加密

    比如给某些URL的参数加上校验码,或者给接口加上一个验证参数。

  • JavaScript压缩、混淆和加密

    • 代码压缩:去除不必要空格、换行,更改变量名,降低代码可读性。
    • 代码混淆:使用变量替换、字符串阵列华,多态变异、僵尸函数,使代码变得难以阅读和分析,是理想、实用的保护方案。
    • 代码加密:对JS代码加密,转成人无法阅读或者解析的代码。

本节介绍了接口加密技术和各种各样的JavaScript的压缩、混淆技术,并初步了解了WebAssmbly技术。

无限debugger原理与绕过

当我们打开浏览器开发者工具时,经常会遇到自动进入到调试页面的情况,这是因为开发者们在JS代码中加入了无限循环的debugger语句,可以是for循环、setInterval来每秒执行一次的循环等等。
绕过方法:

  1. 禁用断点,可以禁用全局断点,也可以对某一行的断点禁用,或添加条件断点。
  2. 替换文件,将原文件中的debugger语句用新文件替换掉就行,可以使用浏览器的Override功能,也可以使用Charles、Fiddler等抓包工具替换等等。

使用Python模拟执行JS代码

利用PyExecJS来模拟执行JS方法,但要求对JS和Python比较熟悉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Marhoosh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值