Scrapy模拟登录赶集网的实现代码


Posted in Python onJuly 07, 2020

1.打开赶集网登录界面,先模拟登录并抓包,获得post请求的request参数

Scrapy模拟登录赶集网的实现代码

2. 我们只需构造出上面的参数传入formdata即可

参数分析:

setcookie:为自动登录所传的值,不勾选时默认为0。

__hash__值的分析:只需要查看response网页源代码即可 ,然后用正则表达式提取。

3.代码实现

1.workon到自己的虚拟环境 cmd切换到项目目录,输入scrapy startproject ganjiwangdenglu,然后就可以用pycharm打开该目录啦。

2.在pycharm terminal中输入scrapy ganji ganjicom 创建地址,如下为项目目录

Scrapy模拟登录赶集网的实现代码

3. 代码详情

import scrapy
import re

class GanjiSpider(scrapy.Spider):
  name = 'ganji'
  allowed_domains = ['ganji.com']
  start_urls = ['https://passport.ganji.com/login.php']

  def parse(self, response):
    hash_code = re.search(r'"__hash__":"(.+)"}', response.text).group(1) # 正则获取哈希
    img_url = 'https://passport.ganji.com/ajax.php?dir=captcha&module=login_captcha' # 验证码url
    yield scrapy.Request(img_url, callback=self.do_formdata, meta={'hash_code': hash_code}) # 发送获取验证码请求并保存验证码到本地

  def do_formdata(self, response):
    with open('yzm.jpg', 'wb') as f:
      f.write(response.body)
      # 验证码三种方案:1,保存下来手动输入,2,云打码,3 tesseract模块,在这里我们手动输入
    code = input('请输入验证码:')
    # 创建表单
    formdata = {
      'username': 'your_username',
      'password': 'your_password',
      'setcookie': '14',
      'checkCode': code,
      'next': '',
      'source': 'passport',
      '__hash__': response.request.meta['hash_code'] # meta是在respose.request中
    }
    login_url = "https://passport.ganji.com/login.php"
    yield scrapy.FormRequest(url=login_url, formdata=formdata, callback=self.after_login) # 发送登录请求

  def after_login(self, response):
    print(response.text)

4.终端输入scrapy carwl ganji 即可大功告成 。

返回来的json字符串解析如下:

Scrapy模拟登录赶集网的实现代码

注:setting中的设置不在赘述。

总结

到此这篇关于Scrapy模拟登录赶集网的文章就介绍到这了,更多相关Scrapy登录赶集网内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
django中的setting最佳配置小结
Nov 21 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
pandas series序列转化为星期几的实例
Apr 11 Python
django的ORM操作 增加和查询
Jul 26 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
Python3监控疫情的完整代码
Feb 20 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
python主要用于哪些方向
Jul 05 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 #Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 #Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 #Python
Django REST Swagger实现指定api参数
Jul 07 #Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 #Python
python db类用法说明
Jul 07 #Python
python文件编写好后如何实践
Jul 07 #Python
You might like
动态新闻发布的实现及其技巧
2006/10/09 PHP
PHP 危险函数解释 分析
2009/04/22 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
django API 中接口的互相调用实例
2020/04/01 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
详解python对象之间的交互
2020/09/29 Python
大学生实习思想汇报
2014/01/12 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
python实现简易名片管理系统
2021/04/11 Python
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android