爬虫的本质就是“抓取”第二方网站中有价值的数据,因此,每个网站都会或多或少地采用一些反爬虫技术来防范爬虫。比如前面介绍的通过 User-Agent 请求头验证是否为浏览器、使用 JavaScript 动态加载资源等,这些都是常规的反爬虫手段。
下面针对更强的反爬虫技术提供一些解决方案。
有些网站会使用 IP 地址验证进行反爬虫处理,程序会检查客户端的 IP 地址,如果发现同一个 IP 地址的客户端频繁地请求数据, 该网站就会判断该客户端是爬虫程序。
针对这种情况,我们可以让 Scrapy 不断地随机更换代理服务器的 IP 地址,这样就可以欺骗目标网站了。
为了让 Scrapy 能随机更换代理服务器,可以自定义一个下载中间件,让该下载中间件随机更换代理服务器即可。
Scrapy 随机更换代理服务器只要两步:
打开 Scrapy 项目下的 middlewares.py 文件,在该文件中增加定义如下类:
class RandomProxyMiddleware (object) :
#动态设置代理服务器的IP 地址
def process request (self, request, spider):
# get_random_proxy() 函数随机返回代理服务器的IP 地址和端口
request.meta["proxy"] = get_random_proxy()
#配置自定义的下载中间件
DOWNLOADER MIDDLEWARES = {
'ZhipinSpider.middlewares.RandomProxyMiddleware': 543,
}
有些网站可以通过跟踪 Cooki
文章从易到难,依次介绍几种方法。
并简述其优劣。
iptables较为复杂,也更加灵活
但是初学者,或者对linux不熟悉的同学,不太推荐
因为一个操作不当,就容易把自己关在外面
Linux系统firewalld防火墙的应用实操(禁止屏蔽海外国外IP访问)
该方法推荐
能实现所需的所有功能,操作也比iptables简单
————————————————
版权声明:本文为CSDN博主「小康师兄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kangweijian/article/details/126254845
前言: 先来说说为啥要写这篇文章,之前小编看了下nginx 的访问日志,发现每天有好多国外的IP地址来访问我的网站,并且访问的内容基本上都是恶意的。因此 我决定 禁止国外IP 来访问我的网站
想要实现这个功能有很多方法,下面我就来介绍基于 NGINX的ngx_http_geoip2模块 来禁止国外IP 访问网站
[root@fxkj ~]# yum install libmaxminddb-devel -y
[root@fxkj tmp]# git clone https://github.com/leev/ngx_http_geoip2_module.git
[ro tmp]#
我这里解压到/usr/local 目录下
[root@fxkj tmp]# mv ngx_http_geoip2_module/ /usr/local/
[root@fxkj local]# ll ngx_http_geoip2_module/
total 60
-rw-r--r-- 1 root root 1199 Aug 13 17:20 config
-rw-r--r-- 1 root root 1311 Aug 13 17:20 LICENSE
-rw-r--r-- 1 root root 23525 Aug 13 17:20 ngx_http_geoip2_module.c
-rw-r--r-- 1 root root 21029 Aug 13 17:20 ngx_stream_geoip2_module.c
-rw-r--r-- 1 root root 3640 Aug 13 17:20 README.md
首先说明下环境,我的nginx 版本是 1.16 , 在网上查了下 安装 ngx_http_geoip2 模块至少需要 1.18 版本及以上,因此此次安装我是 升级nginx1.18,添加 ngx_http_geoip2 模块。
下载nginx 1.18 版本
[root
宝塔中使用Laravel程序 .env 配置不生效的解决方法putenv函数被禁
要安装运行Python的容器,那先到https://hub.docker.com/去查找一下,看看有哪些可用的镜像。
恩,最高的版本已经是3.8.0b4了,不过考虑下还是安装3.7.4稳定版把。
用来安装的虚拟机是Ubuntu 18.04服务器版,安装虚拟机就跳过不写了,太简单。
为了方便,使用root用户操作。
在Ubuntu上安装Docker
使用官方脚本,在终端输入
curl -fsSL get.docker.com -o get-docker.sh
瞬间下载安装脚本:
-rw-r--r-- 1 root root 13185 Sep 18 12:30 get-docker.sh
执行一下
root@ubuntu:~# sh get-docker.sh
很快的,安装完了。启动docker服务:
systemctl start docker
systemctl status docker
可以看到,docker服务已经在运行了,设置开机启动用systemctl enable docker。
root@ubuntu:~# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-09-18 12:56:23 UTC; 9h ago
Docs: https://docs.docker.com
Main PID: 30874 (dockerd)
Tasks: 10
CGroup: /system.slice/docker.service
└─30874 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
试运行一下docke
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
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文件夹,输入命令。
./configure --with-stream
make & make install
6、进入/usr/local/nginx/conf文件夹,修改配置文件nginx.conf。
7、进入/usr/local/nginx/sbin文件夹,输入命令,后台启动nginx。
./nginx &
1、创建nginx启动命令脚本。
vi /etc/init.d/nginx
2、在创建的脚本里面输入内容,path修改成nginx的安装路径。
#! /bin/bash
# chkconfig: - 85 15
#PATH修改成nginx的安装地址
PATH=/usr/local/nginx
DESC="nginx daemon"
NAME=nginx
DAEMON=$PATH/sbin/$NAME
CONFIGFILE=$PATH/conf/$NAME.conf
PIDFILE=$PATH/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
$DAEMON -s stop || echo -n "nginx not running"
}
do_rel
这两天需要做一个支持读写微软办公软件的功能模块.最底下会说下自己下一步的想法,我先找了PhpSpreadheet这个第三方的扩展包,功能很完善,是一个纯PHP编写的库,看了官方文档,目前支持XLS,XML,XLSX,ODS,SLK,Gnumeric,CSV以及HTML.
需要满足以下条件:
进入自己的项目目录,使用composer安装
composer require phpoffice/phpspreadsheet
编写电子表格最简单的一个方法
<?php
require'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');$writer = new Xlsx($spreadsheet);
$writer->save('hello world.xlsx');
可以使用PhpSpreadsheet的IOFactory识别文件类型并加载它,
$inputFileName = './sampleData/example1.xls';
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
此方法会在执行加载之前测试当前文件,为了防止恶意文件,比如说当前文件实际上是CSV文件或者包含HTML标记,但是已经给出了.xls的扩展名,它会拒绝用于.xls的加载器,而使用其他的加载器去检测当前文件.
<?php
use PhpOffice\PhpSpread
最简单、最准确的PHP中文转拼音的类
支持获取拼音以及拼音的缩写即首字母
支持utf-8、gbk等编码
能准确匹配6千多个常用汉字
单个汉字,一句话,中英文混合都完美支持
例子utf-8版
include_once 'Pinyin.php';
echo Pinyin::getPinyin("早上好");//获取拼音
echo Pinyin::getShortPinyin("早上好");//获取拼音缩写
例子gbk版
include_once 'Pinyin.php';
echo Pinyin::getPinyin("早上好",'gb2312');//获取拼音
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
这是由于mysql自带的一段时间无动作会自动关闭的机制
使用闭包可以完美解决问题
var mysql = require('mysql')
var sqlConfig = {
host: 'localhost',
user: 'root',
password: 'pwd',
database: 'dbbase'
}
var conn = function(){
let connection = mysql.createConnection(sqlConfig)
connection.connect()
connection.on('error',err=>{
console.log('Re-connecting lost connection: ');
connection = mysql.createConnection(sqlConfig)
})
return function(){
return connection
}
}
module.exports = conn()
————————————————
版权声明:本文为CSDN博主「apades」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41535611/article/details/100798135