问题:
如何用socks5
代理scrapy
请求?
但是:
我想设置中间件或对scrapy.Request
进行一些更改
import scrapy
class BaseSpider(scrapy.Spider):
"""a base class that implements major functionality for crawling application"""
start_urls = ('https://google.com')
def start_requests(self):
proxies = {
'http': 'socks5://127.0.0.1:1080',
'https': 'socks5://127.0.0.1:1080'
}
for url in self.start_urls:
yield scrapy.Request(
url=url,
callback=self.parse,
meta={'proxy': proxies} # proxy should be string not dict
)
def parse(self, response):
# do ...
pass
我应该为proxies
变量分配什么?
答案 0 :(得分:7)
有可能。
$ pip3 install pproxy
运行
$ pproxy -l http://:8181 -r socks5://127.0.0.1:9150 -vv
创建中间件(middlewares.py
)
class ProxyMiddleware(object):
def process_request(self, request, spider):
request.meta['proxy'] = "http://127.0.0.1:8181"
将其分配给DOWNLOADER_MIDDLEWARES
(settings.py
)
DOWNLOADER_MIDDLEWARES = {
'PROJECT_NAME_HERE.middlewares.ProxyMiddleware': 350
}
答案 1 :(得分:2)
检查一下是否有帮助,https://github.com/gregoriomomm/docker-multsocks..。
它提供了一种方法(与Docker一样具有多平台性),可连接到HTTP PROXY标准协议以使用高级路由配置来访问SOCKS5服务器,并非所有软件都免费提供(例如Windows中)可以在本地配置简单的HTTP代理(请参阅底部的配置)。
在这种情况下,它也可以用于许多应用程序,例如一些旧的Java实现,这些实现可以连接到SOCKS,但无法正确传递用户名和密码来验证SOCKS连接,因此它可以充当SOCKS,身份验证链接到已验证。
它基于常见的linux命令,并且可以通过在Windows子系统Linux(WSL)的外壳上使用相同的命令在Windows 10中复制。
在Ubuntu中,您可以直接安装
sudo apt install tsocks nmap
# Once you have a tsocks installed and configured
echo "Starting http proxy!!!"
tsocks ncat -l --proxy-type http localhost 3128 &
/etc/tsocks.conf文件的示例(将变量替换为“ v”):
local = 9.0.0.0/255.0.0.0
local = 129.39.186.192/255.255.255.192
path {
reaches = 10.0.0.0/255.0.0.0
reaches = 158.98.181.232/255.255.255.248
reaches = 192.168.0.0/255.255.0.0
server = vSOCKS_HOST
server_port = vSOCKS_PORT
server_type = 5
default_user = vSOCKS_USERNAME
default_pass = vSOCKS_PASSWORD
fallback = yes
}
如果要尝试使用docker版本,只需更改path / tsocks.conf 到您的版本,它将加载HTTP SOCKS和SOCKS5未经身份验证的路由到您的SOCKS5最终目标服务器(还有其他选项)
docker run -v path/tsocks.conf:/etc/tsocks.conf -p 3128:3128 -p 1080:1080 gregoriomomm/multsocks:latest
在https://github.com/gregoriomomm/tsocks中有一个版本的tsocks(http://tsocks.sourceforge.net/)启用了tsocks(透明的SOCKS5生成库),并进行了较小的调整,以与Alpine:3.11一起工作和编译,并且包括来自Ubuntu的相同后备选项。
答案 2 :(得分:1)
当前不可能。有a feature request for it。
答案 3 :(得分:0)
中间件可能像:-
class ProxyMiddleware(object):
def process_request(self, request):
request.meta['proxy'] = "socks5://127.0.0.1:1080"
在您的settings.py文件中使其可用,并查看其是否有效。