Python Scrapy    2022-11-25 15:18:14    0    0    0

爬虫的本质就是“抓取”第二方网站中有价值的数据,因此,每个网站都会或多或少地采用一些反爬虫技术来防范爬虫。比如前面介绍的通过 User-Agent 请求头验证是否为浏览器、使用 JavaScript 动态加载资源等,这些都是常规的反爬虫手段。

下面针对更强的反爬虫技术提供一些解决方案。

IP 地址验证

有些网站会使用 IP 地址验证进行反爬虫处理,程序会检查客户端的 IP 地址,如果发现同一个 IP 地址的客户端频繁地请求数据, 该网站就会判断该客户端是爬虫程序。

针对这种情况,我们可以让 Scrapy 不断地随机更换代理服务器的 IP 地址,这样就可以欺骗目标网站了。

为了让 Scrapy 能随机更换代理服务器,可以自定义一个下载中间件,让该下载中间件随机更换代理服务器即可。

Scrapy 随机更换代理服务器只要两步:

打开 Scrapy 项目下的 middlewares.py 文件,在该文件中增加定义如下类:

  1. class RandomProxyMiddleware (object) :
  2. #动态设置代理服务器的IP 地址
  3. def process request (self, request, spider):
  4. # get_random_proxy() 函数随机返回代理服务器的IP 地址和端口
  5. request.meta["proxy"] = get_random_proxy()
  1. 上面程序通过自定义的下载中间件为 Scrapy 设置了代理服务器。程序中的 get_random_proxy() 函数需要能随机返回代理服务器的 IP 地址和端口,这就需要开发者事先准备好一系列代理服务器,该函数能随机从这些代理服务器中选择一个。
  2. 通过 settings.py 文件设置启用自定义的下载中间件。在 settings.py 文件中增加如下配置代码:
  1. #配置自定义的下载中间件
  2. DOWNLOADER MIDDLEWARES = {
  3. 'ZhipinSpider.middlewares.RandomProxyMiddleware': 543,
  4. }

禁用Cookie

有些网站可以通过跟踪 Cooki

2022-11-24 12:45:31    0    0    0

一、前文

文章从易到难,依次介绍几种方法。
并简述其优劣。

二、钞能力

阿里云-Web应用防火墙-设置IP黑名单

花钱能解决的事情都不是事
很省心,但是也超级贵,比购买云服务器ECS还贵
我只能说一句,告辞,是在下不配~~~

三、宝塔应用

宝塔 Nginx防火墙 禁止海外访问

缺点:宝塔在实际商务中应用的安全性,我不太敢保证

四、域名解析方式

域名解析方式

优点:非常简单
缺点:只能禁止通过域名方法的方式,不能禁止通过IP访问的方式

五、Nginx 方式

Nginx 禁止国外 IP 访问网站

缺点:只能禁止访问前端端口,不能禁止访问后端端口

六、iptables封禁国外ip的方法

iptables较为复杂,也更加灵活
但是初学者,或者对linux不熟悉的同学,不太推荐
因为一个操作不当,就容易把自己关在外面

七、firewalld封禁国外ip的方法

Linux系统firewalld防火墙的应用实操(禁止屏蔽海外国外IP访问)

该方法推荐
能实现所需的所有功能,操作也比iptables简单
————————————————
版权声明:本文为CSDN博主「小康师兄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kangweijian/article/details/126254845

2022-11-24 12:20:45    0    0    0

前言: 先来说说为啥要写这篇文章,之前小编看了下nginx 的访问日志,发现每天有好多国外的IP地址来访问我的网站,并且访问的内容基本上都是恶意的。因此 我决定 禁止国外IP 来访问我的网站

想要实现这个功能有很多方法,下面我就来介绍基于 NGINX的ngx_http_geoip2模块 来禁止国外IP 访问网站

一、安装geoip2扩展依赖

  1. [root@fxkj ~]# yum install libmaxminddb-devel -y

二、下载ngx_http_geoip2_module模块

  1. [root@fxkj tmp]# git clone https://github.com/leev/ngx_http_geoip2_module.git
  2. [ro tmp]#

三、解压模块到指定路径

