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技术。

浏览器调试常用技巧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/63584.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu开机自启服务systemd.service配置教程(Ubuntu服务)(Linux服务)upstart

文章目录 为什么要将程序配置成服务?1. 自动启动2. 后台运行3. 定时重启4. 简化管理5. 整合系统 版本支持1. Ubuntu 14.04及更早版本:使用upstart作为默认的init系统/etc/rc.local旧版本新版本 2. Ubuntu 15.04到16.04版本:默认使用systemd作…

6.s081/6.1810(Fall 2022)Lab5: Copy-on-Write Fork for xv6

前言 本来往年这里还有个Lazy Allocation的,今年不知道为啥直接给跳过去了。. 其他篇章 环境搭建 Lab1: Utilities Lab2: System calls Lab3: Page tables Lab4: Traps Lab5: Copy-on-Write Fork for xv6 参考链接 官网链接 xv6手册链接,这个挺重要…

【云原生】Docker-compose中所有模块学习

compose模块 模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但大家不用担心,这里面大部分指令跟 docker run 相关参数的含义都是类似的。 默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。 version: "3&quo…

【从零学习python 】02. 开发工具介绍

文章目录 编写Python代码一、常见的代码编辑工具二、运行Python程序三、Pycharm的下载和安装PyCharm的主要功能区域进阶案例 编写Python代码 根据我们之前介绍的知识,我们知道,所谓代码其实就是将一段普通文本按照一定的规范编写,然后交给电…

人工智能的缺陷

首先从应用层面理解什么是人工智能,目前人工智能主流应用面包括:自然语言处理领域,代表为chatgpt,我们能用其进行日常交流,问题答疑,论文书写等。计算机视觉领域,代表为人脸识别,现在…

百度UEditor编辑器如何关闭抓取远程图片功能

百度UEditor编辑器如何关闭抓取远程图片功能 这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发&a…

centos7 yum源安装出错及更新问题

如下 首先,在搜索jdk时报错如下: 解决办法 1、进入 yum的repo目录 cd /etc/yum.repos.d/2、修改所有的CentOS文件内容 sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-*sed -i s|#baseurlhttp://mirror.centos.org|baseurlhttp://vau…

Rust 编程小技巧摘选(7)

Rust 编程小技巧(7) 1. 结构体 Display trait 结构体的两种形式,对应的成员取法不同; 前者用 self.成员变量名 self.x, self.y;后者用 self.成员索引号 self.0, self.1, self.2, ...... use std::fmt::Display; use std::fmt::Result; us…

如何从 Android 设备恢复已删除的文件?

从 Android 设备恢复已删除的文件很简单,但您需要了解内部恢复和SD 卡恢复之间的区别。 目前销售的大多数 Android 设备都配备了 SD 卡插槽(通常为 microSD),可以轻松添加额外的存储空间。该存储空间可用于存储照片、视频、文档&a…

配置Hive远程服务详细步骤

HiveServer2支持多客户端的并发和认证&#xff0c;为开放API客户端如JDBC、ODBC提供了更好的支持。 &#xff08;1&#xff09;修改hive-site.xml&#xff0c;在文件中添加以下内容&#xff1a; <property><name>hive.metastore.event.db.notification.api.auth&l…

ArcGIS Pro简介下载安装地址

ArcGIS Pro简介 ArcGIS Pro是一款功能强大的地理信息系统&#xff08;GIS&#xff09;软件&#xff0c;由Esri开发。它为用户提供了一种直观、灵活且高效的方式来处理、分析和可视化地理数据。ArcGIS Pro具有现代化的用户界面和工作流程&#xff0c;使用户能够更好地利用地理信…

【Linux】节点之间配置免密登录

文章目录 1、实现2、原理3、SSH的理解 1、实现 先写实现&#xff0c;解决问题后有兴趣的自己看后面的原理。 以实现节点A&#xff08;主&#xff09;免密登录到节点B&#xff08;从&#xff09;为例&#xff1a;&#xff08;注意例子里节点B被登录&#xff09; 步骤一&#xf…

L2CS-Net: 3D gaze estimation

L2CS-Net: Fine-Grained Gaze Estimation in Unconstrained Environments论文解析 摘要1. 简介2. Related Work3. METHOD3.1 Proposed loss function3.2 L2CS-Net 结构3.3 数据集3.4 评价指标 4. 实验4.1 实验结果 论文地址&#xff1a;L2CS-Net: Fine-Grained Gaze Estimation…

Mysql主从复制-主库/从库

介绍 mysql的主从复制是一个异步的复制过程&#xff0c;底层是基于Mysql数据库自带的二进制日志功能&#xff0c;就是一台或多台数据库&#xff08;slave,从库&#xff09;从另一台MYSQL数据库&#xff08;master,主库&#xff09;进行日志的复制然后再解析并应用到自己&#…

IO进程线程第五天(8.2)进程函数+XMind(守护进程(幽灵进程),输出一个时钟,终端输入quit时退出时钟)

1.守护进程&#xff08;幽灵进程&#xff09; #include<stdio.h> #include<head.h> int main(int argc, const char *argv[]) {pid_t cpid fork();if(0cpid){ //创建新的会话pid_t sidsetsid();printf("sid%d\n",sid);//修改运行目录为不可卸载的文件…

K8S系列文章之 自动化运维利器 Ansible

Ansible-安装 第一步&#xff1a;安装我们的epel扩展源 yum -y install epel-release 我这里会报/var/run/yum.pid 已被锁定&#xff0c;如果没有直接进行下一步 [rootmaster home]# yum -y install epel-release 已加载插件&#xff1a;fastestmirror, langpacks /var/run/…

计算机网络—TCP和UDP、输入url之后显示主页过程、TCP三次握手和四次挥手

TCP基本认识 TCP是面向连接的、可靠的&#xff0c;基于字节流的传输层通信协议。 图片来源小林coding 序号&#xff1a;传输方向上字节流的字节编号。初始时序号会被设置一个随机的初始值&#xff08;ISN&#xff09;&#xff0c;之后每次发送数据时&#xff0c;序号值 ISN…

【网络】DNS、ICMP、NAT

目录 一、DNS(Domain Name System) 1、DNS背景 2、域名简介 二、ICMP协议 1、ICMP功能 2、ICMP的报文格式 3、ping命令 4、traceroute命令 三、NAT技术 1、NAT技术背景 2、NAT IP转换过程 3、NAPT 4、NAT技术的缺陷 5、NAT和代理服务器 一、DNS(Domain Name Syste…

QtWebApp开发https服务器,完成客户端与服务器基于ssl的双向认证,纯代码操作

引言&#xff1a;所谓http协议&#xff0c;本质上也是基于TCP/IP上服务器与客户端请求和应答的标准&#xff0c;web开发中常用的http server有apache和nginx。Qt程序作为http client可以使用QNetworkAccessManager很方便的进行http相关的操作。Qt本身并没有http server相关的库…

【零基础学Rust | 基础系列 | 数据结构】元组,数组,向量,字符串,结构体

文章标题 简介&#xff1a;一&#xff0c;元组&#xff1a;1&#xff0c;定义元组&#xff1a;2&#xff0c;访问元组元素&#xff1a;3&#xff0c;元组解构&#xff1a;4&#xff0c;元组在函数中的应用&#xff1a; 二&#xff0c;数组&#xff1a;1&#xff0c;数组的声明和…