下面我们看看用scrapy模拟登录的基本写法:

注意:我们经常调试代码的时候基本都用chrome浏览器,但是我就因为用了谷歌浏览器(它总是登录的时候不提示我用验证码,误导我以为登录时不需要验证码,其实登录时候必须要验证码的),这里你可以多试试几个浏览器,一定要找个提示你输入验证码的浏览器调试。

1、我们登录的时候,提示我们输入验证码,当验证码弹出之前会有个请求,我们打开这个请求,很明显,type是login,验证码无疑了,就算是看请求的因为名,你也应该知道这个就是验证码的请求,或者打开这个验证码的请求url,这。

验证码的图片,悲惨了,这怎么整。别着急。。

2、验证码提示我们要点击倒着写的字体,这。。。,爬虫和反爬虫就是无休止的互相折磨。这明显就是上面那个图片的信息。

3、机智的我,发现验证码的请求参数里面有三个参数,r是一个13位的数字,type是登录用的,lang很可疑,改改它,把cn给他改成en。

代码如下:

import json

import scrapy

import time

from PIL import Image

class ZhihuloginSpider(scrapy.Spider):

name = ‘zhihu_login‘

allowed_domains = [‘zhihu.com‘]

start_urls = [‘https://www.zhihu.com/‘]

header = {

‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,‘

‘ like Gecko) Chrome/62.0.3202.94 Safari/537.36‘,

}

def parse(self, response):

#主页爬取的具体内容

print(response.text)

def start_requests(self):

‘‘‘

1、首先构造并抓取登录需要提交的验证码

:return:

‘‘‘

t = str(int(time.time() * 1000))

captcha_url = ‘https://www.zhihu.com/captcha.gif?r={0}&type=login&lang=en‘.format(t)

return [scrapy.Request(url=captcha_url, headers=self.header, callback=self.parser_captcha)]

def parser_captcha(self, response):

‘‘‘

1、根据start_requests方法返回的验证码,将它存入本地

2、打开下载下来的验证码

3、这里是需要手动输入的,这里可以接入打码平台

:param response:

:return:

‘‘‘

with open(‘captcha.jpg‘, ‘wb‘) as f:

f.write(response.body)

f.close()

try:

im = Image.open(‘captcha.jpg‘)

im.show()

im.close()

except:

pass

captcha = input("请输入你的验证>")

return scrapy.FormRequest(url=‘https://www.zhihu.com/#signin‘, headers=self.header, callback=self.login, meta={

‘captcha‘: captcha

})

def login(self, response):

xsrf = response.xpath("//input[@name=‘_xsrf‘]/@value").extract_first()

if xsrf is None:

return ‘‘

post_url = ‘https://www.zhihu.com/login/phone_num‘

post_data = {

"_xsrf": xsrf,

"phone_num": ‘你的账户名称‘,

"password": ‘你的账户密码‘,

"captcha": response.meta[‘captcha‘]

}

return [scrapy.FormRequest(url=post_url, formdata=post_data, headers=self.header, callback=self.check_login)]

# 验证返回是否成功

def check_login(self, response):

js = json.loads(response.text)

print(js)

if ‘msg‘ in js and js[‘msg‘] == ‘登录成功‘:

for url in self.start_urls:

print(url)

yield scrapy.Request(url=url, headers=self.header, dont_filter=True)

else:

print("登录失败,请检查!!!")

