我有蜘蛛使用meta处理链中的请求,以产生具有来自多个请求的数据的项目.

我用来生成请求的方式是在首次调用parse函数时启动所有请求,但是,如果我有太多链接无法请求,则并不是所有请求都已计划好,最终我也无法获得所需的一切.

为了解决这个问题,我正在尝试使Spider一次请求5个产品,然后在Spider空闲时再次请求(通过在from_crawler中连接信号).

问题是,由于我的代码现在正确,spider_idle没有运行请求函数,并且蜘蛛立即关闭.好像蜘蛛不会闲置.

这是一些代码:

class ProductSpider(scrapy.Spider):

def __init__(self, *args, **kwargs):

super(ProductSpider, self).__init__(*args, **kwargs)

self.parsed_data = []

self.header = {}

f = open('file.csv', 'r')

f_data = [[x.strip()] for x in f]

count=1

first = 'smth'

for product in f_data:

if first != '':

header = product[0].split(';')

for each in range(len(header[1:])):

self.header[header[each+1]] = each+1

first = ''

else:

product = product[0].split(';')

product.append(count)

count+=1

self.parsed_data.append(product)

f.close()

@classmethod

def from_crawler(cls, crawler, *args, **kwargs):

spider = super(ProductSpider, cls).from_crawler(crawler, *args, **kwargs)

crawler.signals.connect(spider.request, signal=signals.spider_idle)

return spider

name = 'products'

allowed_domains = [domains]

handle_httpstatus_list = [400, 404, 403, 503, 504]

start_urls = [start]

def next_link(self,response):

product = response.meta['product']

there_is_next = False

for each in range(response.meta['each']+1, len(product)-1):

if product[each] != '':

there_is_next = True

yield scrapy.Request(product[each], callback=response.meta['func_dict'][each], meta={'func_dict': response.meta['func_dict'],'product':product,'each':each,'price_dict':response.meta['price_dict'], 'item':response.meta['item']}, dont_filter=True)

break

if not there_is_next:

item = response.meta['item']

item['prices'] = response.meta['price_dict']

yield item

#[...] chain parsing functions for each request

def get_products(self):

products = []

data = self.parsed_data

for each in range(5):

if data:

products.append(data.pop())

return products

def request(self):

item = Header()

item['first'] = True

item['sellers'] = self.header

yield item

func_dict = {parsing_functions_for_every_site}

products = self.get_products()

if not products:

return

for product in products:

item = Product()

price_dict = {1:product[1]}

item['name'] = product[0]

item['order'] = product[-1]

for each in range(2, len(product)-1):

if product[each] != '':

#print each, func_dict, product[each]

yield scrapy.Request(product[each], callback=func_dict[each],

meta={'func_dict': func_dict,'product':product,

'each':each,'price_dict':price_dict, 'item':item})

break

raise DontCloseSpider

def parse(self, response=None):

pass