我这里解压到/usr/local 目录下

  1. [root@fxkj tmp]# mv ngx_http_geoip2_module/ /usr/local/
  2. [root@fxkj local]# ll ngx_http_geoip2_module/
  3. total 60
  4. -rw-r--r-- 1 root root 1199 Aug 13 17:20 config
  5. -rw-r--r-- 1 root root 1311 Aug 13 17:20 LICENSE
  6. -rw-r--r-- 1 root root 23525 Aug 13 17:20 ngx_http_geoip2_module.c
  7. -rw-r--r-- 1 root root 21029 Aug 13 17:20 ngx_stream_geoip2_module.c
  8. -rw-r--r-- 1 root root 3640 Aug 13 17:20 README.md

四、安装nginx 模块

首先说明下环境,我的nginx 版本是 1.16 , 在网上查了下 安装 ngx_http_geoip2 模块至少需要 1.18 版本及以上,因此此次安装我是 升级nginx1.18,添加 ngx_http_geoip2 模块。

下载nginx 1.18 版本

  1. [root
2022-11-20 01:00:07    0    0    0

宝塔中使用Laravel程序 .env 配置不生效的解决方法putenv函数被禁
title

2022-11-18 11:19:12    0    0    0

要安装运行Python的容器,那先到https://hub.docker.com/去查找一下,看看有哪些可用的镜像。
恩,最高的版本已经是3.8.0b4了,不过考虑下还是安装3.7.4稳定版把。
用来安装的虚拟机是Ubuntu 18.04服务器版,安装虚拟机就跳过不写了,太简单。
为了方便,使用root用户操作。
在Ubuntu上安装Docker
使用官方脚本,在终端输入

  1. curl -fsSL get.docker.com -o get-docker.sh

瞬间下载安装脚本:

  1. -rw-r--r-- 1 root root 13185 Sep 18 12:30 get-docker.sh

执行一下

  1. root@ubuntu:~# sh get-docker.sh

很快的,安装完了。启动docker服务:

  1. systemctl start docker
  2. systemctl status docker

可以看到,docker服务已经在运行了,设置开机启动用systemctl enable docker。

  1. root@ubuntu:~# systemctl status docker
  2. docker.service - Docker Application Container Engine
  3. Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
  4. Active: active (running) since Wed 2019-09-18 12:56:23 UTC; 9h ago
  5. Docs: https://docs.docker.com
  6. Main PID: 30874 (dockerd)
  7. Tasks: 10
  8. CGroup: /system.slice/docker.service
  9. └─30874 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

试运行一下docke

2022-11-16 15:24:15    0    0    0

win7系统安装了最新的1.71版本,折腾了挺久始终无法打开,查了下官网的更新记录发现1.70.3是支持win7的最后一个版本 ,最后安装了1.70版本后正常打开。

下载地址:
https://code.visualstudio.com/updates/v1_70
https://update.code.visualstudio.com/1.70.2/win32-x64/stable

2022-09-27 13:47:59    0    0    0

Nginx压缩包安装

1、nginx压缩包下载地址:http://nginx.org/en/download.html

2、按照业务需求,选择版本,进行下载:

3、将文件上传至Linux。

4、在目标目录下(任意,例如/home/app),创建nginx文件夹,将文件进行解压。

创建文件夹:mkdir nginx

文件解压:tar -zxvf nginx-1.22.0.tar.gz /home/app/nginx/nginx-1.22.0

5、进入nginx-1.22.0文件夹,输入命令。

  1. ./configure --with-stream
  2. make & make install

6、进入/usr/local/nginx/conf文件夹,修改配置文件nginx.conf。

7、进入/usr/local/nginx/sbin文件夹,输入命令,后台启动nginx。

  1. ./nginx &

Nginx配置开机自启

准备

  • nginx的安装目录:/usr/local/nginx
  • nginx安装成功,可以正常启动。

步骤

1、创建nginx启动命令脚本。

  1. vi /etc/init.d/nginx

2、在创建的脚本里面输入内容,path修改成nginx的安装路径。

  1. #! /bin/bash
  2. # chkconfig: - 85 15
  3. #PATH修改成nginx的安装地址
  4. PATH=/usr/local/nginx
  5. DESC="nginx daemon"
  6. NAME=nginx
  7. DAEMON=$PATH/sbin/$NAME
  8. CONFIGFILE=$PATH/conf/$NAME.conf
  9. PIDFILE=$PATH/logs/$NAME.pid
  10. SCRIPTNAME=/etc/init.d/$NAME
  11. set -e
  12. [ -x "$DAEMON" ] || exit 0
  13. do_start() {
  14. $DAEMON -c $CONFIGFILE || echo -n "nginx already running"
  15. }
  16. do_stop() {
  17. $DAEMON -s stop || echo -n "nginx not running"
  18. }
  19. do_rel
PHP    2022-09-21 12:18:57    0    0    0

前言

这两天需要做一个支持读写微软办公软件的功能模块.最底下会说下自己下一步的想法,我先找了PhpSpreadheet这个第三方的扩展包,功能很完善,是一个纯PHP编写的库,看了官方文档,目前支持XLS,XML,XLSX,ODS,SLK,Gnumeric,CSV以及HTML.

软件支持

需要满足以下条件:

  1. PHP5.6及以上版本
  2. PHP扩展php_zip已开启
  3. PHP扩展php_xml已开启
  4. 启用PHP扩展php_gd2(如果没有编译)

安装

进入自己的项目目录,使用composer安装

  1. composer require phpoffice/phpspreadsheet

编写电子表格最简单的一个方法

  1. <?php
  2. require'vendor/autoload.php';
  3. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  4. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  5. $spreadsheet = new Spreadsheet();
  6. $sheet = $spreadsheet->getActiveSheet();
  7. $sheet->setCellValue('A1', 'Hello World !');$writer = new Xlsx($spreadsheet);
  8. $writer->save('hello world.xlsx');

读取文件

可以使用PhpSpreadsheet的IOFactory识别文件类型并加载它,

  1. $inputFileName = './sampleData/example1.xls';
  2. $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);

