scrapy 框架中Request对象和Response对象的详解。

一,有关爬虫框架scrapy 的简单介绍。

scrapy框架是使用Python语言(基于Twisted框架)编写的开源网络爬虫框架。多线程爬虫。

1、scrapy 安装。

pip install scrapy

2, 爬虫的创建。

在shell中,使用命令 scrapy startproject 命令进行创建项目
例如:scrapy startproject example  即可。
创建爬虫:scrapy genspider 爬虫名 域名

3,Request 对象
Request对象用来描述一个http请求,首先对其构造器的参数列表进行分析讲解。

Request(url[, callback,method='GET', header,body, cookies, meta, encoding='utf-8', priority=0, dont_filte=False, errback]) 
# 下面介绍这些参数。 
url(必选)  请求页面的url地址,bytes或者str类型。
callback  页面解析函数(回调函数) callable类型   Request对象请求的页面下载完成后,由该参数指定页面解析函数被调用。如果没有定义该参数,默认为parse方法。
method http请求的方法,默认为GET
header http 请求的头部字典,dict类型,例如{“Accrpt”:"text/html","User-Agent":"Mozilla/5.0"},如果其中某一项的值为空,就表示不发送该项http头部,例如:{“cookie”:None} 表示禁止发生cookie.
body   http请求的正文,bytes或者str类型。
cookies  cookies 信息字典,dict类型。
meta  Request的元素数据字典,dict类型,用于框架中其他组件传递信息,比如中间件Item Pipeline. 其他组件可以使Request对象的meta属性访问该元素字典(request.meta),也用于给响应处理函数传递信息。
encoding  url和body参数的编码方式,默认为utf-8,如果传入str类型的参数,就使用该参数对其进行编码。
priority  请求的优先级默认为0 ,优先级高的请求先下载。
dont_filter  默认为False,对同一个url地址多次请求,后面的请求会被过滤(避免重复下载)。如果该参数置为True,这可以重复下载。(有是页面网站页面会动态变化,需要重复下载。)
errback   请求出现异常或者出现http错时的回调函数。

4,Response 对象。

Response对象用于描述一个http响应,Response只是一个基类,根据响应的内容不同有如下的子类:
1,TextResponse
2,HtmlResponse
3,XMLResponse
4,其中HtmlResponse和XMLResponse是TextResponse的子类。他们的差别不是很大
当一个页面下载完成时,下载器依据下载Http响应头部中的Content-Type信息创建某一个Response的子类对象。我们通常爬去网页,其内容是Html文本,那创建的便是HTMLResponse对象。
由于我们平时下载的页面大都是HTML文本,这里对HTMLResponse对象进行说明:
首先我来说明HTTPResponse对象的属性和方法。
url
http响应的url地址,str类型
status
http响应的状态码,int类型。
headers
http响应头的头部,类型为字典,可以调用get或者getlist方法进行访问,例如:
response.headers.get("Content-Type").
request
产生该http响应的Response对象。
meta
即:response.request.meta,在构造Request对象时,可将要传递的响应处理函数的信息通过meta参数传入,响应处理函数处理响应时,通过response.meta将信息取出。
selector
Selector对象用于提取Response中的数据。
xpth
使用xpath选择器提取Response中的数据,实际上它是response.selector.xpath方法的快捷方式。
css
使用css选择器提取Response中的数据,实际上它是response.selector.css方法的快捷方式。
urljoin
用于构造绝对的url。当传入的url参数是一个相对的url时,根据response.urljoin(url),即可获得绝对路径。

猜你喜欢

转载自blog.csdn.net/MZP_man/article/details/92569970