首页 > 其他 > 详细

scrapy请求传参

时间:2020-06-09 18:21:26      阅读:55      评论:0      收藏:0      [点我收藏+]

scrapy请求传参

作用:实现深度爬取

爬取多个层级对应的页面数据

使用场景:爬取的数据没有在同一张页面

在手动请求的时候传递item:

yield scrapy.Request(url,callback,meta={‘item‘:item})

将meta这个字典传递给callback

callback中接收meta:

item = response.meta[‘item‘]

完整示例:

from moviePro.items import MovieproItem
class MovieSpider(scrapy.Spider):
    name = ‘movie‘
    # allowed_domains = [‘www.xxx.com‘]
    start_urls = [‘https://www.4567tv.tv/index.php/vod/show/class/动作/id/1.html‘]

    url = ‘https://www.4567tv.tv/index.php/vod/show/class/动作/id/1/page/%d.html‘
    pageNum = 1
    def parse(self, response):
        li_list = response.xpath(‘/html/body/div[1]/div/div/div/div[2]/ul/li‘)
        for li in li_list:
            title = li.xpath(‘./div[1]/a/@title‘).extract_first()
            detail_url = ‘https://www.4567tv.tv‘+li.xpath(‘./div[1]/a/@href‘).extract_first()
            item = MovieproItem()
            item[‘title‘] = title
            #meta参数是一个字典,该字典就可以传递给callback指定的回调函数
            yield scrapy.Request(detail_url,callback=self.parse_detail,meta={‘item‘:item})

        if self.pageNum < 5:
            self.pageNum += 1
            new_url = format(self.url%self.pageNum)
            yield scrapy.Request(new_url,callback=self.parse)

    def parse_detail(self,response):
        #接收meta:response.meta
        item = response.meta[‘item‘]
        desc = response.xpath(‘/html/body/div[1]/div/div/div/div[2]/p[5]/span[2]/text()‘).extract_first()
        item[‘desc‘] = desc
        yield item

scrapy请求传参

原文:https://www.cnblogs.com/Hedger-Lee/p/13073958.html

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