详解使用scrapy进行模拟登陆三种方式
scrapy有三种方法模拟登陆方式:
-直接携带cookies
-找url地址,发送post请求存储cookie
-找到对应的form表单,自动解析input标签,自动解析post请求的url地址,自动带上数据,自动发送请求
1、携带cookies登陆github
importscrapy
importre
classLogin1Spider(scrapy.Spider):
name='login1'
allowed_domains=['github.com']
start_urls=['https://github.com/NoobPythoner']#这是一个需要登陆以后才能访问的页面
defstart_requests(self):#重构start_requests方法
#这个cookies_str是抓包获取的
cookies_str='...'#抓包获取
#将cookies_str转换为cookies_dict
cookies_dict={i.split('=')[0]:i.split('=')[1]foriincookies_str.split(';')}
yieldscrapy.Request(
self.start_urls[0],
callback=self.parse,
cookies=cookies_dict
)
defparse(self,response):#通过正则表达式匹配用户名来验证是否登陆成功
result_list=re.findall(r'noobpythoner|NoobPythoner',response.body.decode())
print(result_list)
pass
注意:
scrapy中cookie不能够放在headers中,在构造请求的时候有专门的cookies参数,能够接受字典形式的coookie
在setting中设置ROBOTS协议、USER_AGENT
2、使用scrapy.FormRequest()登录
通过scrapy.FormRequest能够发送post请求,同时需要添加fromdata参数作为请求体,以及callback
yieldscrapy.FormRequest(
"https://github.com/session",
formdata={
"authenticity_token":authenticity_token,
"utf8":utf8,
"commit":commit,
"login":"****",
"password":"****"
},
callback=self.parse_login
)
3、使用scrapy.Formrequest.from_response登陆github
importscrapy
importre
classLogin3Spider(scrapy.Spider):
name='login3'
allowed_domains=['github.com']
start_urls=['https://github.com/login']
defparse(self,response):
yieldscrapy.FormRequest.from_response(
response,#传入response对象,自动解析
#可以通过xpath来定位form表单,当前页只有一个form表单时,将会自动定位
formxpath='//*[@id="login"]/form',
formdata={'login':'****','password':'***'},
callback=self.parse_login
)
defparse_login(self,response):
ret=re.findall(r"noobpythoner|NoobPythoner",response.text)
print(ret)
到此这篇关于详解使用scrapy进行模拟登陆三种方式的文章就介绍到这了,更多相关scrapy模拟登陆内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。