Scrapy: работает правильно в режиме отладки с точкой останова, а не без точки останова - PullRequest
0 голосов
/ 07 мая 2018

У меня есть код Python3, который использует Scrapy. Когда я ставлю точку останова внутри def parse(self, response):, тогда код работает как положено. Но если я запускаю его без точки останова в обычном режиме, он не делает то, что должен делать. Есть ли какие-либо проблемы с , о которых следует знать?

Вот часть моего кода:

import scrapy
...
class MySpider(scrapy.Spider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = [
        'http://www.example.com/1.html',
        'http://www.example.com/2.html',
    ]

    def parse(self, response):
        ...
        image_link = self.get_image_link(response)
        try:
            item = response.xpath("//*[@id='theid1']").extract_first()
        except:
            item = response.xpath("//*[@id='theid2']").extract_first()
        ...
        tmp = 1

Когда я ставлю точку останова на image_link = self.get_image_link(response), тогда, когда я запускаю код шаг за шагом, я вижу, что item имеет некоторые значения. Но если я поставлю точку останова на tmp=1, я вижу, что item равно None. Также, если я запускаю код без точки останова, я не получаю ожидаемый результат, который показывает, что item равно None. image_link = self.get_image_link(response) просто находит URL изображения на веб-сайте.

В чем может быть проблема и как получить ожидаемый результат без запуска кода в режиме отладки?

1 Ответ

0 голосов
/ 19 мая 2018

Поскольку pennyliangliping только что прокомментировал и не поместил свой комментарий в ответ, я добавлю его комментарий в качестве ответа, чтобы он помог другим людям, у которых есть похожая проблема:

прежде всего

response.xpath("//*[@id='theid1']").extract_first() 

не вызовет исключения, даже если элемент не найден, он просто вернет None, поэтому //*[@id='theid2'] никогда не запускается. Так как порядок ответа start_urls зависит от времени загрузки, я подозреваю, что когда вы добавляете точку останова, сначала 1.html, элемент не будет None, в противном случае получите None, попробуйте заменить try, кроме как if else, и посмотрите.

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