Scrapy请求回调不触发

窗户制造商

我正在使用scrapy 0.24从网站上抓取数据。但是,我无法从我的回调方法发出任何请求parse_summary

class ExampleSpider(scrapy.Spider):
    name = "tfrrs"
    allowed_domains = ["example.org"]
    start_urls = (
        'http://www.example.org/results_search.html?page=0&sport=track&title=1&go=1',
    )

    def __init__(self, *args, **kwargs):
        super(TfrrsSpider, self).__init__(*args, **kwargs)
        self.start_urls = ['http://www.example.org/results_search.html?page=0&sport=track'&title=1&go=1',]
            pass

    # works without issue
    def parse(self, response):
        races = response.xpath("//table[@width='100%']").xpath(".//a[starts-with(@href, 'http://www.tfrrs.org/results/')]/@href").extract()
        callback = self.parse_trackfieldsummary
        for race in races:
            yield scrapy.Request(race, callback=self.parse_summary)
        pass

    # works without issue
    def parse_summary(self, response):
        baseurl = 'http://www.example.org/results/'
        results = response.xpath("//div[@class='data']").xpath('.//a[@style="margin-left: 20px;"]/@href').extract()
        for result in results:
            print(baseurl+result)  # shows that url is correct everytime
            yield scrapy.Request(baseurl+result, callback=self.parse_compiled)

    # is never fired or shown in terminal
    def parse_compiled(self, response): 
        print('test')
        results = response.xpath("//table[@style='width: 935px;']")
        print(results)

当我故意使请求parse_summary失败(由于域错误等)时,我可以在提示符下看到该错误,但是当我使用正确的url时,就好像我什至没有调用它。我还测试所请求的网址parse_summaryparse方法,在那里他们正常工作。是什么导致它们没有在parse_summary方法中被触发但在方法中被成功触发parse method提前谢谢你的帮助。

编辑

在对我进行一些更改之后Spider,我仍然得到相同的结果。但是,如果我使用一个全新的项目,它将起作用。所以我想这与我的项目设置有关。

这是我的项目设置(项目raceretrieval名称在哪里):

BOT_NAME = 'raceretrieval'
DOWNLOAD_DELAY= 1
CONCURRENT_REQUESTS = 100
SPIDER_MODULES = ['raceretrieval.spiders']
NEWSPIDER_MODULE = 'raceretrieval.spiders'
ITEM_PIPELINES = {
        'raceretrieval.pipelines.RaceValidationPipeline':1,
        'raceretrieval.pipelines.RaceDistanceValidationPipeline':2,
#        'raceretrieval.pipelines.RaceUploadPipeline':9999
    }

如果我注释掉 DOWNLOAD_DELAY= 1CONCURRENT_REQUESTS = 100,蜘蛛按预期工作。为什么会这样呢?我不明白他们会如何影响这一点。

阿伯纳

我更正了一些拼写错误,并正确设置了允许的域,并且parse_summary似乎工作正常。提取Urls,并在终端中正确显示parse_compile结果。

输出的行如下:

2014-12-29 12:19:05+0100 [example] DEBUG: Crawled (200) <GET
http://www.tfrrs.org/results/36288_f.html> (referer:
http://www.tfrrs.org/results/36288.html) <200
http://www.tfrrs.org/results/36288_f.html> 
[<Selector xpath="//table[@style='width: 935px;']" data=u'<table width="0" border="0" cellspacing='>, <Selector xpath="//table[@style='width: 935px;']" data=u'<table width="0" border="0" cellspacing='> .....

这是更正的代码:

class ExampleSpider(scrapy.Spider):
    name = "example"
    allowed_domains = ["tfrrs.org"]
    start_urls = (
    'http://www.tfrrs.org/results_search.html?page=0&sport=track&title=1&go=1',
    )

def __init__(self, *args, **kwargs):
    super(ExampleSpider, self).__init__(*args, **kwargs)
    self.start_urls = ['http://www.tfrrs.org/results_search.html?page=0&sport=track&title=1&go=1',]


# works without issue
def parse(self, response):
    races = response.xpath("//table[@width='100%']").xpath(".//a[starts-with(@href, 'http://www.tfrrs.org/results/')]/@href").extract()
    #callback = self.parse_trackfieldsummary
    for race in races:
        yield scrapy.Request(race, callback=self.parse_summary)
    pass

# works without issue
def parse_summary(self, response):
    baseurl = 'http://www.tfrrs.org/results/'
    results = response.xpath("//div[@class='data']").xpath('.//a[@style="margin-left: 20px;"]/@href').extract()
    for result in results:
        #print(baseurl+result)  # shows that url is correct everytime
        yield scrapy.Request(baseurl+result, callback=self.parse_compiled)

# is never fired or shown in terminal
def parse_compiled(self, response): 
    print(response)
    results = response.xpath("//table[@style='width: 935px;']")
    print(results)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

跟随链接时,Python scrapy 请求不执行回调

来自分类Dev

重定向请求的回调Scrapy

来自分类Dev

scrapy:信号调用产生的回调请求

来自分类Dev

未执行回调的 Scrapy 请求

来自分类Dev

iPhone不触发Ajax错误回调

来自分类Dev

jQuery Ajax成功回调不触发也不返回错误

来自分类Dev

scrapy:了解项目和请求在回调之间如何工作

来自分类Dev

jQuery AJAX请求获得响应,但未触发任何回调

来自分类Dev

Node.JS请求模块回调未触发

来自分类Dev

jQuery AJAX请求获得响应,但未触发任何回调

来自分类Dev

不触发元素集的SnapSVG动画回调

来自分类Dev

回调不返回

来自分类Dev

了解Scrapy中的回调

来自分类Dev

PeekMessage触发WndProc回调

来自分类Dev

Firebase回调不会触发

来自分类Dev

WCF回调不会触发

来自分类Dev

多次触发GTM回调

来自分类Dev

jQuery.ajax-每个ajax请求是否可能触发两个成功回调?

来自分类Dev

成功的预检请求后,如何使angular2正确触发正确的回调

来自分类Dev

带有$ http请求的AngularJS单元测试从不触发.then()回调

来自分类Dev

scrapy_splash.SplashRequest在scrapyd计划时不执行回调函数

来自分类Dev

使用ADODB运行多个异步查询-回调不总是触发

来自分类Dev

RequireJS + Angular:未定义的应用程序。回调不触发

来自分类Dev

如何在SailsJS中更新记录而不触发模型生命周期回调

来自分类Dev

React onClick在加载时触发多次,并且在组件props中不包含回调函数

来自分类Dev

后退按钮回调函数在特定情况下失败或不触发

来自分类Dev

道具回调不返回?

来自分类Dev

setState不执行回调

来自分类Dev

Scrapy Selenium无法进行Request()回调

Related 相关文章

热门标签

归档