паук скрапинг соскребая данные со ссылки случайно, почему? - PullRequest
0 голосов
/ 02 декабря 2018

Сначала я взял все ссылки на монеты с веб-сайта и запросил эти ссылки.Но 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}

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Scrapy - это асинхронный фреймворк - несколько запросов выполняются одновременно и ответы анализируются по мере их получения.

Единственный способ надежно контролировать, какие ответы анализируются в первую очередь, - отключить эту функцию, например, с помощьюустановка CONCURRENT_REQUESTS в 1.
Однако это сделает ваш паук менее эффективным, и такой вид контроля порядка разбора редко требуется, поэтому я бы его избегал, если это возможно.

Дополнительные символы новой строки в экспорте CSV в Windows - известная проблема, которая будет исправлена ​​в следующем выпуске Scrapy.

0 голосов
/ 02 декабря 2018

Я думаю, что скрапирование - это посещение страниц многопоточным способом (производитель / потребитель).Это может объяснить непоследовательный аспект вашего результата.
Чтобы проверить эту гипотезу, вы можете изменить конфигурацию для использования одного потока.

Для пустой ссылки, вы уверены, что любое из ваших имени или переменной ссылки содержит \ n?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...