如何用Socks5代理草率请求?

时间:2019-11-28 09:08:31

标签: python python-3.x web-scraping scrapy

问题:

如何用socks5代理scrapy请求?

  

我知道我可以使用polipoconvert Socks Proxy To Http Proxy

但是:

我想设置中间件或对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变量分配什么?

4 个答案:

答案 0 :(得分:7)

有可能。

Socks5的HTTP代理

安装python-proxy

$ pip3 install pproxy

运行

$ pproxy -l http://:8181 -r socks5://127.0.0.1:9150 -vv

使用HTTP代理进行抓取

创建中间件(middlewares.py

class ProxyMiddleware(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = "http://127.0.0.1:8181"

将其分配给DOWNLOADER_MIDDLEWARESsettings.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文件中使其可用,并查看其是否有效。