python全系列之爬虫scrapy_python爬虫scrapy之登录知乎
下面我们看看用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之登录知乎相关推荐
- python 全栈开发,Day137(爬虫系列之第4章-scrapy框架)
python 全栈开发,Day137(爬虫系列之第4章-scrapy框架) 一.scrapy框架简介 1. 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所 ...
- python 全栈开发,Day136(爬虫系列之第3章-Selenium模块)
python 全栈开发,Day136(爬虫系列之第3章-Selenium模块) 一.Selenium 简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直 ...
- 网易图灵学院python公开课_图灵学院 Python全系列教程全栈工程师 python视频教程下载...
大家怎么说? 老师很好,我认为,若想学好python,应该多练.多想.多看.学习资料不能仅限于老师给定的这些内容,这些毕竟是入门资料 老师讲的真不错,对于我们这种小白来说 也比较容易懂,虽然有些时候自 ...
- 免费python全套视频教学-有哪些优质的Python全系列视频教程推荐,免费的收费的都可以?...
为大家推荐两本适合小白的python书籍,希望能对你有所帮助. <python编程从入门到实践> /> 本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两 ...
- python3爬虫知乎_Python3 爬虫实例(四) -- 登录知乎
序 有些网站需要用户登录,利用python实现知乎网站的模拟登录.用Cookies记录登录信息, 然后就可以抓取登录之后才能看到的信息. 知乎登录首页 浏览器行为">第一.使用Fidd ...
- python 全栈开发,Day135(爬虫系列之第2章-BS和Xpath模块)
一.BeautifulSoup 1. 简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: ''' Beautiful Soup提供一些简单 ...
- java mongodb 返回所有field_Python爬虫框架:scrapy爬取知乎关注用户存入mongodb
环境需求 基础环境沿用之前的环境,只是增加了MongoDB(非关系型数据库)和PyMongo(Python 的 MongoDB 连接库),默认我认为大家都已经安装好并启动 了MongoDB 服务. 测 ...
- 含泪将花了两万的Python全系列,120G视频+课件+源码,现在免费交公粮,分享给大家
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是 ...
- scrapy mysql 模拟登录知乎_详细的Python Scrapy模拟登录知乎
之前爬取携程和51job都是免登陆就能爬取数据的,但是今天爬取知乎的时候就需要登录后才能爬到数据,那我们只能进行模拟登录了. 知乎登录分为邮箱登录和手机登录两种方式,通过浏览器的开发者工具查看,我们通 ...
最新文章
- SAP EWM中仓库任务WT创建的函数
- 怎么用python找因子_在python中有大量因子
- 《大道至简》第四章内容总结
- 无法加载具有重复项目项的项目: pathstroke.cpp 作为 ClCompile 且作为 None 项类型包括在其中。
- learn python app v3_App Store 上的“Learn Python and Scratch”
- 【theano-windows】学习笔记九——softmax手写数字分类
- 编写数学公式的好工具
- java的foeachr循环_for循环和Dowhile循环的应用
- 开发测试服务器配置信息,node服务端中台实现及开发测试生产环境配置
- c++ vector 初始化_什么?还不懂c++vector的用法,你凭什么勇气来的!
- Install Python 3.6 on Ubuntu 16.04, from source
- 美团买菜:采购量提升至平时3-4倍 提供无接触配送服务
- SAP License:ERP系统和OA系统的区别?
- Python3使用SMTP协议发送电子邮件
- bitcoin简析一
- Windows配置域名
- 2021年我与我家公主的五一小长假---游记
- 计算机物联网知识,什么是物联网,关于物联网的小知识
- 厉害,竟然把VSCode玩成了IDEA的效果,有点哇塞
- R语言自学笔记-----数据转换
热门文章
- Leetcode--923. 三数之和的多种可能
- linux编写复制脚本程,常用的Shell脚本
- vscode怎么安装python包_vscode如何安装python
- android 时间控件使用,android 时间控件的使用
- Shell—grep、sed、awk
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨寻找用户推荐人【难度简单】
- csplit 分割文件
- android主要文件的作用是什么,androidmanifest.xml文件的作用是什么
- php守护进程内存溢出,$serv-close($fd); 服务端主动断开客户端有问题!
- 创新 - 王屋村的魔方们