热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python56:再一次尝试,再一次出错

2019独角兽企业重金招聘Python工程师标准好了,前面一小节我们对验证码的机制有了了解,同时又对cookies有了更深的认识,前

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

好了,前面一小节我们对验证码的机制有了了解,同时又对COOKIEs有了更深的认识,前面也说了,我们需要先获取COOKIEs得到关于验证码的信息,然后带着这个COOKIEs去post数据,我们再重新把流程整理一下,

  1. 访问登陆界面,使用RE获取验证码的网址

  2. 获取登陆界面的COOKIEs,并保存到一个变量,构造opener

  3. 使用opener自动携带COOKIEs post数据登陆

  4. 打开网站的其他网址,验证是否登陆成功

我们只需要在前面的代码中稍作修改,把处理COOKIEs的部分放到前面来就行了

#!/usr/bin/env python
# -*- coding:UTF-8 -*-
__author__ = "217小月月坑"'''
验证码登陆try-2
'''
import urllib
import urllib2
import re
import COOKIElib# 获取登陆界面的源码并将验证码图片的网址抽取出来
login_url = 'http://id.ifeng.com/allsite/login'
headers = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0',}pattern = re.compile(r'request = urllib2.Request(login_url,headers=headers)
contents = urllib2.urlopen(request).read()items = re.findall(pattern,contents)
for item in items:print item
# COOKIEs处理的部分,获取登陆界面的COOKIEs并保存
COOKIEJar = COOKIElib.COOKIEJar()
handler = urllib2.HTTPCOOKIEProcessor(COOKIEJar)
opener = urllib2.build_opener(handler)
# 提示用户输入验证码
captcha = raw_input("请输入验证码:")
# 构造post数据
data = {'u':   'xxxxxxxxxxx@qq.com','k':   'xxxxxxxxxxxxxxxx','auth':    captcha,'auto':    'on','comfrom':'','type':    '2',}
post_data = urllib.urlencode(data)# 将post 信息发送到接受信息的网址
response = opener.open("https://id.ifeng.com/api/sitelogin",post_data)
print response.read()# 打开凤凰网的博客界面
response2 = opener.open("http://blog.ifeng.com/16441366.html")
print response2.read()

好了,来看看输出

211509_1h1G_2429887.png

......又出错了,好烦恼

在盯着程序看了好久之后,我突然意识到一个问题,这也就是我们程序错误的原因

再来回顾一下程序的流程,我们先打开登陆界面然后获取验证码的网址并点击该网址得到验证码输入,这里存在一个很大的问题,我们第一次读取登陆界面的源码时,我们其实就已经有了一个验证码,我们获取验证码的地址之后又再一次点击这个网址查看验证码,相当于是刷新了这个验证码,这就意味着,我们前后一共得到了两个验证码,我们的COOKIEs是在第一个验证码的时候获取的,而我们点击看到的是第二个验证码,输入的也是第二个验证码,这样,COOKIEs和验证码是对应不上的

那么,我们应该怎么办呢?

为了保证COOKIEs和验证码信息的一致性,我们需要跳过前面获取验证码的步骤,我们不是已经有网址了吗?而且这个网址也是可以不断刷新这个验证码的,那我们就直接向验证码的网址发送请求,获取COOKIEs,并同时将验证码下载到本地保存,这样,COOKIEs就能跟获取的验证码保持一致了


转:https://my.oschina.net/u/2429887/blog/543549



推荐阅读
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 本文深入解析了Django框架中的MVT(Model-View-Template)设计模式,详细阐述了其工作原理和应用流程。通过分析URL模式、视图、模型和模板等关键组件,读者将全面理解Django应用程序的架构体系,掌握如何高效地构建和管理Web应用。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 在 Ubuntu 系统中安装 Python pip 时遇到错误的解决方案 ... [详细]
  • 本文详细解析了 Python 2.x 版本中 `urllib` 模块的核心功能与应用实例,重点介绍了 `urlopen()` 和 `urlretrieve()` 方法的使用技巧。其中,`urlopen()` 方法用于发送网络请求并获取响应内容,而 `urlretrieve()` 方法则用于下载文件并保存到本地。文章通过具体示例展示了这两个方法在实际开发中的应用场景,帮助读者更好地理解和掌握 `urllib` 模块的使用。 ... [详细]
  • 深入解析HTTP网络请求API:从基础到进阶的全面指南
    本文全面解析了HTTP网络请求API,从基础到进阶,详细介绍了Android平台上的两种原生API——HttpUrlConnection和HttpClient。这两种API通过对底层Socket的封装,提供了高效、灵活的网络通信功能。文章不仅涵盖了基本的使用方法,还深入探讨了性能优化、错误处理和安全性等方面的高级主题,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • Python作为当今IT领域中最受欢迎且高效的语言之一,其框架能够显著加速Web应用程序的开发过程。本文推荐并对比了十大顶级Python Web开发框架,其中CubicWeb以其卓越的代码重用性和模块化设计脱颖而出,为开发者提供了强大的支持。 ... [详细]
  • 浅析PHP中$_SERVER[
    在PHP后端开发中,`$_SERVER["HTTP_REFERER"]` 是一个非常有用的超级全局变量,它可以获取用户访问当前页面之前的URL。本文将详细介绍该变量的使用方法及其在不同场景下的应用,如页面跳转跟踪、安全验证和用户行为分析等。通过实例解析,帮助开发者更好地理解和利用这一功能。 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • 本文介绍了2017年12月12306图形验证码智能识别技术的分析与应用。研究中使用了高精度的图像识别模型,其准确率超过95%。实验数据包括12306查询验证码识别客户端及相应的测试样本图片。具体操作步骤为:首先解压客户端文件,然后按照说明进行配置和测试。该技术的应用显著提升了用户购票体验,同时为图像识别技术在实际场景中的应用提供了有价值的参考。 ... [详细]
  • 深入浅出解析HTTP协议的核心功能与应用
    前言——协议是指预先设定的通信规则,确保双方能够按照既定标准进行有效沟通,从而实现准确的信息交换。例如,驯兽师通过拍手使动物坐下,这实际上是一种预设的协议。本文将详细探讨HTTP协议的核心功能及其广泛应用,解析其在现代网络通信中的重要作用。 ... [详细]
  • 浏览器与服务器在网站访问过程中的数据交互分析
    本文分析了浏览器与服务器在网站访问过程中基于HTTP协议的数据交互机制。HTTP协议具有轻量级和高效通信的特点,主要通过GET、HEAD和POST方法进行数据传输。其“请求-响应”模式确保了数据交互的有序性和可靠性,同时支持多种数据格式和内容类型,为现代Web应用提供了坚实的基础。 ... [详细]
  • 本文将详细介绍如何利用JMeter高效执行API接口测试,涵盖JMeter的基础介绍、安装方法、中文环境配置、主要元件及其作用域和执行顺序等内容,并分享一系列实用的测试技巧,帮助读者全面掌握JMeter接口测试的全过程。 ... [详细]
author-avatar
福田商务汽车-日照方傲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有