如何使用 Socks5 代理抓取请求?

Moh*_*umi 7 python scrapy web-scraping python-3.x

题:

如何代理scrapy请求socks5

我知道我可以polipo用来Socks代理转换为Http代理

但:

我想设置一个中间件或一些更改 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
Run Code Online (Sandbox Code Playgroud)

我应该分配给proxies变量什么?

小智 9

有可能的。

Socks5 的 HTTP 代理

安装python-proxy

$ pip3 install pproxy
Run Code Online (Sandbox Code Playgroud)

$ pproxy -l http://:8181 -r socks5://127.0.0.1:9150 -vv
Run Code Online (Sandbox Code Playgroud)

使用 HTTP 代理进行 Scrapy

创建中间件 ( middlewares.py)

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

将其分配给DOWNLOADER_MIDDLEWARES( settings.py)

DOWNLOADER_MIDDLEWARES = {
    'PROJECT_NAME_HERE.middlewares.ProxyMiddleware': 350
}
Run Code Online (Sandbox Code Playgroud)

  • 这是我发现的替代“privoxy”的最简单方法。对于更改,第一次尝试就可以正常工作! (2认同)

Gal*_*cio 3

目前还不可能。有一个针对它的功能请求