您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:详解使用scrapy进行模拟登陆三种方式

51自学网 2021-10-30 22:55:41
  python
这篇教程详解使用scrapy进行模拟登陆三种方式写得很实用,希望能帮到您。

scrapy有三种方法模拟登陆方式:
- 直接携带cookies
- 找url地址,发送post请求存储cookie
- 找到对应的form表单,自动解析input标签,自动解析post请求的url地址,自动带上数据,自动发送请求

1、携带cookies登陆github

import scrapyimport re class Login1Spider(scrapy.Spider):  name = 'login1'  allowed_domains = ['github.com']  start_urls = ['https://github.com/NoobPythoner'] # 这是一个需要登陆以后才能访问的页面   def start_requests(self): # 重构start_requests方法    # 这个cookies_str是抓包获取的    cookies_str = '...' # 抓包获取    # 将cookies_str转换为cookies_dict    cookies_dict = {i.split('=')[0]:i.split('=')[1] for i in cookies_str.split('; ')}    yield scrapy.Request(      self.start_urls[0],      callback=self.parse,      cookies=cookies_dict    )   def parse(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

 yield scrapy.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

import scrapyimport re class Login3Spider(scrapy.Spider):  name = 'login3'  allowed_domains = ['github.com']  start_urls = ['https://github.com/login']   def parse(self, response):    yield scrapy.FormRequest.from_response(      response, # 传入response对象,自动解析      # 可以通过xpath来定位form表单,当前页只有一个form表单时,将会自动定位      formxpath='//*[@id="login"]/form',       formdata={'login': '****', 'password': '***'},      callback=self.parse_login    )   def parse_login(self,response):    ret = re.findall(r"noobpythoner|NoobPythoner", response.text)    print(ret)

到此这篇关于详解使用scrapy进行模拟登陆三种方式的文章就介绍到这了,更多相关scrapy模拟登陆内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


利用Python如何画一颗心、小人发射爱心
scrapy-splash简单使用详解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。