使用scrapy进行模拟登陆三种方式(转)

 

2018年06月06日 00:02:23 master_ning 阅读数:2117 标签: scrapy模拟dengl 更多

个人分类: 爬虫srcpay

scrapy有三种方法模拟登陆方式:

 
  1. - 直接携带cookies

  2. - 找url地址,发送post请求存储cookie

  3. - 找到对应的form表单,自动解析input标签,自动解析post请求的url地址,自动带上数据,自动发送请求

1、携带cookies登陆github

 
  1. import scrapy

  2. import re

  3.  
  4. class Login1Spider(scrapy.Spider):

  5. name = 'login1'

  6. allowed_domains = ['github.com']

  7. start_urls = ['https://github.com/NoobPythoner'] # 这是一个需要登陆以后才能访问的页面

  8.  
  9. def start_requests(self): # 重构start_requests方法

  10. # 这个cookies_str是抓包获取的

  11. cookies_str = '...' # 抓包获取

  12. # 将cookies_str转换为cookies_dict

  13. cookies_dict = {i.split('=')[0]:i.split('=')[1] for i in cookies_str.split('; ')}

  14. yield scrapy.Request(

  15. self.start_urls[0],

  16. callback=self.parse,

  17. cookies=cookies_dict

  18. )

  19.  
  20. def parse(self, response): # 通过正则表达式匹配用户名来验证是否登陆成功

  21. result_list = re.findall(r'noobpythoner|NoobPythoner', response.body.decode())

  22. print(result_list)

  23. pass

 

注意:

  • scrapy中cookie不能够放在headers中,在构造请求的时候有专门的cookies参数,能够接受字典形式的coookie
  • 在setting中设置ROBOTS协议、USER_AGENT

 

2、使用scrapy.FormRequest()登录

通过scrapy.FormRequest能够发送post请求,同时需要添加fromdata参数作为请求体,以及callback

 
  1. yield scrapy.FormRequest(

  2. "https://github.com/session",

  3. formdata={

  4. "authenticity_token":authenticity_token,

  5. "utf8":utf8,

  6. "commit":commit,

  7. "login":"****",

  8. "password":"****"

  9. },

  10. callback=self.parse_login

  11. )

3、使用scrapy.Formrequest.from_response登陆github

 
  1. import scrapy

  2. import re

  3.  
  4. class Login3Spider(scrapy.Spider):

  5. name = 'login3'

  6. allowed_domains = ['github.com']

  7. start_urls = ['https://github.com/login']

  8.  
  9. def parse(self, response):

  10. yield scrapy.FormRequest.from_response(

  11. response, # 传入response对象,自动解析

  12. # 可以通过xpath来定位form表单,当前页只有一个form表单时,将会自动定位

  13. formxpath='//*[@id="login"]/form',

  14. formdata={'login': '****', 'password': '***'},

  15. callback=self.parse_login

  16. )

  17.  
  18. def parse_login(self,response):

  19. ret = re.findall(r"noobpythoner|NoobPythoner", response.text)

  20. print(ret)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值