Лоскутное пустое CSV / JSON - PullRequest
0 голосов
/ 28 июня 2018

Я начал использовать скрап. Я пишу свой код в соответствии с учебником из документации. Когда я запускаю для вывода JSON или CSV, файл выдан пустым. Когда я тестирую свой селектор в оболочке, я получаю данные. Я выложу свой код:

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "adororomance"
    start_urls = [
            'http://www.adororomances.com.br/arromances.php?cod=01',
            ]

    def parse(self, response):
        for livro in response.xpath('//*[@id="page_livro_coluna"]'):
            yield {
                    'titulo':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[1]/h1/text()').extract_first(),
                    'autor(a)':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[2]/span/a/span/h2/text()').extract_first(),
                    'titulo original':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[3]/text()').extract_first(),
                    'coleção':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[4]/h3/a/text()').extract_first(),
                    'publicação':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[4]/div[1]/span[1]/text()').extract_first(),
                    'ano':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[4]/div[1]/span[2]/text()').extract_first(),
                    'série':
                    livro.xpath(
                        '//*[@id="page_livro_coluna"]/div[4]/div[2]/a/span/text()').extract_first(),
                    'descrição':
                    livro.css(
                        '//*[@id="description"]/text()')
                      .extract_first(),
            }

Тестируя, я обнаружил, что 'descrição' нарушает код, если я удаляю рендеры json. Когда в оболочке я поставил селектор, я получил:

['\r\n\t\t\t\t \r\n\t\t\t\t Ser sequestrada por um sheik árabe nem passou pela cabeça de Diane, ao visitar o deserto do Saara. Porém, foi o que aconteceu. Khasim ben Haran era um homem poderoso e arrogante, cujo único objetivo, ao fazer dela sua prisioneira, era vingar a morte da mãe. No entanto, esse mesmo homem que a aterrorizava, com ameaças cruéis, também a fascinava. E a figura altiva e exótica não saía da mente de Diane nem por um instante... \r\n                \r\n              ']

Еще один вопрос: эта строка разрывается \r\n\t будет отображаться в моем JSON? если да, как я могу от них избавиться?

спасибо

1 Ответ

0 голосов
/ 29 июня 2018

Во-первых, livro.css('//*[@id="description"]/text()').extract_first(), должно быть livro.xpath('//*[@id="description"]/text()').extract_first(),. Использование xpath внутри селектора css вызовет исключение, которое убьет процесс очистки, и это, вероятно, причина, по которой вы ничего не получаете на выходе.

Во-вторых, разрывы строк, такие как \r\n\t, будут сохранены в вашем файле json и будут отображаться или не основываться на программном обеспечении, которое вы используете для проверки файла json. Если вы хотите удалить, то вы можете использовать функцию strip():

livro.xpath('//*[@id="description"]/text()').extract_first().strip()

Обратите внимание, что если xpath не найдет никакой информации, он вернет None и strip() не удастся, в этом случае вам придется добавить дополнительную проверку, чтобы убедиться, что значение не равно None

...