首页 > 解决方案 > Scrapy不将值保存到项目

问题描述

从今天开始,我的蜘蛛不会将任何信息保存到我的项目“DuifpicturesItem”中。我为不同的客户创建了几乎相同的蜘蛛,但是这个不会保存任何东西,我知道为什么。我的 items.py 只有两个字段:图像和链接

在我的控制台中,我可以看到,我收集了正确的数据,但它并没有保存它

我的代码

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from ..items import DuifpicturesItem
from scrapy.http import Request, FormRequest
import csv

class DuifLogin(CrawlSpider):
    name = "duiflogin"
    allowed_domains = ['duif.nl']
    login_page = 'https://www.duif.nl/login'
    custom_settings = {'FEED_EXPORT_FIELDS' : ['SKU', 'Title', 'Price', 'Link', 'Title_small', 'NL_PL_PC', 'Description' ] }
    with open("duifonlylinks.csv","r") as f:
        reader = csv.DictReader(f)
        start_urls = [items['Link'] for items in reader]
        
    rules = (
        Rule(
            LinkExtractor(),
            callback='parse_page',
            follow=True
            ),
    )         
    
    def start_requests(self):
        yield Request(
            url=self.login_page,
            callback=self.parse,
            dont_filter=True
        )    

    def parse(self, response):
        return FormRequest.from_response(response,formdata={
            'username' : '****',
            'password' : '****',
            'submit' : ''
        },  callback=self.after_loging)

    def after_loging(self, response):
        accview = response.xpath('//div[@class="c-accountbox clearfix js-match-height"]/h3')
        if accview:
            print('success')
        else:
            print(':(') 

        for url in self.start_urls:
            yield response.follow(url=url, callback=self.parse_page)

    def parse_page(self, response):
        productpage = response.xpath('//div[@class="product-details col-md-12"]')
        
        if not productpage:
            print('No product', response.url)

        for a in productpage:
            
            items = DuifpicturesItem()
            items['Link'] = response.url
            items['Images'] = response.xpath('//div[@class="inner"]/img/@src').getall()
            yield items

我的控制台 在这里你可以看到,它像我想要的那样抓取链接和图像,但 .csv/.json 文件仍然是空的在此处输入图像描述

PS 登录数据不正确,但是对于这个过程,我不必登录,所以我想,它不会影响爬取过程。

标签: pythonweb-scrapingscrapy

解决方案


不确定您所说的“保存”是什么意思。由于您没有提及管道,我假设您没有用于处理您的项目的管道,因此您的项目仅保存在内存中。

如果要将抓取的项目保存到文件中,则需要使用feed 导出。最简单的方法是:

scrapy crawl myspider -o items.json

它支持其他格式,请查看文档。

如果您打算保存到数据库或对数据执行其他操作,请检查ItemPipelines


推荐阅读