python绿色版spider的idle_Python-Scrapy Spider没有收到spider_idle信号相关推荐

  1. 七月算法课程《python爬虫》第五课: scrapy spider的几种爬取方式

    本节课介绍了scrapy的爬虫框架,重点说了scrapy组件spider. spider的几种爬取方式: 1.爬取1页内容 2.按照给定列表拼出链接爬取多页 3.找到'下一页'标签进行爬取 4.进入链 ...

  2. python绿色版使用_嵌入式Python : 如何在U盘安装绿色版 Python

    一直以来都习惯将各种日常工具和开发环境变为绿色版. portable,一个U盘就能将日常所用到的开发环境和必备资料随身携带,从公司到家里,再也不用背上重重的笔记本,通勤路上也能轻轻松松的听听音乐,看看 ...

  3. python绿色版_mPython最新下载_mPython绿色版 - 软件帝

    mPython官方版是款针对程序员们所打造的图形编程工具.mPython电脑版支持命令式程序设置,并具有强大的编程库,用户可将其与多种模块完美相结合在一起.mPython还可以支持函数,仿真.hex. ...

  4. python绿色版运行程序_Python打包exe运行程序,分享你的技术成果!

    本文转载于公众号:你想要

  5. python学习笔记之爬虫框架scrapy(十七)

    一.安装 执行以下命令安装scrapy pip install scrapy 注意: Scrapy是用纯Python编写的,并且依赖于一些关键的Python包(以及其他一些包): lxml,高效的XM ...

  6. scrapy.Spider的属性和方法

    scrapy.Spider的属性和方法 属性: name:spider的名称,要求唯一 allowed_domains:允许的域名,限制爬虫的范围 start_urls:初始urls custom_s ...

  7. 安装Python(绿色版)

    前言:在Win10系统中安装Python环境,使用安装包有些麻烦,使用嵌入版则仅需解压并配置环境变量即可,省时省力,十分方便.同时还安装包管理器pip. 下载嵌入版 官网下载:Python嵌入版 解压 ...

  8. python 实时数据推送_python scrapy 爬取金十数据并自动推送到微信

    一.背景 因业务需要获取风险经济事件并采取应对措施,但因为种种原因又疏忽于每天去查看财经日历,于是通过爬取金十数据网站并自动推送到微信查看. 二.目标实现 image 三.环境与工具 1.pychar ...

  9. Python爬虫——零基础实现基于scrapy框架的项目

    1. 生成器 yield作用 : 把一个函数当做一个生成器使用 斐波那契数列: def fib(n):a, b, s = 0, 1, 0while s<n:a, b = b, a+bs += 1 ...

最新文章

  1. 修改 Docker 的默认存储路径
  2. Kali Linux 2017.1脚本gerix.py修复
  3. 任务计划cron、服务管理工具chkconfig/systemctl
  4. sourceTree安装与使用
  5. 人工智能改变生活的 10 种方式
  6. 【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践
  7. SpringBoot返回json和xml
  8. 做虚拟化服务器的配资一致嘛,服务器虚拟化技术在校园网管理中的应用探讨.pdf...
  9. 如何查看 Linux是32位还是64位?
  10. 我点击一个单选框时另外一个单选框里的内容属性隐藏掉_一个交通工程专业硕士研究生的总结与独白(二):交通生成预测及TransCAD操作...
  11. 巴基斯坦国立计算机与新科大学,新加坡四所大学和新科院学费全面上调
  12. Linux ct获取本机ip,[原]archlinux 下最新的netct工具配置ip地址
  13. HP LaserJet Pro MFP M126nw打印机在Win11操作系统中无法打印问题的解决方案
  14. CentOS7.6Arm Qt开发环境(GCC+Qt5+QtCreator+JDK8+MySQL8+CMake+ProtoBuf+Python+SVN)
  15. 家庭整理-《家庭断舍离》书中的精髓:如何通过家庭断舍离,来消除家居环境和家庭关系间的堆积物,从而拥有自由舒适的家庭关系。
  16. 黎明回港避谈婚事 被曝宴请好友庆祝新婚(附图)
  17. 蓄热式加热炉燃烧技术
  18. python 同时输出国际和国内BMI值
  19. iphone SE 自带视频播放器要求的视频格式转换参数
  20. 广义拉格朗日函数的理解

热门文章

  1. Codeforces 841B - Godsend
  2. java继承怎么老是出错_java中子类继承父类时总是出错怎么回?
  3. QT图形界面在工业数据采集显示系统的应用
  4. 读书虽好,却教不会你行动的能力
  5. 唯有自身强大才能呼风唤雨—Intel要携CXL一统互联江湖了吗?
  6. CVPR2019文字检测归纳
  7. 最齐全的支付宝小程序支付【详细】
  8. ESP32 开发笔记(八)ESP32 MP3 播放器
  9. C语言必看面试题:for循环的使用
  10. 解决Macbook开机iCloud,FaceTime,iMessage不停输入密码的问题