会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 网络爬虫框架Scrapy详解之Request!

网络爬虫框架Scrapy详解之Request

时间:2025-11-05 11:44:00 来源:益强数据堂 作者:域名 阅读:843次

介绍

Request类是网络一个http请求的类,对于爬虫而言是爬虫一个很重要的类。通常在Spider中创建这样的框架一个请求,在Downloader中执行这样的详解一个请求。同时也有一个子类FormRequest继承于它,网络用于post请求。爬虫

在Spider中通常用法:   

yield scrapy.Request(url = zarten.com) 

类属性和方法有: 

url  method  headers  body  meta  copy()  replace([url,框架 method, headers, body, cookies, meta, encoding, dont_filter, callback, errback]) 

Request   

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

参数说明:

 url 请求的url  callback 回调函数,用于接收请求后的详解返回信息,若没指定,网络则默认为parse()函数  method http请求的爬虫方式,默认为GET请求,框架一般不需要指定。详解若需要POST请求,网络用FormRequest即可  headers 请求头信息,爬虫一般在settings中设置即可,框架也可在middlewares中设置  body str类型,为请求体,一般不需要设置(get和post其实都可以通过body来传递参数,不过一般不用)  cookies dict或list类型,请求的cookie dict方式(name和value的键值对):    cookies = {name1 : value1 , name2 : value2} 

list方式:   

cookies = [     {name: Zarten, value: my name is Zarten, domain: example.com, path: /currency}     ]   encoding 请求的编码方式,默认为utf-8  priority int类型,指定请求的免费信息发布网优先级,数字越大优先级越高,可以为负数,默认为0  dont_filter 默认为False,若设置为True,这次请求将不会过滤(不会加入到去重队列中),可以多次执行相同的请求  errback 抛出错误的回调函数,错误包括404,超时,DNS错误等,***个参数为Twisted Failure实例    from scrapy.spidermiddlewares.httperror import HttpError     from twisted.internet.error import DNSLookupError     from twisted.internet.error import TimeoutError, TCPTimedOutError     class ToScrapeCSSSpider(scrapy.Spider):         name = "toscrape-css"         # start_urls = [         #     http://quotes.toscrape.com/,         # ]         start_urls = [             "http://www.httpbin.org/",  # HTTP 200 expected             "http://www.httpbin.org/status/404",  # Not found error             "http://www.httpbin.org/status/500",  # server issue             "http://www.httpbin.org:12345/",  # non-responding host, timeout expected             "http://www.httphttpbinbin.org/",  # DNS error expected         ]         def start_requests(self):             for u in self.start_urls:                 yield scrapy.Request(u, callback=self.parse_httpbin,                                      errback=self.errback_httpbin,                                      dont_filter=True)         def parse_httpbin(self, response):             self.logger.info(Got successful response from {}.format(response.url))             # do something useful here...         def errback_httpbin(self, failure):             # log all failures             self.logger.info(repr(failure))             # in case you want to do something special for some errors,             # you may need the failures type:             if failure.check(HttpError):                 # these exceptions come from HttpError spider middleware                 # you can get the non-200 response                 response = failure.value.response                 self.logger.info(HttpError错误 on %s, response.url)             elif failure.check(DNSLookupError):                 # this is the original request                 request = failure.request                 self.logger.info(DNSLookupError错误 on %s, request.url)             elif failure.check(TimeoutError, TCPTimedOutError):                 request = failure.request                 self.logger.info(TimeoutError错误 on %s, request.url)   flags list类型,一般不会用到,发送请求的标志,一般用于日志记录  meta 可用户自定义从Request到Response传递参数,这个参数一般也可在middlewares中处理    yield scrapy.Request(url = zarten.com, meta = {name : Zarten}) 

在Response中: 

my_name = response.meta[name] 

不过也有scrapy内置的特殊key,也非常有用,它们如下:

 proxy 设置代理,一般在middlewares中设置

可以设置http或https代理 

request.meta[proxy] = https:// + ip:port   downloadtimeout 设置请求超时等待时间(秒),通常在settings中设置DOWNLOADTIMEOUT,默认是180秒(3分钟)  maxretrytimes ***重试次数(除去***次下载),默认为2次,通常在settings中 RETRY_TIMES设置  dont_redirect 设为True后,Request将不会重定向  dont_retry 设为True后,对于http链接错误或超时的请求将不再重试请求  handlehttpstatuslist http返回码200-300之间都是成功的返回,超出这个范围的WordPress模板都是失败返回,scrapy默认是过滤了这些返回,不会接收这些错误的返回进行处理。不过可以自定义处理哪些错误返回:    yield scrapy.Request(url= https://httpbin.org/get/zarten, meta= {handle_httpstatus_list : [404]}) 

在parse函数中可以看到处理404错误:     

