在scrapy中正确使用Proxy是什么意思?

时间:2017-02-11 17:14:40

标签: python web-scraping scrapy web-crawler

我的代码是

import scrapy
from scrapy import log
from scrapy.exceptions import IgnoreRequest

class BlogSpider(scrapy.Spider):
    name = 'blogspider'
    start_urls = ['https://www.*****']

    custom_settings = {
        'DOWNLOAD_DELAY': '5',
        'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
    	'scrapy_proxies.RandomProxy': 100,
    	'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
    }

    PROXY_LIST = '/path/to/proxy/list.txt'

    def parse(self, response):

    	bannCheck = response.css('.lead ::text').extract_first();

        for title in response.css('.seo-directory-doctor-link'):
            yield {'title': title.css('a ::attr(href)').extract_first()}

        next_page = response.css('li.seo-directory-page > a[rel=next] ::attr(href)').extract_first()
        if next_page:
            yield scrapy.Request(response.urljoin(next_page), callback=self.parse)

这是我尝试将ProxyCustomSettings与5的下载延迟一起使用的方式,但它不起作用。

我不知道Settings.py的位置以及如何配置它? 也许有人可以给我一个这个代码的例子?

希望得到您的支持

由于

编辑:现在我知道我必须在保存项目的文件夹中创建settings.py.

我尝试了示例https://github.com/aivarsk/scrapy-proxies 但它不起作用他不使用代理列表。

怎么了?

1 个答案:

答案 0 :(得分:1)

我很好地与代理一起工作,以这种方式实现它。 我使用了这个scrapy-proxies,这是我的代码组织:

randomproxy.py放在settings.py旁边。

设置

settings.py 文件的内部放置了这个:

# Retry many times since proxies often fail
RETRY_TIMES = 5
# Retry on most error codes since proxies fail for different reasons
RETRY_HTTP_CODES = [500, 503, 504, 400, 403, 404, 408]

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90,
    # Fix path to this module
    'botcrawler.randomproxy.RandomProxy': 600,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}

PROXY_LIST = '/home/user/botcrawler/botcrawler/proxy/list.txt'

蜘蛛

然后在您的蜘蛛代码中(在解析函数中),通过检查页面上的内容来检查代理是否正常工作:

if not response.xpath('//title'):
        yield Request(url=response.url, dont_filter=True)

希望有所帮助。问候。