在某些情况下,我们爬取的数据不在同一个页面中,例如,我们爬取一个电影网站,电影的名称,评分在一级页面,而要爬取的其他电影详情在其二级子页面中。

这时我们就需要用到请求传参。

请求传参的使用场景

当我们使用爬虫爬取的数据没有存在于同一张页面的时候,则必须使用请求传参。(深度爬取)

示例:爬取boss的岗位名称,岗位描述

# -*- coding: utf-8 -*-
import scrapy
from bossPro.items import BossproItem class BossproSpider(scrapy.Spider):
name = 'bosspro'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://www.zhipin.com/c100010000-p100109/?ka=search_100109']
url = 'https://www.zhipin.com/c100010000-p100109/?page=%s&ka=page-%s'
page_num = 2
def detail_parse(self,response):
job_desc = response.xpath('//*[@id="main"]/div[3]/div/div[2]/div[2]/div[1]/div//text()').extract()
job_desc = ''.join(job_desc)
item = response.meta.get('item')
item['job_desc'] = job_desc
print(job_desc)
yield item def parse(self, response):
print(response.text)
li_list = response.xpath('//*[@id="main"]/div/div[2]/ul/li')
print(li_list)
for li in li_list:
item = BossproItem()
job_name = li.xpath('.//div[@class="job-title"]/span[1]/a/text()').extract_first()
detail_url = 'https://www.zhipin.com'+li.xpath('.//div[@class="job-title"]/span[1]/a/@href').extract_first()
print(detail_url)
print(job_name)
item['job_name'] = job_name
# meta可以将参数 传递给回调的函数
yield scrapy.Request(url=detail_url,callback=self.detail_parse,meta={'item':item}) # 请求传参就是将不同页面请求到的数据封装到item中 存储在管道 可通过meta参数传递item if self.page_num <=5:
new_url = format(self.url % (self.page_num,self.page_num))
self.page_num+=1
yield scrapy.Request(url=new_url,callback=self.parse)

Scrapy框架(五)--请求传参的更多相关文章

  1. scrapy框架3——请求传参

    当使用scrapy爬取的数据不在同一张页面中(一次请求与数据后解析无法获得想要的全部数据),需要请求传参,在第一次解析时实例化item,将item传递,再次将请求到的数据解析后,封装在item中. 关 ...

  2. python爬虫---scrapy框架爬取图片,scrapy手动发送请求,发送post请求,提升爬取效率,请求传参(meta),五大核心组件,中间件

    # settings 配置 UA USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, l ...

  3. scrapy框架post请求发送,五大核心组件,日志等级,请求传参

    一.post请求发送 - 问题:爬虫文件的代码中,我们从来没有手动的对start_urls列表中存储的起始url进行过请求的发送,但是起始url的确是进行了请求的发送,那这是如何实现的呢? - 解答: ...

  4. scrapy框架的日志等级和请求传参, 优化效率

    目录 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 请求传参 如何提高scripy的爬取效率 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 在使 ...

  5. 13.scrapy框架的日志等级和请求传参

    今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是s ...

  6. scrapy框架的日志等级和请求传参

    日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息 ...

  7. scrapy框架之日志等级和请求传参-cookie-代理

    一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...

  8. 爬虫开发10.scrapy框架之日志等级和请求传参

    今日概要 日志等级 请求传参 今日详情 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志 ...

  9. Scrapy框架之日志等级和请求传参

    一.Scrapy的日志等级 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. 1.日志等级(信息种类) ERROR:错误 WARN ...

  10. 13,scrapy框架的日志等级和请求传参

    今日概要 日志等级 请求传参 如何提高scrapy的爬取效率 一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy ...

随机推荐

  1. CF1481D AB Graph 题解

    CF1481D AB Graph 题解 [思路] 首先有几个显而易见的东西. 如果存在两个点,他们之间的两条边字母相同,那么一定有解(在两个点之间跳.) 否则,这张图的邻接矩阵一定长成这样: * a ...

  2. C#的基于.net framework的Dll模块编程(二) - 编程手把手系列文章

    今天继续这个系列博文的编写.接上次的篇幅,这次介绍关于C#的Dll类库的创建的内容.因为是手把手系列,所以对于需要入门的朋友来说还是挺好的,下面开始咯: 一.新建Dll类库: 这里直接创建例子的Dll ...

  3. 有赞 Flink 实时任务资源优化探索与实践

    简介: 目前有赞实时计算平台对于 Flink 任务资源优化探索已经走出第一步. 随着 Flink K8s 化以及实时集群迁移完成,有赞越来越多的 Flink 实时任务运行在 K8s 集群上,Flink ...

  4. 新型DDoS来袭 | 基于STUN协议的DDoS反射攻击分析

    简介: 作为新型反射类型,目前仍存绕过防御可能性. 阿里云安全近期发现利用STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)服务发起的DDoS反 ...

  5. HMS数据库设置和优化

    简介:Hive Metastore (HMS) 是一种服务,用于在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存储与 Apache Hive 和其他服务相关的元数据.本文主要分享H ...

  6. 阿里云 EventBridge 事件驱动架构实践

    ​简介:我们认为 EventBridge 是云原生时代新的计算驱动力,这些数据可以驱动云的计算能力,创造更多业务价值. 作者:周新宇 本文内容整理自 中国开源年会 演讲 首先做一个自我介绍,我是 Ro ...

  7. LlamaIndex 探索视频系列

    如果您喜欢通过视频学习,现在正是查看我们的"探索 LlamaIndex"系列的好时机.否则,我们建议您继续阅读"理解 LlamaIndex"教程. 自下而上开发 ...

  8. [Go] golang-migrate/migrate 快速使用指南

    1. CLI 用途的安装 [文档] [确保] CLI 工具使用 go 命令安装时,不应该在 go.mod 所在的目录中执行命令,也就是先进入到其它非项目目录内. $ go get -tags 'pos ...

  9. python使用pysql操作MySQL数据库

    前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11. ...

  10. Git/SourceTree版本管理

    目录 视频课程: 工作区: 文件状态: 回退版本: 合并分支 合并提交 冲突 删除分支 忽略文件 汉英对照表 多端同步 添加远程仓库 推送代码到远程仓库 拉取代码 视频课程: https://www. ...