顺序运行刮擦蜘蛛时无法刮擦

时间:2018-07-12 15:29:54

标签: python web-scraping scrapy scrapy-spider

我是scrapy的新手,我想尝试和举例说明,我想按顺序运行scrapy spider,但是当我使用文档中的代码时 (https://doc.scrapy.org/en/latest/topics/practices.html#run-scrapy-from-a-script)在使用搜寻器过程时不起作用。蜘蛛程序可以立即打开和关闭,而不会从网站上抓取数据。但是,当我单独使用“草率爬网”运行蜘蛛时,它会起作用。我不明白为什么蜘蛛在我单独调用它时会刮擦数据,而在尝试顺序运行它时却不刮擦数据。如果有人可以帮助我,那就太好了。 这是我正在使用的代码:

class APASpider(scrapy.Spider):
name = 'APA_test'
allowed_domains = ['some_domain.com']
start_urls = ['startin_url']



def start_requests(self):
    for url in self.start_urls:
        yield SplashRequest(url, self.parse,
        endpoint='execute',
        cache_args=['lua_source'],
        args={'lua_source': script,'timeout': 3600},
        headers={'X-My-Header': 'value'},
        )

def parse(self, response):

    for href in response.xpath('//a[@class="product-link"]/@href').extract():            
        yield SplashRequest(response.urljoin(href),self.parse_produits,
        endpoint='execute',
        cache_args=['lua_source'],
        args={'lua_source': script,'timeout': 3600},
        headers={'X-My-Header': 'value'},
        )


    for pages in response.xpath('//*[@id="loadmore"]/@href'):
        yield SplashRequest(response.urljoin(pages.extract()),self.parse,
        endpoint='execute',
        cache_args=['lua_source'],
        args={'lua_source': script,'timeout': 3600},
        headers={'X-My-Header': 'value'},
        )



def parse_produits(self,response):

    Nom = response.xpath("//h1/text()").extract()
    Poids = response.xpath('//p[@class="description"]/text()').extract()
    item_APA = APAitem()
    item_APA["Titre"] = Nom
    item_APA["Poids"] = Poids
    yield item_APA

configure_logging()
runner = CrawlerRunner()


@defer.inlineCallbacks
def crawl():
yield runner.crawl(APASpider)
reactor.stop()

crawl()
reactor.run() # the script will block here until the last crawl call is finished

谢谢

1 个答案:

答案 0 :(得分:0)

考虑到问题中没有提供日志消息,很难确切说明问题所在。

话虽如此,我仍然会尝试回答,因为前一段时间我也遇到过同样的问题。

关于Splash脚本中的local last_response = entries[#entries].response存在scrapy_splash的this问题。我假设您像以前一样在脚本中使用了它。

我使用的解决方法是在进入最后一个条目之前检查历史记录是否不为空。(由github用户kmike建议)。