首页 > 解决方案 > scrapy spider 从链接中随机抓取数据,为什么?

问题描述

首先,我从网站上获取了所有的硬币链接并请求这些链接。但是scrapy不会从链接列表中连续请求。在成功请求链接抓取数据之后,但是当保存到csv文件时,每次成功抓取一个项目后都会生成一个空白行。结果屏幕截图 我希望它会从链接列表中连续请求,并且不会产生任何空白行。我该怎么做?

我正在使用 python 3.6 和 scrapy 版本 1.5.1

我的代码:

import scrapy


class MarketSpider(scrapy.Spider):
    name = 'market'
    allowed_domains = ['coinmarketcap.com']
    start_urls = ['http://coinmarketcap.com/']
    def parse(self, response):
        Coin = response.xpath('//*[@class="currency-name-container link-secondary"]/@href').extract()
        for link in Coin:
            absolute_url = response.urljoin(link)
            yield scrapy.Request(absolute_url,callback=self.website_link)
    def website_link(self,response):
        link = response.xpath('//*[@class="list-unstyled details-panel-item--links"]/li[2]/a/@href').extract()
        name = response.xpath('normalize-space(//h1)').extract()
        yield{'Name': name ,'Link': link}

标签: pythonscrapy

解决方案


Scrapy 是一个异步框架 - 多个请求同时执行,并在收到响应时对其进行解析。

可靠地控制首先解析哪些响应的唯一方法是关闭此功能,例如通过将CONCURRENT_REQUESTS设置为 1。
但这会使您的蜘蛛效率降低,并且很少需要这种对解析顺序的控制,所以我会如果可能的话,避免它。

Windows 上 csv 导出中的额外换行符是一个已知问题,将在下一个 scrapy 版本中修复。


推荐阅读