编码算法
MD5
MD5是一个非常常见的摘要(hash)逻辑。特点就是小巧. 速度快. 难被破解,不可逆。(相同的内容计算出来的摘要应该是一样的)
python实现
1234567from hashlib import md5obj = md5()obj.update("zhangsan".encode("utf-8"))bs = obj.hexdigest()print(bs)
把密文丢到网页里,发现有些网站可以直接解密。这里并不是直接解密MD5. 而是”撞库”。网站数据库里存储了大量的MD5的值,需要进行查询的时候. 只需要一条select语句就可以查询到了。
如何避免撞库
md5在进行计算的时候可以加盐
12345678from hashlib import md5salt = "我是盐.把我加进去就没人能破解了"obj = md5(salt.encode("utf-8")) # 加盐obj.update("zhangsan".encode("utf-8" ...
JS进阶及逆向
JavaScript基础数据类型数值型:number(凡是数字都是数值型,不区分整数和小数)字符串:string(凡是引号包裹起来的内容全部都是字符串)布尔:bool(true、false)对象类型:object(特殊取值null)未定义型:undefinedjavascript一切皆对象
object对象Date对象12345678910111213141516var now=new Date();console.log(now.toLocaleString( ));/*获取日期和时间now.getDate() 获取日now.getDay () 获取星期now.getMonth () 获取月(0-11)now.getFullYear () 获取完整年份now.getYear () 获取年now.getHours () 获取小时now.getMinutes () 获取分钟now.getSeco ...
Linux安装Pycharm
下载Pycharm安装包
下载Pycharm安装包(tar.gz)
https://www.jetbrains.com/pycharm/download/#section=linux
解压
解压到home目录下的一个pycharm的文件夹
12cd /homemkdir pycharm
将压缩包移动到此文件夹下
1mv /home/kali/桌面/pycharm/pycharm-2023.1 /home/pycharm
解压
1tar -zxvf pycharm-professional-2023.1.tar.gz
更改host文件1vim /etc/hosts
在后面添加一行
10.0.0.0 account.jetbrains.com
激活原博主教学链接及破解补丁下载https://segmentfault.com/a/1190000043441773
将激活包放在和home下,和解压后的pycharm2023.1在同一目录
修改配置文件pycharm64.exe.vmoptions
1vim pycharm64.vmoptions
在后面 ...
MongoDB数据库
简介
MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。是NoSQL类型的数据库
一般爬虫使用的数据库,是根据项目来定的。如需求方指定了使用什么数据库、如果没指定,那么决定权就在爬虫程序员手里,如果自选的话,mysql 和mongodb 用的都是比较多的。但不同的数据库品种有各自的优缺点,不同的场景任何一种数据库都可以用来存储,但是某种可能会更好。比如如果抓取的数据之间的耦合性很高,关系比较复杂的话,那么mysql可能会是更好的选择。如果抓取的数据是分版块的,并且它们之间没有相似性或关联性不强,那么可能mongodb 会更好。
官方文档:https://docs.mongodb.com/
中文文档:https://www.mongodb.org.cn/
类型
数据库
数据库是用于存储数据的物理容器,每个数据库在文件系统中都有属于自己的文件集。一台 MongoDB 服务器中可以创建多个数据库,并且每个数据库都是独立的,都有属于自己的集合和权限,而且不同数据库中的数据会放置在不同的文件中。
MongoDB 的默认数据库为“test”,该数据库存储在 d ...
Redis数据库
Redis数据库Redis(Remote Dictionary Server),即远程字典服务,是一个使用ANSIC编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库,是NoSQL数据库。
redis的出现主要是为了替代早期的Memcache缓存系统的。map内存型(数据存放在内存中)的非关系型(nosql)key-value(键值存储)数据库,支持数据的持久化(基于RDB和AOF,注: 数据持久化时将数据存放到文件中,每次启动redis之后会先将文件中数据加载到内存,经常用来做缓存、数据共享、购物车、消息队列、计数器、限流等。(最基本的就是缓存一些经常用到的数据,提高读写速度)。
redis特性:
速度快
持久化
多种数据结构
支持多种编程语言
主从复制
高可用、分布式
安装redis的官方只提供了linux版本的redis,window系统的redis是微软团队根据官方的linux版本高仿的。
官方原版: https://redis.io/
中文官网:http://www.redis.cn
下载地址:https://github.com/tporadowski/r ...
scrapy框架
scrapy框架简介 Scrapy是一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试,也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等。
Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。
**Engine(引擎)**:负责Spider、Item Pipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。
**Scheduler(调度器)**:它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。可以想象成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的 ...
Web自动化之selenium
Web自动化
有些网站的数据都是通过接口的形式传输或者是一些 JSON 的数据,然后经过 JavaScript 渲染得出来的。用 requests 来爬取内容,爬取下来的只能是服务器端网页的源码,这和浏览器渲染以后的页面内容是不一样的。
真正的数据是经过 JavaScript 执行后,渲染出来的,数据来源可能是 Ajax,也可能是页面里的某些 Data,或者是一些 ifame 页面等。不过,大多数情况下极有可能是 Ajax 接口获取的。因此我们需要分析Ajax请求,分析这些接口的调用方式,通过抓包工具或者浏览器的“开发者工具”,找到数据的请求链接,然后再用程序来模拟。但是,抓包分析流的方式,也存在一定的缺点。因为有些接口带着加密参数,比如 token、sign 等等,模拟难度较大。
Puppeteer、Pyppeteer、Selenium、Splash 等自动化框架出现了。使用这些框架获取HTML源码,这样我们爬取到的源代码就是JavaScript 渲染以后的真正的网页代码,便于数据提取。同时,也就绕过分析 Ajax 和一些 JavaScript 逻辑的过程。这种方式就做到了可见即可爬 ...
Python爬取斗图网
爬取斗图网案例本篇以爬取斗图网为案例,分别有单线程爬取斗图网(耗时142秒),多线程爬取斗图网(耗时8秒),以及异步爬取斗图网(不足3秒)。
单线程爬取斗图王
单线程版本
123456789101112131415161718192021222324252627282930313233343536373839404142import requestsfrom lxml import etreeimport osimport timedef get_img_urls(): headers = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Mobile Safari/537.36' } res = requests.get("https://www.pkdoutu.com/p ...
Ubuntu+Gunicorn部署Django
Ubuntu+Gunicorn部署Django
服务器
先安装一些依赖包
1234567sudo apt-get updatesudo apt-get upgradesudo apt-get install nginxsudo apt-get install python3sudo apt-get install python3-pipsudo pip3 install virtualenvsudo apt install mysql-server
测试MySQL能否运行并创建数据库
1234567891011sudo mysqlmysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword'; mysql> FLUSH PRIVILEGES;exit;mysql -u root -p # 测试链接mysql> CREATE DATABASE IF NOT EXISTS n DE ...
并发爬虫
并发爬虫并发是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。强调多个事件在同一时间间隔发生。
进程、线程以及协程进程概念计算机的核心是CPU,承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,安排所有计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。
进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。
多道技术:空间复用+时间复用,于是有了进程!
进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。在三态模型中,进程状态分为三个基本状态,即运行态,就绪态,阻塞态。在五态模型中,进程分为新建态、终止态,运行态,就绪态,阻塞态。
线程的概念早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位,也是程序执行的最小单位。任务调度采用的是时间片轮转的抢占式调度方式,而进程是任务调度的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。后来,随着计算机的发展,对C ...