Scrapy: мета ['прокси'] или мета ['прокси']? - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в scrapy.Я использую собственный прокси в scrapy spider ,, но я нахожу, если я использую request.meta ["прокси"], spider будет работать хорошо, вместо использования request.meta ['proxy']. Это отличается от этого ответа

Это часть моих сообщений отладки, если я использую request.meta ['proxy'].

2018-09-07 15:48:45 [scrapy.core.engine] INFO: Spider opened
2018-09-07 15:48:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-09-07 15:48:45 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2018-09-07 15:49:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-09-07 15:50:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-09-07 15:51:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-09-07 15:51:45 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.example.com/robots.txt> (failed 1 times): User timeout caused connection failure: Getting https://www.example.com/robots.txt took longer than 180.0 seconds..
2018-09-07 15:52:45 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

Моя версия скрапа

Scrapy       : 1.5.1
lxml         : 3.7.2.0
libxml2      : 2.9.4
cssselect    : 1.0.3
parsel       : 1.5.0
w3lib        : 1.19.0
Twisted      : 18.7.0
Python       : 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
pyOpenSSL    : 18.0.0 (OpenSSL 1.1.0h  27 Mar 2018)
cryptography : 2.3
Platform     : Windows-10-10.0.17134-SP0

Обновление: я решил предыдущую проблему. Но я не знаю, почему мой мета ['proxy'] неправильный, и мой бесплатный прокси использует requests.get('https://www.example.com/', proxies={"http": "http://{}".format(proxy)}), он работает хорошо и возвращает <Response [200]>, так что не так с моими кодами?

Мои настройки:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':135,
     'ip_proxy.middlewares.CustomProxyMiddleware':125
}

Мой паук:

 def start_requests(self):
    yield scrapy.Request(url="https://www.example.com",callback=self.parse_first)

My CustomProxyMiddleware

class CustomProxyMiddleware(object):

  def __init__(self, settings):
      pass
  def process_request(self, request, spider):
      request.meta['proxy'] = "https://60.169.1.145:808"

  @classmethod
  def from_crawler(cls, crawler):
      return cls(crawler.settings)

1 Ответ

0 голосов
/ 07 сентября 2018

Чтобы отправить запрос через прокси-сервер, вы должны использовать meta['proxy']. Похоже, у вас есть проблемы с прокси-сервером, поэтому он не может очистить страницу, что приводит к ошибке времени ожидания. Это также может быть связано с тем, что вы используете бесплатный прокси.

Причина, по которой ваш паук работает с meta['proxies'], заключается в том, что установка этого элемента ни на что не влияет и запросы отправляются с вашего локального IP-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...