Scrapy: как использовать прокси для каждого запроса в предмете - PullRequest
2 голосов
/ 11 апреля 2019

Я использую DOWNLOADER_MIDDLEWARES для ротации прокси с scrapy.Spider, и я хотел бы получить элемент, то есть item['proxy_used'], для прокси, используемого для каждого запроса.

Полагаю, что возможно получить Прокси через "Сборщик статистики", но я новичок в Python и Scrapy и до сих пор не смог найти решение.

спасибо заранее за вашу помощь

import scrapy
from tutorial.items import QuotesItem

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    allowed_domains = ["quotes.toscrape.com"]
    start_urls = [
        'http://quotes.toscrape.com/',
    ]

    def parse_quotes(self, response):
        for sel in response.css('div.quote'):
            item = QuotesItem()
            item['text'] = sel.css('span.text::text').get()
            item['author'] = sel.css('small.author::text').get()
            item['tags'] = sel.css('div.tags a.tag::text').getall()
            item['quotelink'] = sel.css('small.author ~ a[href*="goodreads.com"]::attr(href)').get()

            item['proxy_used'] = ??? <-- PROXY USED BY REQUEST - "HOW TO???"
            yield item 

     # follow pagination links @shortcut

        for a in response.css('li.next a'):
            yield response.follow(a, callback = self.parse_quotes)

1 Ответ

1 голос
/ 11 апреля 2019

Вы можете использовать объект ответа для доступа к используемому прокси.Как показано ниже

response.meta.get("proxy")

Обновлен и в вашем коде.

import scrapy
from tutorial.items import QuotesItem

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    allowed_domains = ["quotes.toscrape.com"]
    start_urls = [
        'http://quotes.toscrape.com/',
    ]

    def parse_quotes(self, response):
        for sel in response.css('div.quote'):
            item = QuotesItem()
            item['text'] = sel.css('span.text::text').get()
            item['author'] = sel.css('small.author::text').get()
            item['tags'] = sel.css('div.tags a.tag::text').getall()
            item['quotelink'] = sel.css('small.author ~ a[href*="goodreads.com"]::attr(href)').get()

            item['proxy_used'] = response.meta.get("proxy")
            yield item 

     # follow pagination links @shortcut

        for a in response.css('li.next a'):
            yield response.follow(a, callback = self.parse_quotes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...