刮擦蜘蛛刮擦数据从链接随机为什么?

2024-04-26 22:41:49 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我从网站上抓取了所有的硬币链接,并要求这些链接。 但是scrapy没有从链接中连续请求列表.after请求链接成功的刮取数据,但当保存到csv文件时,每次成功刮取一个项目后都会产生一个空行。Result Screenshot 我期待着它将要求从链接列表串行,它不会使任何空白排。怎么排我能做到吗?你知道吗

我使用的是python3.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}

Tags: nameselfcom列表链接responsedeflink
2条回答

Scrapy是一个异步框架,多个请求同时执行,响应在接收时被解析。你知道吗

可靠地控制首先解析哪些响应的唯一方法是关闭此功能,例如将CONCURRENT_REQUESTS设置为1。
不过,这会降低spider的效率,而且这种解析顺序的控制很少是必要的,所以如果可能的话,我会避免这种情况。你知道吗

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

我认为scrapy是以多线程(生产者/消费者)的方式访问页面的。这可以解释结果的非连续性。
为了验证这个假设,您可以将配置更改为使用单个线程。你知道吗

对于空白链接,您确定您的名称或链接变量是否包含\n?你知道吗

相关问题 更多 >