def parse(self, response):      print(返回信息为:,response.text)   handlehttpstatusall 设为True后,Response将接收处理任意状态码的返回信息  dontmergecookies scrapy会自动保存返回的cookies,用于它的下次请求,当我们指定了自定义cookies时,如果我们不需要合并返回的cookies而使用自己指定的cookies,可以设为True  cookiejar 可以在单个spider中追踪多个cookie,它不是粘性的,需要在每次请求时都带上        def start_requests(self):             urls = [http://quotes.toscrape.com/page/1,                     http://quotes.toscrape.com/page/3,                     http://quotes.toscrape.com/page/5,                     ]             for i ,url in enumerate(urls):                 yield scrapy.Request(urlurl= url, meta= {cookiejar : i})         def parse(self, response):             next_page_url = response.css("li.next > a::attr(href)").extract_first()             if next_page_url is not None:                 yield scrapy.Request(response.urljoin(next_page_url), meta= {cookiejar : response.meta[cookiejar]}, callback= self.parse_next)         def parse_next(self, response):             print(cookiejar:, response.meta[cookiejar])   dont_cache 设为True后,不会缓存  redirect_urls 暂时还不清楚具体的作用,知道的小伙伴们欢迎在评论留言  bindaddress 绑定输出IP  dontobeyrobotstxt 设为True,不遵守robots协议,通常在settings中设置  downloadmaxsize 设置下载器***下载的大小(字节),通常在settings中设置DOWNLOADMAXSIZE,默认为1073741824 (1024MB=1G),若不设置***的下载限制,设为0  download_latency 只读属性,IT技术网获取请求的响应时间(秒)        def start_requests(self):             headers = {                 user-agent : Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36             }             yield scrapy.Request(url= https://www.amazon.com, headersheaders= headers)         def parse(self, response):             print(响应时间为:, response.meta[download_latency])   downloadfailon_dataloss 很少用到,详情看这里  referrer_policy 设置Referrer Policy

FormRequest

FormRequest 类为Request的子类,用于POST请求

这个类新增了一个参数 formdata,其他参数与Request一样,详细可参考上面的讲述

一般用法为:   

yield scrapy.FormRequest(url="http://www.example.com/post/action",                         formdata={name: Zarten, age: 27},                         callback=self.after_post)  

(责任编辑:应用开发)

推荐内容
  • 1.下载获取字体并解压安装对于开源操作系统而言,Ubuntu平台默认自带很多字体。但通常情况下用户或许对已有字体并不能满足需要。因此,类似Windows系统一样,用户可以在Ubuntu 14.04、14.10或者像Linux Mint之类系统中安装额外的字体。步骤一: 获取字体首先,下载你所选择的字体。用户会现在你或许在考虑下载字体,通过搜索引擎可以给你提供几个免费的字体网站。用户可以先去看看Lost Type的字体(点击下载),Squirrel也是一个下载字体的网站(点击下载),用户都可以从这两个网站找的需要新字体。步骤二:Ubuntu中安装新字体对于用户来讲,下载的字体文件可能是一个压缩包,先解压它大多数字体文件格式是TTF (TrueType字体) 或者OTF (OpenType字体)。无论是哪种格式,双击字体文件后会自动用字体查看器打开。这里用户可以在右上角看到安装选项。值得注意的是:在安装字体时不会看到其他信息。几秒钟后会看到状态变成已安装,表示字体已经安装完毕。安装完毕后,用户就可以在GIMP、Pina等应用中看到你新安装的字体。2.在Ubuntu上一次安装多字体要在Ubuntu中一次安装多个字体,需要在home目录下创建一个.fonts文件夹(假如它不存在的话),并把解压后的TTF和OTF文件复制到这个文件夹内。在文件管理器中进入home目录。按下Ctrl+H 显示Ubuntu中的隐藏文件,右键创建一个文件夹并命名为.fonts。 值得提醒的是在Linux中,文件前面加上“.”意味在普通的视图中都会隐藏。另外,用户可以通过安装字体管理程序,在图形用户界面管理字体。要在Ubuntu中安装字体管理程序,打开终端并输入下面的命令:要卸载字体管理器,使用下面的命令:在此推荐一下文泉驿正黑字体作为具体示例~上图是在 Xubuntu 14.04 自带文本编辑器 Mousepad 里的字体效果。喜欢锐利清晰字体的 Ubuntu 用户,可以安装文泉驿正黑: 复制代码代码如下:sudo apt-get install fonts-wqy-zenhei 然后在系统字体设置里应用“文泉驿点阵正黑”字体即可。
  • 我的阿里二面,为什么MySQL选择Repeatable Read作为默认隔离级别?
  • 聊聊Greenplum集群部署
  • 详解Linux下Oracle的静默安装
  • ubuntu安装mac os x主题步骤来咯~下文将为大家演示ubuntu14.04安装mac os x主题教程,安装MAC OS X 主题会帮助你的 Ubuntu 14.04 看起来更像MAC OS X哦~第三步、在Ubuntu 14.04上安装Mac OS X主题现在unity桌面看起来就像Mac了,你已经有了mac的图标,mac的窗口样式,mac的鼠标指针样式。
  • MySQL官方的数据库中间件,有人用么?