Страница процесса, которая возвращает код HTTP 500 с Python / Scrapy - PullRequest
0 голосов
/ 10 апреля 2020

У меня проблема с доступом к некоторым веб-сайтам, которые возвращают код HTTP 500 вместе с правильно отформатированной страницей HTML.

Итак, я могу загрузить страницу с помощью Chorme / Firefox, но не могу этого сделать with Scrapy.

Журналы Scrapy:

2020-04-10 15:57:16 [scrapy.core.engine] INFO: Spider opened
2020-04-10 15:57:16 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-04-10 15:57:16 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2020-04-10 15:57:18 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.industrialmotors.com/products/toshiba-motors/where/p/1.html> (failed 1 times): 500 Internal Server Error
2020-04-10 15:57:19 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.industrialmotors.com/products/toshiba-motors/where/p/1.html> (failed 2 times): 500 Internal Server Error
2020-04-10 15:57:20 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying <GET https://www.industrialmotors.com/products/toshiba-motors/where/p/1.html> (failed 3 times): 500 Internal Server Error
2020-04-10 15:57:20 [scrapy.core.engine] DEBUG: Crawled (500) <GET https://www.industrialmotors.com/products/toshiba-motors/where/p/1.html> (referer: None)
2020-04-10 15:57:20 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <500 https://www.industrialmotors.com/products/toshiba-motors/where/p/1.html>: HTTP status code is not handled or not allowed

См. снимок экрана ниже, который показывает, что веб-сервер возвращает HTTP 500 вместе с веб-страницей, которая правильно отображается в Firefox.

50

Тестовая страница https://www.industrialmotors.com/products/toshiba-motors/where/p/1.html

Спасибо, дайте мне знать, если мне нужно добавить какие-либо подробности.

Ответы [ 2 ]

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

Если вы хотите обработать это только на одном пауке:

class MySpider(Spider):
    ...
    handle_httpstatus_list = [500]

Если вы хотите обработать это только на одном запросе:

...
def my_parse_method(self, response):
    ...
    yield Request(url='http://example.com', meta={'handle_httpstatus_list': [500]})
1 голос
/ 10 апреля 2020

По умолчанию scrapy игнорирует код состояния 500 и не обрабатывает свой ответ. но вы можете переопределить этот параметр, указав его в своем классе пауков.

Примерно так:

class YourSpider:
    custom_settings = {
        'HTTPERROR_ALLOWED_CODES': [500]
    }

Подробнее здесь

Надеюсь, это так помогает

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