文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

scrapy模拟登录代码

2023-06-06 11:29

关注

本文章向大家介绍scrapy模拟登录代码,主要包括{**}的使用实例,应用技巧,基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在Scrapy中,模拟登陆网站一般有如下两种实现方式:

           (1) 请求时携带Cookies

           (2) 发送Post请求获取Cookies

请求时携带Cookies

对于一些Cookies过期时间很长的不规范网站,如果我们能够在Cookies过期之前爬取到所有我们想要的数据,可以考虑在请求时直接将Cookies信息带上来模拟用户登录。

以下是模拟登录Github的示例代码:

# -*- coding: utf-8 -*-import scrapyimport re class TmallLoginSpider(scrapy.Spider):  name = 'github_login3'  allowed_domains = ['github.com']  start_urls = ['https://github.com/']   def start_requests(self): # 请求时携带Cookies    cookies = '_ga=GA1.2.363045452.1554860671; tz=Asia%2FShanghai; _octo=GH1.1.1405577398.1554860677; _device_id=ee3ff12512668a1f9dc6fb33e388ea20; ignored_unsupported_browser_notice=false; has_recent_activity=1; user_session=5oxrsfsZCor1iJFCgRXXyeAXd8hcmzEUGh70-xHWLjQkT62Q; __Host-user_session_same_site=5oxrsfsZCor1iJFCgRXXyeAXd8hcmzEUGh70-xHWLjQkT62Q; logged_in=yes; dotcom_user=pengjunlee; _gat=1'    cookies = {i.split('=')[0]: i.split('=')[1] for i in cookies.split('; ')}    yield scrapy.Request(self.start_urls[0], cookies=cookies)      def parse(self, response): # 验证是否请求成功    print(re.findall('Learn Git and GitHub without any code!',response.body.decode()))

执行爬虫后,后台部分日志截图如下:

scrapy模拟登录代码

发送Post请求模拟登录

Scrapy还提供了两种通过发送Post请求来获取Cookies的方法。

scrapy.FormRequest()

使用scrapy.FormRequest()发送Post请求实现模拟登陆,需要人为找出登录请求的地址以及构造出登录时所需的请求数据。

使用scrapy.FormRequest()模拟登录Github的示例代码: 

# -*- coding: utf-8 -*-import scrapyimport re class GithubLoginSpider(scrapy.Spider):  name = 'github_login'  allowed_domains = ['github.com']  start_urls = ['https://github.com/login']   def parse(self, response): # 发送Post请求获取Cookies    authenticity_token = response.xpath('//input[@name="authenticity_token"]/@value').extract_first()    utf8 = response.xpath('//input[@name="utf8"]/@value').extract_first()    commit = response.xpath('//input[@name="commit"]/@value').extract_first()    form_data = {      'login': 'pengjunlee@163.com',      'password': '123456',      'webauthn-support': 'supported',      'authenticity_token': authenticity_token,      'utf8': utf8,      'commit': commit}    yield scrapy.FormRequest("https://github.com/session", formdata=form_data, callback=self.after_login)   def after_login(self, response): # 验证是否请求成功    print(re.findall('Learn Git and GitHub without any code!', response.body.decode()))

从后台日志不难看出,Scrapy 在请求完 https://github.com/session 后,自动帮我们重定向到了Github首页。

scrapy模拟登录代码

scrapy.FormRequest.from_response()

scrapy.FormRequest.from_response()使用起来比 scrapy.FormRequest()更加简单方便,我们通常只需要提供用户相关信息(账户和密码)即可,scrapy.FormRequest.from_response()将通过模拟点击为我们填充好其他的表单字段并提交表单。

使用scrapy.FormRequest.from_response()模拟登录Github的示例代码: 

# -*- coding: utf-8 -*-import scrapyimport re class GithubLogin2Spider(scrapy.Spider):  name = 'github_login2'  allowed_domains = ['github.com']  start_urls = ['https://github.com/login']   def parse(self, response): # 发送Post请求获取Cookies    form_data = {      'login': 'pengjunlee@163.com',      'password': '123456'    }    yield scrapy.FormRequest.from_response(response,formdata=form_data,callback=self.after_login)   def after_login(self,response): # 验证是否请求成功    print(re.findall('Learn Git and GitHub without any code!',response.body.decode()))

scrapy.FormRequest.from_response()方法还可以传入其他参数来帮我们更加精确的指定表单元素:

'''response (Response object) – 包含表单HTML的响应,将用来对表单的字段进行预填充formname (string) – 如果设置了该值,name 等于该值的表单将被使用formid (string) – 如果设置了该值,id 等于该值的表单将被使用formxpath (string) – 如果设置了该值,匹配该 xpath 的第一个表单将被使用formcss (string) – 如果设置了该值,匹配该 css选择器的第一个表单将被使用formnumber (integer) – 索引值等于该值的表单将被使用,默认第一个(索引值为 0 )formdata (dict) – 传入的表单数据,将覆盖form 元素中已经存在的值clickdata (dict) – 用于查找可点击控件的属性值dont_click (boolean) – 如果设置为 True,将不点击任何元素,直接提交表单数据'''

以上就是小编为大家带来的scrapy模拟登录代码的全部内容了,希望大家多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