我有一个使用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
处设置断点,我会发现item
是None
。此外,如果我运行没有断点的代码,我没有得到预期的结果,显示我item
是None
。
image_link = self.get_image_link(response)
只是在网站上找到图片的网址。
如果不在调试模式下运行代码,可能会出现什么问题以及如何获得预期结果?
答案 0 :(得分:0)
由于pennyliangliping刚评论并未在回答中发表评论,我将此处的评论作为答案,以帮助其他有类似问题的人:
首先
response.xpath("//*[@id='theid1']").extract_first()
即使找不到元素也不会引发异常,它只返回None,所以//*[@id='theid2']
永远不会运行。由于start_urls的响应顺序取决于下载时间,我怀疑当你添加断点时,1.html首先返回,item不会是None,否则得到None,请尝试替换try除了if else并看看。