您的位置:首页 > 汽车 > 时评 > 小程序开发一个要多少钱_一般通过微信号添加的微信好友_网络广告营销的典型案例_千部小黄油资源百度云

小程序开发一个要多少钱_一般通过微信号添加的微信好友_网络广告营销的典型案例_千部小黄油资源百度云

2025/4/3 11:55:08 来源:https://blog.csdn.net/HG0724/article/details/143052645  浏览:    关键词:小程序开发一个要多少钱_一般通过微信号添加的微信好友_网络广告营销的典型案例_千部小黄油资源百度云
小程序开发一个要多少钱_一般通过微信号添加的微信好友_网络广告营销的典型案例_千部小黄油资源百度云

模拟登录功能和发送POST请求

    • 目标
    • 1. 模拟登陆的方法
    • 2. scrapy携带cookies,直接获取需要登陆后的页面
      • 实现:重构scrapy的start_rquests方法 - 携带cookies登陆github ⭐⭐
    • 3. scrapy.Request发送post请求
      • 3.1 发送post请求
        • 3.1.1思路分析

目标

1.应用请求对象cookies参数的使用
2.了解start_requests函数的作用 - 尤其了解如何重构start_requests函数
3.应用构造并发送post请求

1. 模拟登陆的方法

  • 1.1 requests模块是如何实现模拟登陆的?

1.直接携带cookies请求页面
2.找url地址,发送post请求存储cookie

  • 1.2 selenium是如何模拟登陆的?
    1.找到对应的input标签,输入文本点击登陆
  • 1.3 scrapyl的模拟登陆

1.直接携带cookies
2.找url地址,发送post请求存储cookie

2. scrapy携带cookies,直接获取需要登陆后的页面

  • 应用场景

1.cookie过期时间很长,常见于一些不规范的网站
2.能在cookie过期之前把所有的数据拿到
3.配合其他程序使用,比如其使用selenium把登陆之后的cookie获取到保存到本地scrapy发送请求之前 先读取本地cookie

实现:重构scrapy的start_rquests方法 - 携带cookies登陆github ⭐⭐

重构scrapy的start_rquests方法 可能涉及到的场景如下

  • 携带cookies登陆github

如果start_url地址中的url是需要登录后才能访问的uri地址,则需要重写start_request方法并在其中手动添加上cookie

  • Cookies 用于多种目的,包括但不限于:

会话管理:服务器可以使用 cookies 来识别用户的会话。当用户登录网站时,服务器会在用户的浏览器上设置一个 cookie,该 cookie 在用户的浏览器上存储一个唯一的会话标识符。在后续的请求中,浏览器会自动发送这个cookie,服务器可以使用它来识别用户的会话。

个人化设置:网站可以使用 cookies 来存储用户的个人设置,如语言偏好、主题选择等。

追踪用户行为:cookies 可用于追踪用户的浏览行为,这有助于网站分析用户行为,优化用户体验,或用于广告定位。

认证:在某些情况下,cookies 用于存储认证令牌,这些令牌允许用户在一段时间内保持登录状态,而无需重复输入用户名和密码。

  • 模拟github登录
import scrapyclass Git1Spider(scrapy.Spider):name = 'git1'allowed_domains = ['github.com']start_urls = ['https://github.com/haozhenHG']#你的github页面def start_requests(self):url = self.start_urls[0]temp = 'xxxx'  ## 在你的github页面上邮件检查网页源代码 查看cookies   换成你自己的cookie# 解析成 字典  {key : value }的样子cookies = {data.split('=')[0] : data.split('=')[-1] for data in temp.split(';')}yield scrapy.Request(url=url,callback=self.parse,cookies=cookies,)def parse(self, response):# 获取用户名print(response.xpath('/html/body/div[1]/div[4]/main/div[2]/div/div[1]/div/div[2]/div[1]/div[2]/h1/span/text()').extract_first())

在这里插入图片描述

  • 登录后的github页面
    在这里插入图片描述
    注意:

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

3. scrapy.Request发送post请求

我们知道可以通过scrapy.Request(0指定method、body参数来发送post请求;但是通常使用scrapy.FormRequest()来发送post请求

3.1 发送post请求

注意:scrapy…FormRequest0能够发送表单和ajax请求,参考阅读
python使用scrapy发送post请求的坑

3.1.1思路分析

1.找到post的url地址:点击登录按钮进行抓包,然后定位url地址为https:/github.com/session
2.找到请求体的规律:分析post请求的请求体,其中包含的参数均在前一次的响应中
3.是否登录成功:通过请求个人主页,观察是否包含用户名

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

为什么这样获取token值?
CSRF Token(跨站请求伪造令牌)
用途:防止跨站请求伪造攻击。
工作方式:通常在表单中包含一个隐藏的输入字段,或者在 AJAX 请求中作为请求头发送。
变化性:每次用户与服务器交互时,服务器可能会生成一个新的CSRF token

  • 代码
import scrapyclass GitloginSpider(scrapy.Spider):name = 'gitlogin'allowed_domains = ['github.com']start_urls = ['http://github.com/login']def parse(self, response):# 从登陆页面响应中解析出post数据# CSRF  Token 每次和服务器交互都会 生成新的tokentoken = response.xpath('//input[@name="authenticity_token"]/@value').extract_first()# 时间戳是不断变化的额   去网页中获取timestamp = response.xpath('//input[@name="timestamp"]/@value').extract_first()timestamp_secret = response.xpath('//input[@name="timestamp_secret"]/@value').get()print('token : %s '%token,'timestap : %s '%timestamp,'timestamp_secret : %s'%timestamp_secret)post_data = {'commit': 'Sign in','authenticity_token': token,'add_account':'','login': 'xxx','password': 'xxx','webauthn-conditional': 'undefined','javascript-support': 'true','webauthn-support': 'supported','webauthn-iuvpaa-support': 'supported','return_to': "https://github.com/login",'allow_signup':'','client_id':'','integration':'','required_field_4c0d':'','timestamp': timestamp,'timestamp_secret': timestamp_secret,}print(post_data)#  针对登陆url发送post请求yield scrapy.FormRequest(url = 'https://github.com/session',callback = self.after_login,formdata = post_data)def after_login(self,response):yield scrapy.Request('https://github.com/haozhenHG',callback=self.check_login)def check_login(self, response):print(response.xpath('/html/body/div[1]/div[5]/main/div/div/div[1]/div/div/div[1]/div[2]/h1/span/text()').get())
  • 输出结果
    在这里插入图片描述
    在这里插入图片描述

技巧:在settings..py中通过设置COOKIES_DEBUG=TRUE能够在终端看到cookie的传递传递过程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com