scrapy打造知乎后花园一: 验证码登录
来源:互联网 发布:游戏编程需要怎么学 编辑:程序博客网 时间:2024/05/21 19:31
总体思路:
1.找到生成验证码图片的网址。
2.显示有验证码的图片,手动输入验证码。
3.发送用户名,密码,验证码等数据到知乎验证服务器。
4.验证是否登录成功。
第一步:网页采集前的分析和找到验证码的网址。
1.使用工具Google Chrome浏览器打开www.zhihu.com,按F12打开调试工具,选择Network。
随便输入用户名和密码,找到phone_num,点Response,看到"r":1表示登录失败,0表示成功。
2.选择Headers,Form Data 可以看到登录提交表单数据,Request Headers可以看到cookie等信息。
3.从Form Data可以看出,验证表单时,除了用户名,密码,还要提交_xsrf。
4.多输几次错误密码,就会要求输入验证码。点Img,选择Preview找到验证码。
5、再选择Headers,就找到了验证码的图片地址:为了方便测试,将lang=cn改为lang=en。r=1500340819993为时间戳。
https://www.zhihu.com/captcha.gif?r=1500340819993&type=login&lang=cn
[root@master ~]# scrapy startproject zhihu
[root@master zhihu]# scrapy genspider -t basic myspider zhihu.com
第二步:代码分析myspider.py。
# -*- coding: utf-8 -*-import scrapyfrom scrapy.http import Request, FormRequestfrom zhihu.items import *import timefrom PIL import Imageimport jsonclass MyspiderSpider(scrapy.Spider): name = 'myspider' allowed_domains = ['zhihu.com'] start_urls = ['https://www.zhihu.com/'] def start_requests(self): t = str(int(time.time() * 1000)) captcha_url = 'https://www.zhihu.com/captcha.gif?r=' + t + '&type=login&lang=en' return [Request(captcha_url, callback=self.parser_captcha)] def parser_captcha(self, response): with open('captcha.jpg', 'wb') as f: f.write(response.body) f.close() im = Image.open('captcha.jpg') im.show() im.close() captcha = raw_input("input the captcha with quotation mark\n>") return Request(url='https://www.zhihu.com/', callback=self.login,meta={'captcha':captcha}) def login(self,response): xsrf = response.xpath('//input[@name="_xsrf"]/@value').extract()[0] print 'xsrf:'+ xsrf print response.meta['captcha'] return [FormRequest('https://www.zhihu.com/login/phone_num', method='POST', formdata = { 'phone_num':'131*******', 'password':'xyz***', '_xsrf':xsrf, 'captcha_type':'en', 'captcha':response.meta['captcha'], }, callback = self.after_login, )] def after_login(self,response): json_file = json.loads(response.text) if json_file['r'] == 0: print('success........登录成功') else: print('登录失败!')
第三步:代码测试。
[root@master zhihu]# scrapy crawl myspider
1.手动输入验证码。要显示验证码,centos7要安装图形界面,还要需要Pillow库来显示图片。
2.打印xsrf,手动输入的验证码hjfx,显示登录成功。如果验证码输入错误,显示登录失败。
现在已经可以登录知乎了,下一篇可以写继续爬了。。。。。。。
- scrapy打造知乎后花园一: 验证码登录
- scrapy打造知乎后花园二 :cookie模拟登陆 验证码 爬取首页内容
- scrapy打造知乎后花园三: 抓取关注用户数据 json异步动态加载
- scrapy 知乎模拟登录
- python爬虫scrapy框架——人工识别知乎登录知乎倒立文字验证码和数字英文验证码
- 知乎账号登录+验证码
- python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)
- scrapy知乎模拟登录和cookie登录
- Python 半自动登录知乎-验证码需要识别
- Python爬虫倒立文字验证码登录知乎
- scrapy验证码登录爬取知乎
- 使用requests和scrapy模拟知乎登录
- 用scrapy 模拟知乎的登录过程
- session或scrapy实现模拟登录知乎
- 【python爬虫03】使用Scrapy框架模拟登录知乎
- 个人知乎 ##功能一-登录注册
- 【scrapy】模拟登陆知乎
- selenium2java通过第三方登录绕过知乎登陆验证码
- vue.js中this.$emit的理解
- 微信小程序之页面数据绑定及页面跳转传参
- 洛谷1618
- ./include/caffe/util/cudnn.hpp:8:34: fatal error: caffe/proto/caffe.pb.h: No such file or director
- webpack.config.js 参数详解
- scrapy打造知乎后花园一: 验证码登录
- 把java项目上传到github上命令使用
- [Python/MangoDb/MangoEngine] 模拟数据库/增/删/改/查
- asp.NET UpdatePanel实现异步局部刷新
- shell传参并将参数传递给sql文件
- bootstrap-datetimepicker 日期选择控件 通用版
- 数据结构之散列表(哈希表)
- iOS知识汇总
- Android开发倒计秒数的正确用法