python全系列之爬虫scrapy_python爬虫scrapy之登录知乎相关推荐

  1. python 全栈开发,Day137(爬虫系列之第4章-scrapy框架)

    python 全栈开发,Day137(爬虫系列之第4章-scrapy框架) 一.scrapy框架简介 1. 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所 ...

  2. python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)

    python 全栈开发,Day136(爬虫系列之第3章-Selenium模块) 一.Selenium 简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直 ...

  3. 网易图灵学院python公开课_图灵学院 Python全系列教程全栈工程师 python视频教程下载...

    大家怎么说? 老师很好,我认为,若想学好python,应该多练.多想.多看.学习资料不能仅限于老师给定的这些内容,这些毕竟是入门资料 老师讲的真不错,对于我们这种小白来说 也比较容易懂,虽然有些时候自 ...

  4. 免费python全套视频教学-有哪些优质的Python全系列视频教程推荐,免费的收费的都可以?...

    为大家推荐两本适合小白的python书籍,希望能对你有所帮助. <python编程从入门到实践> /> 本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两 ...

  5. python3爬虫知乎_Python3 爬虫实例(四) -- 登录知乎

    序 有些网站需要用户登录,利用python实现知乎网站的模拟登录.用Cookies记录登录信息, 然后就可以抓取登录之后才能看到的信息. 知乎登录首页 浏览器行为">第一.使用Fidd ...

  6. python 全栈开发,Day135(爬虫系列之第2章-BS和Xpath模块)

    一.BeautifulSoup 1. 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: ''' Beautiful Soup提供一些简单 ...

  7. java mongodb 返回所有field_Python爬虫框架:scrapy爬取知乎关注用户存入mongodb

    环境需求 基础环境沿用之前的环境,只是增加了MongoDB(非关系型数据库)和PyMongo(Python 的 MongoDB 连接库),默认我认为大家都已经安装好并启动 了MongoDB 服务. 测 ...

  8. 含泪将花了两万的Python全系列,120G视频+课件+源码,现在免费交公粮,分享给大家

    做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是 ...

  9. scrapy mysql 模拟登录知乎_详细的Python Scrapy模拟登录知乎

    之前爬取携程和51job都是免登陆就能爬取数据的,但是今天爬取知乎的时候就需要登录后才能爬到数据,那我们只能进行模拟登录了. 知乎登录分为邮箱登录和手机登录两种方式,通过浏览器的开发者工具查看,我们通 ...

最新文章

  1. SAP EWM中仓库任务WT创建的函数
  2. 怎么用python找因子_在python中有大量因子
  3. 《大道至简》第四章内容总结
  4. 无法加载具有重复项目项的项目: pathstroke.cpp 作为 ClCompile 且作为 None 项类型包括在其中。
  5. learn python app v3_‎App Store 上的“Learn Python and Scratch”
  6. 【theano-windows】学习笔记九——softmax手写数字分类
  7. 编写数学公式的好工具
  8. java的foeachr循环_for循环和Dowhile循环的应用
  9. 开发测试服务器配置信息,node服务端中台实现及开发测试生产环境配置
  10. c++ vector 初始化_什么?还不懂c++vector的用法,你凭什么勇气来的!
  11. Install Python 3.6 on Ubuntu 16.04, from source
  12. 美团买菜:采购量提升至平时3-4倍 提供无接触配送服务
  13. SAP License:ERP系统和OA系统的区别?
  14. Python3使用SMTP协议发送电子邮件
  15. bitcoin简析一
  16. Windows配置域名
  17. 2021年我与我家公主的五一小长假---游记
  18. 计算机物联网知识,什么是物联网,关于物联网的小知识
  19. 厉害,竟然把VSCode玩成了IDEA的效果,有点哇塞
  20. R语言自学笔记-----数据转换

热门文章

  1. Leetcode--923. 三数之和的多种可能
  2. linux编写复制脚本程,常用的Shell脚本
  3. vscode怎么安装python包_vscode如何安装python
  4. android 时间控件使用,android 时间控件的使用
  5. Shell—grep、sed、awk
  6. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨寻找用户推荐人【难度简单】
  7. csplit 分割文件
  8. android主要文件的作用是什么,androidmanifest.xml文件的作用是什么
  9. php守护进程内存溢出,$serv-close($fd); 服务端主动断开客户端有问题!
  10. 创新 - 王屋村的魔方们