18-爬虫之scrapy框架请求传参实现的深度爬取(全站爬取)05
生活随笔
收集整理的這篇文章主要介紹了
18-爬虫之scrapy框架请求传参实现的深度爬取(全站爬取)05
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
請求傳參實現的深度爬取
- 深度爬取:爬取的數據沒有在同一張頁面中(首頁數據+詳情頁數據)
- 在scrapy中如果沒有請求傳參我們是無法進行持久化存儲數據的
- 實現方式:
- scrapy.Request(url,callback,meta)
- meta是一個字典,可以將meta傳遞給callback
- callback取出meta:
- response.meta
創建一個爬蟲工程:scrapy startproject proName
進入工程目錄創建爬蟲源文件:scrapy genspider spiderName www.xxx.com
執行工程:scrapy crawl spiderName
爬蟲源文件
import scrapy from middlePro.items import MiddleproItemclass MiddleSpider(scrapy.Spider):name = 'middle'#allowed_domains = ['www.xxx.com']start_urls = ['http://www.4567kan.com/index.php/vod/show/id/5.html']#定義一個通用url模板url = 'http://www.4567kan.com/index.php/vod/show/id/5/page/%d.html'pageNum = 2def 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/a/@title').extract_first()detail_url = 'http://www.4567kan.com'+li.xpath('./div/a/@href').extract_first()item = MiddleproItem()#實例化一個item對象對解析到的數據進行存儲item['title'] = title# 對詳情頁url發起請求yield scrapy.Request(url=detail_url,callback=self.parse_detail,meta={'item':item}) #meta作用,可以將一個meta字典傳遞給callbackif self.pageNum < 5:#爬取到第4頁停止請求new_url = format(self.url%self.pageNum)self.pageNum += 1yield scrapy.Request(url=new_url,callback=self.parse) #請求傳參# 此方法被作用到詳情頁的數據def parse_detail(self,response):item = response.meta['item'] # 接受傳遞過來的metadesc = response.xpath('/html/body/div[1]/div/div/div/div[2]/p[5]/span[2]').extract_first()item['desc'] = descyield item總結
以上是生活随笔為你收集整理的18-爬虫之scrapy框架请求传参实现的深度爬取(全站爬取)05的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 17-爬虫之scrapy框架五大核心组件
- 下一篇: 19-爬虫之scrapy框架大文件下载0