废话:我有一台centos7的服务器,吃灰了很久,本来用来部署博客网站的,但是也完全利用不起来,浪费我的钱啊!接下来我要让它成为一个高匿的爬虫代理服务器。

场景:

为什么要搭建这个东西,而不直接使用爬虫代理服务商提供的代理?假设根据爬取一个网站的经验发现这个网站在爬取频率不高的情况下不会封掉IP,但是我要求代理的质量要很高,不要像一些爬虫代理服务商提供的代理一样几乎没有多少请求是通的,虽然会使用重试机制,但完全是在浪费时间(其实我只想让它不要封我正在使用的IP)。这个时候搭建一个高匿代理服务器去爬取是多么的完美。

squid简介

Squid是一个功能齐全的HTTP/1.0代理,它几乎(但不完全是——我们正在实现!)一个功能齐全的HTTP/1.1代理。Squid提供了一个丰富的访问控制、授权和日志记录环境来开发web代理和内容服务应用程序。Squid提供了一组丰富的流量优化选项,其中大多数默认情况下都是启用的,以实现更简单的安装和更高的性能。

详情查看官方网址:http://www.squid-cache.org/Doc/config/acl/

服务器安装配置步骤:

1、使用如下命令安装squid以及用来生成密码文件的httpd-tools

yum install squid -y
yum install httpd-tools -y

2、生成密码文件
在/etc目录下创建squid3目录,并使用htpasswd 生成用户名密码的配置文件

mkdir /etc/squid3/
htpasswd -cd /etc/squid3/passwords 用户名
#提示输入密码,比如输入123

3、测试密码文件

/usr/lib64/squid/basic_ncsa_auth /etc/squid3/passwords
#输入用户名 密码
xiaoli  123
#提示ok说明成功
ok
#ctrl+c退出

4、配置squid.conf文件

vi /etc/squid/squid.conf
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid3/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated


#访问端口号设置
#http_port 3128 这样写会同时监听ipv6和ipv4的端口,推荐适应下面的配置方法。
http_port 0.0.0.0:9798

# 添加下面这两句可以使代理高匿
via off
forwarded_for delete

注:squid的日志位于/var/log/squid/目录下。高匿的原理就是将路由关掉,将forwarded_for 删除。

启动
#启动start(停止stop) 
systemctl start squid.service
#配置开机自启动
systemctl enable squid.service
Scrapy爬虫客户端连接

在minddlewares.py中添加下面代码

from w3lib.http import basic_auth_header
class CustomOneProxyMiddleware(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = "https://198.168.1.3:9798"
        request.headers['Proxy-Authorization'] = basic_auth_header(
            'lih', '123')

"https://198.168.1.3:9798"为服务器的ip及squid配置的访问端口,‘lih’, '123’分别为服务器刚刚设置的squid的用户名密码

requests客户端连接
import requests

proxies = {
    "http": "http://user:pass@198.168.1.3:9798",
    "https": "https://user:pass@198.168.1.3:9798"
}

requests.get("http://example.org", proxies=proxies)

user、pass为squid配置的用户名密码。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