scrapy爬虫框架

一:pipeline的介绍

        1.1使用pipeline:从pipeline的字典形式可以看出,pipeline可以有多个,而且确实pipeline能够自定义多个

        1.2为什么需要多个pipeline:1:可能会有多个spider,不同的pipeline处理不同的item的内容 2:一个spider的内容可能要做不同的操作,比如存入不同的数据库中

        注意:pipeline的权重越小优先级越高;pipeline中的process_Item方法名不能修改为其他的名称

二:logging模块的使用

        2.1scrapy项目中:settings中设置LOG_LEVEL='WARNING';settings中设置LOG_FILE='./a.log'(设置日志保存的位置,设置会后端不会显示日志内容);import logging,实例化logger的方式在任何文件夹中使用logger输出内容

        2.2普通项目中:import logging--logging.basicCinfig(...)  #设置日志输出的样式,格式

                                   实例化一个`logger=logging.getLogger(__name__)`

                                    在任何py文件中调用logger即可

三:构造请求和腾讯爬虫

        3.1实现翻页请求  next_page_url=respose.xpath("//a[text()='下一页']/@href").extrct()

                                     while len(next_page_url)>0:

                                             yield scrapy.Request(next_page_url,callback=self.parse)--scrapy.Request能构建一个requests,同时指定提取数据的callback函数

        scrapy.Request知识点:

           scrapy.Request(url,[,callback,method='GET',headers,body,cookies,meta,dont_fiter=False])

          scrapy.Request常用参数为:

                callback:指定传入的url交给哪个解析函数去处理

                meta:实现不同的解析函数中传递数据,meta默认会携带部分信息,比如下载延迟,请求深度等

                dont_filter:让scrpy的去重不会过滤当前url,scrpy默认有去重功能,对需要重复请求的url有重要用途

四:item的介绍和使用

        class MyspiderItem(scrapy.Item):

            name = scrapy.Field()

        总的来说,可以把定义的MyspiderItem理解为一个字典

        为什么scrapy要定义一个字典呢?

                1.在获取到数据的时候,使用不同的Item来存放不同的数据

                2.在把数据交给pipeline的时候,可以通过isinstance(item,MyspiderItem)来判断数据是属于那个Item,进行不同的数据(item)处理

五:scrapy shell的使用

        5.1定义:Scrapy shell是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试xpath表达式

        5.2response.url:当前响应的url地址;response.requests.url:当前响应对应的请求的url地址;response.headers:响应头;response.body:响应体,也就是html代码,默认是byte类型;response.requests.headers:当前响应的请求头

你可能感兴趣的:(scrapy,爬虫,python)