一:携带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)