zoukankan      html  css  js  c++  java
  • Scrapy框架(五)--请求传参

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

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

    请求传参的使用场景

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

    示例:爬取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)
  • 相关阅读:
    百度之星2019 初赛一 题解
    [NOI2019]弹跳(KD-Tree/四分树/线段树套平衡树 优化建图+Dijkstra)
    [BZOJ2157]旅游(树链剖分/LCT)
    [BZOJ3230]相似子串(后缀数组)
    回文树/回文自动机(PAM)学习笔记
    [CF30E]Tricky and Clever Password(KMP+manacher)
    APIO2019题解
    代码大全
    算法竞赛常用资料整理
    手动修复 Flash CS3 简中化不完全问题
  • 原文地址:https://www.cnblogs.com/sxy-blog/p/13215810.html
Copyright © 2011-2022 走看看