为什么需要登录?是为了我们可以获取到登陆后的页面。我们回顾requests是如何模拟登录的,有两种方式,第一种是直接携带cookies请求页面,第二种是找接口发送Post请求,然后存储Cookies,那么Selenium是如何模拟登录的,同样是找到对应的登陆页面,传入账户和密码等参数,登录之后获取Cookies,然后添加cookies,并请求登录之后的页面。
Scrapy实现登录,也有两种方式,第一种就是直接携带Cookies,第二种是找到发送Post请求的url地址,带上账户和密码等信息,发送请求。
Scrapy模拟登录之携带Cookies
我们可以直接携带Cookies登录,主要应用场景:- 1.Cookies过期时间很长,常见于一些不规范的网站
- 2.能在Cookies过期之前把数据拿到
- 3.配合其他程序使用,比方说使用selenium把登录之后的Cookies获取保存到本地,Scrapy返送请求之前先读取本地的Cookies
我们在使用Scrapy创建爬虫的时候,有个start_url变量,这个是我们开始请求的url地址,那么start_url是谁请求的呢?那么我们可以查看源码,我们定义spider下的start_url默认都是交给start_requests处理的,所以我们如果想在之前做一些事情,比方说加入cookies,headers都可以,可以重写start_requests。
我们通过演示模拟登录蜂窝来说明:# -*- coding: utf-8 -*-
import scrapy
import re
class FwSpider(scrapy.Spider):
name = 'fw'
allowed_domains = ['mafengwo.cn']
#开始的url为我们个人主页
start_urls = ['http://mafengwo.cn/u/52891300.html']
def start_requests(self):
#添加headers
headers={
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,am;q=0.8',
'Connection': 'keep-alive',
'Host': 'www.mafengwo.cn',
'Referer': 'http://www.mafengwo.cn/u/52891300.html',
'Upgrade-Insecure-Requests': 1,
#可以添加UA,或者在settings更换
}
#我们手动登录马蜂窝,找到cookies,cookies格式 通过:分割,等号左边(key):等号右边(value)
cookies="使用谷歌浏览器登录,然后复制cookies到这里"
cookies={i.split('=')[0]:i.split('=')[1] for i in cookies.split('; ')}
yield scrapy.Request(
self.start_urls[0],
cookies=cookies,
headers=headers,
callback=self.parse,
)
def parse(self, response):
print(response.body.decode())
name=re.findall('<div class="MAvaName">(.*?)</div>',response.body.decode(),re.S)[0]
print(name)
上面的代码我们重写了start_requests函数,在最开始请求的url上,我们添加了headers和cookies,这里经过测试,cookies放到headers中,还是成功的获取到我的用户名,按理说不应该成功的,具体可参考:scrapy.Request的参数
如果在输入scrapy crawl 爬虫名字(fw)时,无任何输出,那么就是失败,如果输出的内容用户名为空,呢也是失败,就是访问不了我们的个人页面,没有登录成功。
通常一般的网站是没有反爬测试的,添加cookies就可成功获取到登陆之后的页面,如果遇到一些网站添加cookies仍不能成功,就是做了反爬测试,具体报错就是错过了个人中心的页面,那么我们可以再添加headers参数,其中最为重要的参数就是HOST和Referer,这样应该是可以成功的,目前没有遇到特殊的url。
那么我们是否可以请求包括个人页面,但不仅限于个人页面,当然是可以了。Scrapy的settings有个配置文件COOKIES_ENABLED,默认为False,就是已经启用了cookies,然后再开启COOKIES_DEBUG=TRUE,就可以看到cookie在不同解析函数中是如何传递的。
#COOKIES_ENABLED=False cookie在settings是默认开启的
COOKIES_DEBUG=True #前提是cookie开启,即COOKIES_ENABLES=False
关闭settings文件中的LOG_LEVEL=’WARNING’,如果添加的话。那么我们重新运行爬虫,就可以看到很多Set-Cookie的字段,这些就是cookie的传递过程,不在详细说明。
不仅仅是蜂窝网,我们对任何的网站,想要获取登录后的页面,就可以使用这种方式。
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!