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_price
和high_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。