Scrapy框架之-请求传参与post请求处理

请求传参

  • 在某些情况下,我们爬取的数据不在同一个页面中,例如,我们爬取一个电影网站,电影的名称,评分在一级页面,而要爬取的其他电影详情在其二级子页面中。这时我们就需要用到请求传参。
  • 请求传参的使用场景
    • 当我们使用爬虫爬取的数据没有存在于同一张页面的时候,则必须使用请求传参
# -*- coding: utf-8 -*-
import scrapy
from ..items import MovieproItem

class MovieSpider(scrapy.Spider):
name = 'movie'
# allowed_domains = ['www.xx.cn']
start_urls = ['https://www.4567kan.com/frim/index1.html']
  #详情页解析
def detail_parse(self,response):
item = response.meta['item']
actor = response.xpath('/html/body/div[1]/div/div/div/div[2]/p[3]/a/text()').extract_first()

item['actor'] = actor

yield item
  #初始页解析
def parse(self, response):
li_list = response.xpath('//li[@class="col-md-6 col-sm-4 col-xs-3"]')
for li in li_list:
item=MovieproItem()
title = li.xpath('./div/a/@title').extract_first()
detail_url = 'https://www.4567kan.com'+li.xpath('./div/a/@href').extract_first()
item['title'] = title

yield scrapy.Request(url=detail_url,callback=self.detail_parse,meta={'item':item})

POST请求的数据解析:

重写scrapy下面的 start_requests方法。不推荐使用scrapy框架发送post请求,配置复杂,。推荐用requests模块
import scrapy


class FySpider(scrapy.Spider):
    name = 'fy'
    # allowed_domains = ['www.baidu.com']
    start_urls = ['https://fanyi.baidu.com/sug']

    def start_requests(self):
        data={
            'kw':"beautiful"
        }
        for url in self.start_urls:
            yield  scrapy.FormRequest(url=url,formdata=data,callback=self.parse)

    def parse(self, response):
        print(response.text)

猜你喜欢

转载自www.cnblogs.com/cou1d/p/12626288.html