在爬取网页信息时有时会遇到有账号信息输入的网页,需要填入账号密码后跳转才能进行爬取信息,但我们常用的http协议是无状态协议,它的问题在于即便在登陆面板登陆状态成功,在你访问个人主页时是不会跳转的因为服务器默认你是新的请求而没有登录状态。
将html页面中使用审查元素将本页面的数据包解析后,在headers中的cookie值封装到python中的header 字典中并同以往发起请求即可。但是这种方式是手动cookie链接,一般情况下并不采取这种方式进行解析。原因是手动获取的cookie在网页中有时是变化的,所以并不是通用方法。
自动处理:
在模拟登陆中 服务器会创建一个cookie
Session 会话对象:
作用
进行请求发送
如果请求中产生了cookie,则该cookie会被自动存储到session对象中
创建session对象 a=requests.Session()
1.使用session对象进行模拟登陆post请求i的发送session.post
2.Session对象对个人主页get请求进行发送session.get
代理 :
在一般的网页设计中,大型网站会设计一个反爬机制,最简单的设计思路就是根据爬虫本身就携带ip的原理,当某一固定IP的请求在一定时间内超过请求次数的阈值就会进行开启措施。
–使用代理服务器 (ip伪装) 在客户端向网址发送请求时,使用代理服务器中转这样就将我们的IP伪装。
作用:
-1.可以访问一些本身IP不能访问的站点
3.可以隐藏真实IP免受攻击
在requests请求中加入一个参数proxies字典类型,协议类型为键 ip为值
代理IP的匿名度:
透明:服务器知道该次请求使用了代理,也知道真实IP
匿名:知道使用了代理不知道真实ip
高匿:均不知道
注:实际效果仅测试过一次,但效果与没有参数没太大区别,所以如果在实际应用中使用并未达到目的还是使用time。Sleep进行爬取,虽然爬取时间长但一般情况下数据是不会丢失
可能是因为没花钱原因,具体等待验证
异步爬虫:
平时使用的爬取方式是每个网页依次进行爬取,只有第一个完成后才会进行下一个
所以在请求函数调用时造成了阻塞
多线程(多进程)一般不建议因为当进程多时就会导致程序运行崩溃
好处:可以为相关阻塞单独开启线程,阻塞操作可以异步进行
缺点:无法无限制开启多线程或多进程
线程池,进程池(适当使用):
处理阻塞或者耗时的操作
好处:
我们可以降低对系统对进程或线程创建的销毁频率,从而很好的降低系统开销
弊端;池中进程或线程的数量有限
From multiprocessing.dummy import Pool 导入线程池
实例化线程池对象
pool=Pool(x)为阻塞操作数量
pool.map()第一个传入会发生阻塞的方法或函数,第二个是一个请求的列表对象,主要意思为map方法将列表对象中每个元素通过阻塞函数进行处理
Map的返回值是函数的返回值{一般为列表}
会将原本的时间减少,当线程对象过多时效果便不在明显
在结束时使用pool.close()和pool.join()关闭进程池