Невозможно использовать экспорт каналов в Scrapy - PullRequest
0 голосов
/ 04 августа 2020

Я установил FEEDS = {'format': 'jsonlines'} в settings.py , и каждый раз, когда я запускаю spider, появляется ошибка:

File "C:\Users\jonh\anaconda3\lib\site-packages\scrapy\utils\conf.py", line 115, in feed_complete_default_values_from_settings
    out = feed.copy()
AttributeError: 'str' object has no attribute 'copy'

Если я удалю FEEDS = {'format': 'jsonlines'} , паук сможет работать правильно. Как исправить эту проблему?

ОБНОВЛЕНИЕ: Это код, который я использую для запуска паука:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

process=CrawlerProcess(get_project_settings())
process.crawl('amazon')
process.start()

это паук:

import scrapy
from scrapy.loader import ItemLoader

class amazonItem(scrapy.Item):
    cover=scrapy.Field()
    title=scrapy.Field()
    author=scrapy.Field()
    price=scrapy.Field()
    publisher=scrapy.Field()
    ASIN=scrapy.Field()

class amazonSpider(scrapy.Spider):
    name = 'amazon'
    start_urls = [
        'https://www.amazon.cn/b?ie=UTF8&node=1852758071'
    ]

    def parse(self, response):
        books=response.xpath('//div[@class="a-fixed-left-grid"]')
        for book in books:
           book_url=book.xpath('.//h2').xpath('../@href').get()
           if book_url:
               yield response.follow(book_url,callback=self.parse_book)

    def parse_book(self,response):
        bookinfo=ItemLoader(item=amazonItem(), response=response)
        bookinfo.add_xpath('cover','//div[@id="ebooks-img-canvas"]/img/@src')
        bookinfo.add_xpath('title','//span[@id="productTitle"]/text()')
        bookinfo.add_xpath('author','//span[@class="author notFaded"]/a/text()')
        bookinfo.add_xpath('price','//span[@class="a-size-base a-color-price a-color-price"]/text()')
        bookinfo.add_xpath('publisher','//td[@class="bucket"]//li[4]/text()')
        bookinfo.add_xpath('ASIN','//div[@class="content"]//b[contains(text(),"ASIN")]/../text()')
        yield bookinfo.load_item()
...