首页 > 其他 > 详细

Scrapy框架(五)--请求传参

时间:2020-06-30 21:44:36      阅读:56      评论:0      收藏:0      [点我收藏+]

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

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

请求传参的使用场景

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

示例:爬取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框架(五)--请求传参

原文:https://www.cnblogs.com/sxy-blog/p/13215810.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!