自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 认识 python 类和实例

现在要定义 “自行车” 这个类,我们可以把 “车轮数量” 这些所有自行车都相同的属性定义为 “类属性”,将 “车轮直径” 这些不同自行车会有区别的属性定义为 “实例属性”,将 “给自行车安装车灯” 这些对自行车进行操作的行为定义为 “类中的方法”。举例来说,“自行车” 这个概念可以用 “类” 来表示,相对的,具体的 “这一辆自行车”、“那一辆自行车” 等可以用 “实例” 表示。python 面向对象编程中,会接触到 “类” 和 “实例” 的概念,这两者可以用来表示现实世界的事物。

2024-08-22 16:07:22 297

原创 webdriver 反爬虫 (selenium反爬虫) 绕过

undetected_chromedriver 是一个防止浏览器指纹特征被识别的依赖库,使用 undetected_chromedriver.Chrome() 新建浏览器窗口,从而修改浏览器指纹特征。webdriver 属性是我们最常听到的,通过 webdriver 驱动浏览器就会包含这一属性,因此可用来辨别爬虫程序(可检测的属性远不止这一种)。因为 webdriver 属性置空 js 代码有更改,同时最好修改不止一个属性,因此直接使用开源分享的 js 代码比较方便。

2024-08-21 16:03:12 1153

原创 爬虫 Web Js 逆向:RPC 远程调用获取加密参数(2)使用 JsRPC 框架

RPC (Remote Procedure Call) 是远程调用的意思。在 Js 逆向时,本地可以和浏览器以服务端和客户端的形式通过 WebSocket 协议进行 RPC 通信,这样可以直接调用浏览器中的一些函数方法,不必去在意函数具体的执行逻辑,可以省去大量的逆向调试时间。本文以加密参数 a_bogus 为例,使用 JsRPC 框架实现 RPC 远程调用,获取加密参数。

2024-08-15 19:11:12 848 3

原创 爬虫 Web Js 逆向:RPC 远程调用获取加密参数(1)WebSocket 协议介绍

WebSocket是一种在单个TCP连接上进行全双工通信的协议。优点:WebSocket 协议使客户端和服务器端之间的数据交换变得更加简单,它允许交互双方创建持久连接,同时支持服务器端主动向客户端推送数据。注意:WebSocket 协议规范只作为参考,所以服务器端和客户端的连接条件和消息格式通常由服务器端开发者决定。因此,服务器端可以在握手时对客户端进行身份校验,在消息传递或数据帧方面也可以设计一些用于反爬虫的方法。服务器端可以以任何理由关闭连接,开发者常常利用这些特点限制爬虫连接或者获取数据。

2024-08-14 21:49:14 799

原创 爬虫 Web Js 逆向:常用的混淆、编码、加密介绍

爬虫 Web Js 逆向:常用的混淆、编码、加密介绍注:代码混淆本质是对代码标识符和结果的调整,从而达到不可读不可调试的目的。注:参数加密方法有的可解密,有的不可解密。

2024-08-10 18:13:12 1268

原创 爬虫 Web Js 逆向基础:window 对象常用属性和方法

window 对象:表示浏览器当前打开的窗口document 对象:载入浏览器的 HTML 文档navigator 对象:包含的属性描述了当前使用的浏览器location 对象:包含有关当前 URL 的信息screen 对象:存放有关显示浏览器屏幕的信息history 对象:包含用户在浏览器窗口中访问过的 URL。

2024-08-09 13:18:28 804

原创 爬虫 Web Js 逆向基础:js 基础语法

网络爬虫对 Web Js 逆向主要是为了对各种研究加密参数,调试分析 JavaScript 代码来弄清加密参数的生成逻辑。对于加密参数的逆向方式,个人认为 “对 js 源码进行补环境来模拟加密参数生成” 这种方法更加方便。综上,想要做好 Js 逆向,了解 JavaScript 语法是必须的。

2024-08-08 15:09:16 521

原创 python 协程并发发送请求:asyncio、aiohttp 使用

在使用协程之间,首先需可等待对象的概念。可等待对象指可以在 await 语句中使用的对象;执行多个协程任务时,如果遇见可等待对象,就可以将当前任务挂起,执行另一个任务。如下图,图中 函数f_ 中并没有可等待对象,使用协程消耗的时间与不使用协程相同,大约为 4s。从输出结果看,可知执行完毕 task_1 之后才开始执行 task_2。如下图,图中 函数f_ 中含有可等待对象 asyncio.sleep(2),使用协程消耗的时间与不使用协程相同,大约为 2s。

