重庆深蓝科技网站开发,交换链接的方法,高校网站集群平台子站开发,临沂 网站推广下面我们看看用scrapy模拟登录的基本写法#xff1a;注意#xff1a;我们经常调试代码的时候基本都用chrome浏览器#xff0c;但是我就因为用了谷歌浏览器(它总是登录的时候不提示我用验证码#xff0c;误导我以为登录时不需要验证码#xff0c;其实登录时候必须要验证码的…下面我们看看用scrapy模拟登录的基本写法注意我们经常调试代码的时候基本都用chrome浏览器但是我就因为用了谷歌浏览器(它总是登录的时候不提示我用验证码误导我以为登录时不需要验证码其实登录时候必须要验证码的)这里你可以多试试几个浏览器一定要找个提示你输入验证码的浏览器调试。1、我们登录的时候提示我们输入验证码当验证码弹出之前会有个请求我们打开这个请求很明显type是login验证码无疑了,就算是看请求的因为名你也应该知道这个就是验证码的请求或者打开这个验证码的请求url这。验证码的图片悲惨了这怎么整。别着急。。2、验证码提示我们要点击倒着写的字体这。。。爬虫和反爬虫就是无休止的互相折磨。这明显就是上面那个图片的信息。3、机智的我发现验证码的请求参数里面有三个参数r是一个13位的数字type是登录用的lang很可疑改改它把cn给他改成en。代码如下import jsonimport scrapyimport timefrom PIL import Imageclass 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}typeloginlangen‘.format(t)return [scrapy.Request(urlcaptcha_url, headersself.header, callbackself.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:passcaptcha input(请输入你的验证)return scrapy.FormRequest(url‘https://www.zhihu.com/#signin‘, headersself.header, callbackself.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(urlpost_url, formdatapost_data, headersself.header, callbackself.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(urlurl, headersself.header, dont_filterTrue)else:print(登录失败请检查)