2.4 scrapy的重要对象request和response

06 scrapy的重要对象

web服务器收到客户端的HTTP请求,会针对每一次请求分别创建一个用于代表请求的request对象和代表响应的response对象。

  1. 要得到客户机提交过来的数据,只需要找request对象就行了。

  2. 要向客户机输出数据,只需要找response对象就行了。

1.requests

1.1初始化的参数

class scrapy.http.Request(url 
[ , callback, 
method='GET',
headers, 
body,
cookies, 
meta,encoding='utf-8',  
priority=0, 
don't_filter=False, 
errback ] )

1.2属性

url

method

headers

body

meta

copy() 复制一个相同的request

replace()

### 1.3实例
1,生成Request的方法

 ```
def parse_page1(self, response):
    return scrapy.Request("http://www.example.com/some_page.html",
                          callback=self.parse_page2)

def parse_page2(self, response):
    # this would log http://www.example.com/some_page.html
    self.logger.info("Visited %s", response.url)

2,通过Request传递数据的方法

在两个不同的解析函数之间传递数据的方法。

def parse_page1(self, response):
    item = MyItem()
    item['main_url'] = response.url
    request = scrapy.Request("http://www.example.com/some_page.html",
                             callback=self.parse_page2)
    request.meta['item'] = item
    return request

def parse_page2(self, response):
    item = response.meta['item']
    item['other_url'] = response.url
    return item

3 Request.meta中的特殊关键字

1.4子类

主要的子类是FormRequest。主要用来“登录”作用。所以非常重要。

1,新参数: formdata
    #用于存储用户名,密码等数据

2,新的类方法: from_reponse
    # 从一个reponse中生成一个request
实例:使用FormRequest.from_response()方法模拟用户登录

通常网站通过 实现对某些表单字段(如数据或是登录界面中的认证令牌等)的预填充。 使用Scrapy抓取网页时,如果想要预填充或重写像用户名、用户密码这些表单字段, 可以使用 FormRequest.from_response() 方法实现。下面是使用这种方法的爬虫例子:

import scrapy

class LoginSpider(scrapy.Spider):
    name = 'example.com'
    start_urls = ['http://www.example.com/users/login.php']

    def parse(self, response):
        return scrapy.FormRequest.from_response( # 从respongse返回一个request(FormRequest)
            response,
            formdata={'username': 'john', 'password': 'secret'},
            callback=self.after_login
        )

    def after_login(self, response):
        # check login succeed before going on
        if "authentication failed" in response.body:
            self.logger.error("Login failed")
            return

        # continue scraping with authenticated session...

2.responses

response是scrapy对request的相应,所以是自动产生。一般不用自己生成。

2.1初始化的参数

class scrapy.http.Response(

url [ , 

status=200,

 headers,

 body,

 flags 

] )

2.2成员属性与方法

url

status

headers

body

request # 是产生该responserequest

meta # 是request.meta的简要形式

flags

copy()

replace()

urljoin()  # 经常用到!用相对连接生成绝对连接。

2.3子类

class scrapy.http.TextResponse(url [ , encoding [ , ... ]] )

class scrapy.http.HtmlResponse(url [ , ... ] )

class scrapy.http.XmlResponse(url [ , ... ] )

要搞懂的问题

1,掌握Request初始化参数的意义,并学会使用;
了解Request中的剩余属性和方法

2,掌握通过Request传递数据的方法;

3,掌握FormRequest的用法;

4,掌握Response中属性方法的意义

5,了解Response的子类都有那些,是干什么用的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值