2024-08-05 17:14:00 989

原创 python 爬虫入门实战——爬取维基百科“百科全书”词条页面内链

上述思路中,最主要的是通过 find 函数查找到所需标签列表, 通过 F12 可知: 整个页面内容部分包含在 “class” 属性值为 “mw-content-container” 的 “div” 标签中,因此可通过 bs对象 查找所需标签 bs.body.find('div', {'class': 'mw-page-container'}).find('div', {'class': 'mw-content-container'})逐个处理标签列表中的标签,将所需数据以列表形式返回。

2024-08-03 12:52:19 1141

原创 python print 函数参数:sep 自定义分隔符,end 自定义结尾符

1. 简述print 函数可以将内容打印到标准输出,如果不指定 end 参数,默认在输出的内容之后加一个 “回车符\n”。以下是 print 函数常用的参数用法: print(object, …, sep=str, end=str) object, …:要打印的内容,可以为多个 sep 参数:指定多个 object 以 sep 分隔(默认为空格) end 参数:在 object 打印结束后,打印 end(默认为回车)

2024-08-02 12:11:33 339

原创 python lambda 表达式用法

调用创建的匿名函数,与调用 def 创建的函数用法相同,都是将所需参数传入(注意:直接调用匿名函数需要将匿名函数括起来,否则不能正确识别参数) 如下图,print((lambda x: x**2)(3)) 将匿名函数括号括起来后,编译器可正确识别函数定义部分与参数部分,返回结果 “9”;(注:匿名函数可理解为没有函数名、函数体只包含一行代码的函数)lambda 表达式返回的是函数类型的对象,若不将返回的函数对象赋值到某个变量,则这个匿名函数只能调用一次,随时建立随时销毁。

2024-08-01 19:12:28 275

原创 python 直接引用、浅拷贝、深拷贝的区别

python 直接引用、浅拷贝、深拷贝的区别

2024-07-30 18:54:52 344

原创 python import:跨文件夹导入模块

python 中 import 语句可以往当前 py 文件中导入外部模块,从而使用外部模块中的函数与类。如果想要导入 python 内置模块和 pip install 安装的模块,可以直接使用 “import …” 的形式导入。如果想要导入自己本地定义的模块(即跨文件夹导入),则有一些其他注意事项。

2024-07-29 10:36:54 1295

原创 python 内置类型简述(4) —— 集合映射类(set、frozenset、dict)

本文简述了 python 集合映射类(set、frozenset、dict)的常用函数及方法,并将功能相近或相反的函数编组

2024-07-18 14:28:00 1071

原创 python 内置类型简述(3) —— 列表类(list、tuple、range)

本文简述了 python 列表类(list、tuple、range)的常用函数及方法,并将功能相近或相反的函数编组

2024-07-16 15:22:55 960

原创 python 内置类型简述(2) —— 字符类型(str、bytes、bytearray)

本文简述了 python 字符类型(str、bytes、bytearray)的常用函数及方法,并将功能相近或相反的函数编组

2024-07-15 17:58:00 1147

原创 python 内置类型简述(1) —— 数值类型(int、float、complex)

本文简述了 python 数值类型(int、float、complex)的常用函数及方法,并将功能相近或相反的函数编组

2024-07-14 15:11:24 721

原创 python 全局变量、局部变量、自由变量的使用

自由变量:是一个术语,指未在局部作用域中绑定的变量,一般用来引用局部变量的值;可以使用“nonlocal”关键字定义。(注:通常只有在定义高阶函数函数时才会使用自由变量)局部变量:一般出现在“def”定义的函数中,在整个函数块中有效;在函数中进行赋值操作时会自动定义。全局变量:在整个 py 文件中有效;在函数中修改全局变量的值,全局变量的值在整个py文件中都会发生变化;在函数中修改自由变量的值,自由变量所引用的局部变量的值也会发生变化。在函数中修改局部变量的值,局部变量的值仅在当前函数块中发生变化;

2024-05-20 16:33:29 471 1

原创 python拆包——获取列表/元组/字典元素、快速交换变量值

使用拆包提取元素,不需要我们自己动手通过索引从序列中来提取元素,可以减少出错的可能,同时也方便使用。拆包也可以用来交换变量值,不需要中间变量。

2024-05-17 10:00:22 487

