Scrapy中的response对象的属性及方法,附加mate属性的使用方法

response

Scrapy中的`response`对象是一个包含HTTP响应的Python对象,具有以下属性和方法: **属性**
  • url: 响应的URL。
  • status: 响应的HTTP状态码。
  • headers: 包含响应头信息的字典。
  • body: 响应正文的原始二进制数据。
  • text: 响应正文的Unicode编码字符串。
  • encoding: 响应正文的编码类型。

方法

  • xpath(): 使用XPath表达式从响应中提取数据。
  • css(): 使用CSS选择器从响应中提取数据。
  • follow(): 跟踪一个链接并返回一个新的response对象。
  • meta: 用于在请求和响应之间传递数据的字典。
  • replace(): 替换响应的URL并返回一个新的response对象。
  • request(): 返回生成当前响应的请求对象。

meta

meta参数是Scrapy中的一个字典,可以用于在请求和响应之间传递数据。我们可以添加任何我们想要的键值对,以便在处理请求和响应时使用。

以下是一些常用的meta参数:

  • dont_redirect: 如果设置为True,则禁止重定向。
  • handle_httpstatus_list: 一个HTTP状态码列表,表示这些状态码应该被视为有效响应,而不是错误。
  • download_timeout: 请求超时时间,以秒为单位。
  • cookiejar: 指定要使用的Cookie jar的名称。

除了这些常规参数外,我们还可以根据自己的需求添加其他自定义参数。例如,在爬取商品页面时,我们可以使用meta参数存储相关的元数据,例如产品类别、价格范围、品牌等等,以便在后续处理中进行分析和挖掘。

需要注意的是,meta参数的大小通常应该保持较小,因为如果太大,它可能会影响Scrapy的性能和稳定性。

如果我们想对商品页面的价格范围进行控制,可以将最低价格和最高价格作为meta参数的一部分传递给请求。具体来说,您可以使用以下方式设置meta参数:

low_price = 10 # 最低价格
high_price = 100 # 最高价格

# 构造请求对象,并设置meta参数
request = scrapy.Request(url=url, meta={'low_price': low_price, 'high_price': high_price})

在上述代码中,我们首先定义了最低价格和最高价格。然后,我们构造了一个Scrapy的请求对象,并在其中设置了两个meta参数,即low_pricehigh_price

在后续的响应处理过程中,您可以通过访问response.meta['low_price']response.meta['high_price']来获取这些值,并根据这些值过滤或处理数据。例如,您可以使用以下代码实现只提取价格在指定范围内的商品信息:

def parse(self, response):
    low_price = response.meta['low_price']
    high_price = response.meta['high_price']
    
    # 提取商品信息,并过滤价格不在指定范围内的商品
    for item in self.extract_items(response):
        price = item.get('price')
        if price and low_price <= price <= high_price:
            yield item

在上述代码中,我们首先从响应的meta参数中获取最低价格和最高价格。然后,我们提取商品信息,并使用if语句过滤出价格在指定范围内的商品,并使用yield关键字返回结果。

self.extract_items是自定义的方法,是一个解析数据的函数,返回一个items列表,包含了多个item。

posted @ 2023-03-16 11:29  Rev_RoastDuck  阅读(187)  评论(0编辑  收藏  举报