как я могу использовать загрузчик предметов scrapy в моем amazon spider, чтобы я мог удалить все новые строковые символы или лишние пробелы из вывода - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь очистить Amazon с помощью scrapy, все работает нормально, за исключением поля автора, для которого я получаю результат, например,

{'author': ['Somasundaram Chenrayan',
            'B. Latha B. லதா',
            'Mugil முகில்',
            'ஜே. சி. குமரப்பா',
            ' and ',
            'மீ. விநாயகம்',
            '\n'
            '    \n'
            '        \n'
            '        \n'
            '            Napoleon Hill\n'
            '        \n'
            '    \n',
            '\n'
            '    \n'
            '        \n'
            '        \n'
            '            Joseph Murphy\n'
            '        \n'
            '    \n',
            'டாக்டர் அம்பேத்கர்',
            'MALINI SUNDAR',
            '\n'
            '    \n'
            '        \n'
            '        \n'
            '            வாணி அரவிந்த்\n'
            '        \n'
            '    \n',
            'sankareswari சங்கரேஸ்வரி',
            '\n'
            '    \n'
            '        \n'
            '        \n'
            '            George S Clason\n'
            '        \n'
            '    \n',
            'சசிகுமார்  தங்கவேல் ',
            'ஆர். ஷண்முகசுந்தரம்',]

после проверки некоторых ответов на stackexchange, я написал ниже упомянутый код в моем модуле элементов, чтобы я мог удалить все лишние пробелы из поля автора, но на самом деле он не работает

import scrapy
from scrapy.loader.processors import MapCompose
from w3lib.html import remove_tags

def normalize_space(value):
    return " ".join(value.split())

class Product(scrapy.Item):
    author = scrapy.Field(
        input_processor=MapCompose(remove_tags, normalize_space),
    )
    book_name = scrapy.Field()
    price = scrapy.Field()
    image_links = scrapy.Field()

А вот мой код паука:

import scrapy
from ..items import Product

class AmazonSpider(scrapy.Spider):
    # page_number = 1

    name = "amazon"
    start_urls = [
        "https://www.amazon.in/s?bbn=976389031&rh=n%3A976389031%2Cp_n_publication_date%3A2684819031&dc&fst=as%3Aoff&qid=1588845227&rnid=2684818031&ref=lp_976389031_nr_p_n_publication_date_0"
    ]

    def parse(self, response):

        items = Product()

        book_name = response.css(".a-color-base.a-text-normal").css("::text").extract()
        price = response.css(".a-price span::text").extract()
        author = response.css(".a-color-secondary .a-size-base+ .a-size-base").css("::text").extract()
        image_links = response.css("div img::attr(src)").extract()

        items["book_name"] = book_name
        items["price"] = price
        items["author"] = author
        items["image_links"] = image_links
        yield items

scince i Я новичок в scrapy Я не знаю, как решить эту проблему. Я буду очень признателен, если вы скажете мне, что не так с этим кодом или как я могу решить эту проблему с помощью re, я также пробовал с re, но он дает только синтаксическую ошибку.

1 Ответ

1 голос
/ 07 мая 2020

Я думаю, вы можете смешивать элементы и загрузчики элементов . Вы не используете загрузчики элементов, поэтому определение input_processor бесполезно.

Внимательно ознакомьтесь со вторым фрагментом кода в документации , где загрузчик элементов (в отличие от элемента ) используется для извлечения данных и применения определенного процессора ввода.

...