爬虫--scrapy模拟登录;下载中间件的学习

一:携带cookie登录

   1.1scrapy模拟登录

      为什么需要模拟登录?(获取cookie,能够爬取登录后的页面)

      requests是如何模拟登录的?

        1.直接携带cookies请求页面;2.找接口发送post请求储存cookie

     selenium是如何模拟登录的?

        找到对应的input标签,输入文字点击登录

1.2 scrapy模拟登录方法

        对于scrapy来说,有二个方法模拟登录

          1.直接携带cookie;2.找到发送post请求的url地址,带上信息,发送请求

1.3scrapy模拟登录之携带cookie

        应用场景:

                1.cookie过期时间很长,常见于一些不规范的网站

                2.能在cookie过期之前把所有的数据拿到

                3.配合其他程序使用,比如其使用selenium把登录之前的cookie获取到保存到本地,scrapy发送请求之前先读取本地cookie

二:下载中间件的学习

        2.1使用方法:编写一个Downloader Middlewares和我们编写一个pipeline一样,定义一个类,然后setting中开启

        Downloader Middlewares默认的方法:

        process request(self,request,spider):

               当每个request通过下载中间件时,该方法调用

        process response(self,request,response,spider):

                当下载器完成http请求,传递响应给引擎的时候调用

2.2使用代理的时候方法

        class RandomUserAgent(object):

                def process_request(self,request,spider):

                        useragent = random.choice(USER_AGENTS)

                        requests.headers['User-Agent'] = useragent    添加自定义的UA,给request的header赋值即可

        class ProxyMiddleware(object)

                def process_request(self,request,spider):

                        request.meta["proxy"] = "http://124.115.126.76:808"

        添加代理,需要在request的meta信息中添加proxy字段

        代理的形式为:协议+ip地址+端口

三:介绍和总结

        3.1苏宁图书爬虫:

                1.数据重复怎么办--使用deepcopy  ;为什么会数据重复--后一次循环的时候会改变前一次循环的结果,scrapy item同在被操作,而且使用的item来自同一个大分类

                2.url地址js生成的怎么办---寻找规律;在响应中南回应当前的因为码数和总的页码数

        3.2crawspider :

                如何使用 :1.创建爬虫scrapy genspdie -t crawl 爬虫名  alldow_domain; 2.指定start_url;3.完善rules(元组和Rule);4.完善callback

                crawlspide的使用场景:1.url的规律能够通过正则或者xpath表示;2.最终的页面要有全部的数据的时候使用--如果没有,在callback中自动手的构造请求

                注意点:1.parse函数不能定义;2,继承自Crawlspider

        3.3下载中间件

                process_request---处理请求,添加随机的ua,添加代理,不需要return

                process_response--处理响应,需要return request,response

        3.4模拟登录

                携带cookie登录---scrapy.Request(url,callback,cookies={});不能把cookie放在headers中,无效

                使用FomRquest---scrapy.FromRequest(url,formdata={},callbzck) ;formdata:请求体

                自动寻找form表单中的action的url---scrapy.FormRequest.from_response(response,formdata={},callback)

你可能感兴趣的:(python,爬虫,开发语言)