Scrapy:在带有断点的调试模式下正常工作,没有断点就没有正确

时间:2018-05-07 05:01:45

标签: python-3.x scrapy

我有一个使用Scrapy的Python3代码。 当我在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处设置断点,我会发现itemNone。此外,如果我运行没有断点的代码,我没有得到预期的结果,显示我itemNoneimage_link = self.get_image_link(response)只是在网站上找到图片的网址。

如果不在调试模式下运行代码,可能会出现什么问题以及如何获得预期结果?

1 个答案:

答案 0 :(得分:0)

由于pennyliangliping刚评论并未在回答中发表评论,我将此处的评论作为答案,以帮助其他有类似问题的人:

首先

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

即使找不到元素也不会引发异常,它只返回None,所以//*[@id='theid2']永远不会运行。由于start_urls的响应顺序取决于下载时间,我怀疑当你添加断点时,1.html首先返回,item不会是None,否则得到None,请尝试替换try除了if else并看看。