原创 python列表替代——元组、双端队列、数组

在python各种数据类型中,list列表类型简单、灵活、实用,但是在针对某些具体的需求时,出于性能等的考虑,可以使用其他数据类型。列表元素不可变时,可以使用元组类型;在处理大量数值时,可以使用数组类型;如果经常需要在列表两端添加或删除元素,可以使用双端队列类型。

2024-05-15 11:41:21 334

原创 python使用列表推导式(列表解析)及生成器表达式构建列表/序列

我们平时要构建列表或其他序列,除了使用for循环外,还可以使用列表推导式创建列表,或使用生成器表达式创建其他序列。相对于使用for循环,后者的代码更加简洁易于理解,同时运行速度也更快。

2024-05-14 19:05:50 513 3

原创 markdown语法——引用链接、脚注、内嵌HTML标签

可以将链接的第二部分放在Markdown文档中的任何位置。有些人将它们放在出现的段落之后,有些人则将它们放在文档的末尾(例如尾注或脚注)。参考样式链接分为两部分:与文本保持内联的部分以及存储在文件中其他位置的部分,以使文本易于阅读。引用样式链接是一种特殊的链接,它使 URL 在 Markdown 中更易于显示和阅读。脚注的注释部分放在md文档哪里都可以,但渲染之后会统一显示在文档末尾。

2024-05-13 18:38:47 1101 1

原创 正则表达式

正则表达式,英文Regular expressions,也叫REs、regexs或regex patterns。

2024-05-13 17:40:48 551 1

原创 python爬虫自用的网站通用类

【代码】python爬虫自用的网站通用类。

2024-05-11 14:04:18 592 1

原创 python爬虫使用协程——asyncio&aiohttp常用

coroutine = f_coroutine() # 返回coroutine协程对象。

2024-05-10 18:46:32 432 1

原创 python爬虫——selenium自动化测试工具

service = Service(executable_path='') # 自定义webdriver位置。

2024-05-09 12:33:54 1151 1

原创 python爬虫网页解析——beautifulsoup4常用函数

bs.html.body.h1 == bs.html.h1 == bs.body.h1 == bs.h1 # 直接调用标签。bs.find_all(string='str | Pattern') # 根据标签包含的文本查找所有符合条件的标签。bs.find(string='str | Pattern') # 根据标签包含的文本查找第一个符合条件的标签。bs.find_all(name='') # 根据标签名查找所有符合条件的标签。

2024-05-08 23:27:39 699 1

原创 python爬虫——XPath解析

node[contains(@attr, "attr_value")]:选取attr属性值包含attr_value的node节点。/node[position()<'position, int']:选取匹配的位置小于position的node节点。/node[@attr="attr_value"]:选取attr属性值为attr_value的node节点。//* == /descendant::* :选取所有子孙节点。/* == /child::* :选取所有子结点。

2024-05-07 11:26:02 369

原创 python爬虫库——requests常用函数

requests.get(url='', timeout='float | (float, float)') # 响应超时时间,‘tuple’类型分别指定了连接和读取的timeout。requests.get(url='', auth=('username, str', 'password, str')) # 基本身份认证。requests.request(method='', url='') # 以某种method请求。response = requests.get(url='') # GET请求。

2024-05-04 16:52:01 1013

原创 python爬虫库——urllib常用函数

urllib.parse.urljoin(base='', url='') # 将‘base_url’解析为四部分:<scheme>://<netloc>/<path>#<fragment>,使用‘scheme’、‘netloc’、‘path’三部分内容,对新URL缺失部分进行补充。urllib.parse.urlunparse(components=('scheme', 'netloc', 'path', 'params', 'query', 'fragment')) # 使用六部分信息构造URL。

2024-05-03 17:09:16 428

原创 python爬虫基础知识

在得到服务器返回的数据response后,可以使用beautifulsoup库来寻找想要的数据(beautifulsoup库简洁明了,使用方便,推荐入门学习使用)(最好学习一下正则表达式和re库,来进行所需信息的匹配查找);对于一些使用js渲染且不使用ajax的网站,可以使用自动化测试工具(如webdriver)调用浏览器,从而绕过js渲染,实现“所见即所爬”(js逆向难度一般都比较高,不是太多的数据,能直接绕过就不要花费太多时间精力了吧)。第三步,浏览器解析返回的数据,以一定的格式呈现数据。

2024-05-02 17:25:40 929 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除