此方法会在执行加载之前测试当前文件,为了防止恶意文件,比如说当前文件实际上是CSV文件或者包含HTML标记,但是已经给出了.xls的扩展名,它会拒绝用于.xls的加载器,而使用其他的加载器去检测当前文件.

读取文件实例

  1. <?php
  2. use PhpOffice\PhpSpread
PHP    2022-09-09 16:33:14    0    0    0

最简单、最准确的PHP中文转拼音的类

支持获取拼音以及拼音的缩写即首字母

支持utf-8、gbk等编码

能准确匹配6千多个常用汉字

单个汉字,一句话,中英文混合都完美支持

例子utf-8版

  1. include_once 'Pinyin.php';
  2. echo Pinyin::getPinyin("早上好");//获取拼音
  3. echo Pinyin::getShortPinyin("早上好");//获取拼音缩写

例子gbk版

  1. include_once 'Pinyin.php';
  2. echo Pinyin::getPinyin("早上好",'gb2312');//获取拼音
  3. echo Pinyin::getShortPinyin("早上好",'gb2312');//获取拼音缩写

代码地址
https://github.com/sunSK91/Spencer_php_pinyin
————————————————
版权声明:本文为CSDN博主「Spencer0411」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ssk0411/article/details/109068856

Nodejs    2022-08-25 15:26:13    0    0    0

前言

这是由于mysql自带的一段时间无动作会自动关闭的机制

解决

使用闭包可以完美解决问题

  1. var mysql = require('mysql')
  2. var sqlConfig = {
  3. host: 'localhost',
  4. user: 'root',
  5. password: 'pwd',
  6. database: 'dbbase'
  7. }
  8. var conn = function(){
  9. let connection = mysql.createConnection(sqlConfig)
  10. connection.connect()
  11. connection.on('error',err=>{
  12. console.log('Re-connecting lost connection: ');
  13. connection = mysql.createConnection(sqlConfig)
  14. })
  15. return function(){
  16. return connection
  17. }
  18. }
  19. module.exports = conn()

————————————————
版权声明:本文为CSDN博主「apades」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41535611/article/details/100798135

4/12