python - 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 登录数据不正确,但是对于这个过程,我不必登录,所以我想,它不会影响爬取过程。
解决方案
不确定您所说的“保存”是什么意思。由于您没有提及管道,我假设您没有用于处理您的项目的管道,因此您的项目仅保存在内存中。
如果要将抓取的项目保存到文件中,则需要使用feed 导出。最简单的方法是:
scrapy crawl myspider -o items.json
它支持其他格式,请查看文档。
如果您打算保存到数据库或对数据执行其他操作,请检查ItemPipelines。
推荐阅读
- windows - CMAKE:UNC 路径不适用于安装目标
- javascript - 有没有办法用 webpack 指定多个带有静态资产的公共目录?
- reactjs - React-Dropzone - 我们能够处理 HEIF/HEIC 文件吗?
- c++ - 为什么 system() 会在 fork() 系统调用中使用 100% CPU?
- css - Firefox sanitizer 拒绝 React 样式组件中的字体,但适用于老式 CSS
- html - 使用 CSS 使内容消失
- bash - 匹配文件行尾的字符串
- python - 添加合规参数后如何更新我的自动标记功能以删除不合规标记
- reactjs - 如何在 React-Native 中使用谷歌图表?
- python - 以下 python 代码片段的输出是什么?(主题:if-else 语句)