在写爬虫的时候,解决登陆问题往往是比较麻烦的事情。这里介绍一下京东网站的登陆方法。

登陆到京东的首页,我们看到最上方有一个登陆链接,点进去之后是这样: https://passport.jd.com/new/login.aspx

为了方便我们观察传递的参数规律,我们先用自己的账号密码模拟登陆一次,然后使用抓包工具查看。这里使用的是firefox+firebug ,firebug在这篇文章中有讲到。

点击登陆之后我们经过仔细的查看,找到了登陆的这条POST信息:

这里我们可以看到,POST数据的目标地址为: http://passport.jd.com/uc/loginService ,POST参数中需要我们我们自己填写的为:loginname,loginpwd,nloginpwd,其中后面两个是一样的,都是用户的密码。另外三个machineCpu,machineDisk,machineNet都为空。那么还有两个怎么办呢?一个是第一行的无规律的字符,另外一个是uuid,这两个都是根据每次登陆随机生成的内容,要怎么才能找到呢?

我们回到最开始的登陆页面 https://passport.jd.com/new/login.aspx ,查看源代码。直接搜索uuid,能够找到后面的值:

可以直接用BeautifulSoup或者正则表达式提取出来:

uuid = loginSoup.find_all("form")[0].find_all("input")[0]['value']

那么另外一个参数怎么办呢?由于这个参数的Key和Value都是变化的,我们可以先把登陆页面源代码保存下来,然后登陆一次,查看包中的Key的值,再通过这个值在刚刚保存的代码中去搜索,从而知道它的位置:

我们同样能够把它取出来:

clr = loginSoup.find_all("span","clr")[0]
clrName = clr.find_next_siblings("input")[0]['name']
clrValue = clr.find_next_siblings("input")[0]['value']

有了这两个参数,我们就可以尝试着进行登陆了:

import urllib
import urllib2
import cookielib
import re
import socket
from bs4 import BeautifulSoupdef Navigate(url,data={}):           #定义连接函数,有超时重连功能tryTimes = 0while True:if (tryTimes>20):print "多次尝试仍无法链接网络,程序终止"breaktry:if (data=={}):req = urllib2.Request(url)else:req = urllib2.Request(url,urllib.urlencode(data))req = urllib2.urlopen(req).read()tryTimes = tryTimes +1except socket.error:print "连接失败,尝试重新连接"else:breakreturn req   try:cookie = cookielib.CookieJar()cookieProc = urllib2.HTTPCookieProcessor(cookie)
except:raise
else:opener = urllib2.build_opener(cookieProc)opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11')]urllib2.install_opener(opener)url = "https://passport.jd.com/uc/login"
login = func.Navigate(url)
loginSoup = BeautifulSoup(login)
#查找登陆参数中的uuid
uuid = loginSoup.find_all("form")[0].find_all("input")[0]['value']
#print uuid#查找登陆参数中的随机值,class为clr
clr = loginSoup.find_all("span","clr")[0]
clrName = clr.find_next_siblings("input")[0]['name']
clrValue = clr.find_next_siblings("input")[0]['value']
#print clrName,clrValueurl = "http://passport.jd.com/uc/loginService"
#print urlpostData = {
  'loginname':self.user,
  'nloginpwd':self.password,
  'loginpwd':self.password,
  # 'machineNet':'',
  # 'machineCpu':'',
  # 'machineDisk':'', str(clrName):str(clrValue),
  'uuid':uuid,
  'authcode':''
}
passport = Navigate(url,postData)
print passportSoup

运行程序,程序返回:{“success”:”http://www.jd.com”} ,则说明登陆成功。

但还不是这么顺利,因为京东在几次登陆之后就会加上讨厌的验证码,普通登陆的情况下验证码authcode只要为空即可,但如果接口返回的是“请输入验证码”的汉字编码的话,则说明该用户需要验证码才能登陆了。

目前验证码处理仍然是一个比较困难的问题。ocr技术也并不是那么成熟。不过好在京东的验证码图片并不太复杂,不像那种人去看都看不明白的反人类图片。要解决这一问题可以有两种方法:

如果仅仅是个人使用,一般的实验测试等,可以将验证码图片下载下来,通过人工查看并手动输入的方法来完成,这里附上代码处理:

#下载验证码图片:
checkPicUrl = loginSoup.find_all("div","item-ifo")[2].find_all("img")[0]['src2']
req = func.Navigate(checkPicUrl)
checkPic = open("checkPic.jpg","w")
checkPic.write(req)
checkPic.close()
#调用Linux系统的eog(图像查看器)来打开图片文件os.system('eog checkPic.jpg')
checkCode = raw_input("请输入弹出图片中的验证码:")
postData['authcode'] = str(checkCode)

把这段代码放到最后的登陆代码之前即可,这里需要系统有图形界面和图片查看器,并通过程序内置调用Linux的命令来打开验证码图片。

2.没有图形界面,大规模调用的情况。

这种情况如果自己没有验证码识别的系统,可以求助于网上很多第三方接口,厂商名字这里就不介绍了以免有广告之嫌。不过效果还是不错的,价格一般是根据验证码的复杂程度区别。像京东的4字符这种一般是1分钱一条。

自此,京东网站登陆完毕。接下来就可以任意的抓取想要的信息啦。

欢迎转载,请注明出处。

python爬虫-京东登录相关推荐

  1. python 爬虫-京东用户评论数据和用户评分

    python 爬虫-京东用户评论数据和用户评分 在京东页面查找(例如:oppo r15),选择第一个商品点击进入. 点击第一个评论页面: 点击第二个评论页面: 第三个评论页面: 发现第二页和第三页的网 ...

  2. 【Python技能树共建】Python爬虫模拟登录

    Python 爬虫模拟登录 Python 爬虫模拟登录是使用脚本实现自动登录,部分站点需要逆向加密逻辑,更多的站点会采用验证码进行鉴权验证. 本文为大家带来最简单的登录,其核心用到的是 request ...

  3. python爬虫 模拟登录人人网过程解析

    这篇文章主要介绍了python爬虫 模拟登录人人网过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 equests 提供了一个叫做sessio ...

  4. python登录教务系统_强智科技教务系统python爬虫模拟登录分析(湖南)

    强智科技教务系统python爬虫模拟登录分析(湖南) 本文章仅用作于学习 前提:最近期末到来,想第一时间看到新出成绩的,于是就有了爬取学校教务系统自己的成绩并通过Qmsg酱推送到自己QQ上的想法,目前 ...

  5. python爬虫——Cookie登录爬取豆瓣短评和影评及常见问题

    python爬虫--Cookie登录爬取豆瓣短评和影评 常见问题(本文已解决) 具体步骤 一.获取网页源码 短评.影评 二.解析网页源码及爬取评论 1.短评网页解析 ①确定位置 2.短评爬取 ①名称爬 ...

  6. python–爬虫–模拟登录全面介绍和简例–以抓取雅卓app为例

    转载请注明出处:python–爬虫–模拟登录全面介绍和简例–以抓取雅卓app为例 我们在前面的文章中已经学习了如果使用python进行数据抓取. 但我们常常会遇到一种场景,就是想要获取的页面内容或者接 ...

  7. 利用python爬虫自动登录人人网

    刚学python爬虫,使用python爬虫自动登录人人网,在运行代码时一直报错HTTPError /syshome urllib.error可以接收有urllib.request产生的异常.urlli ...

  8. python爬虫登陆教程_(python模拟登陆教程)python爬虫模拟登录是什么意思

    python爬虫模拟登录是什么意思 网站需要登录后才能所需要的信息,此时可以设计爬虫进拟登录,原理是利用浏cookie. 一.浏览器访问服务器的过程: (1)浏览器(客户端)向Web服务器发出一个HT ...

  9. Python爬虫-京东商品到货自动邮件通知

    文章目录 前言 京东爬虫 网页分析 代码实现 效果演示 小结 前言 前阵子疫情严重期间,口罩遭到疯抢,各大电商平台口罩供不应求.本文简述如何通过 Python 爬虫不断监控京东商品是否有货,并在到货时 ...

最新文章

  1. Android -- queryIntentActivities
  2. python del函数_python del函数是什么以及如何使用?
  3. winform 在panel怎么实现锚点定位_高德网络定位之“移动WiFi识别”
  4. 【转】为什么有天线的路由器信号还不如没有天线的路由
  5. python的继承用法_Python 中的继承之Super用法
  6. python程序设计基础教程答案山东联盟答案_Python程序设计基础 (山东联盟) 期末...
  7. 计算机视觉与深度学习 | 像素坐标转相机坐标转世界坐标,求R,t(附C++和Python源代码)
  8. springboot支持三种嵌入式servlet容器:tomcat(默认),jetty,undertow
  9. 开发函数计算的正确姿势——网页截图服务
  10. sqlite的编译、练习
  11. oracle修改seq为order,Oracle 创建和修改sequence
  12. GDAL源码剖析(七)之GDAL RasterIO使用说明
  13. python画素描画_画画了,画画了,几行Python就成一幅素描画
  14. 最大子列和问题(C语言)
  15. AGV 减震结构对比分析
  16. 供应商管理系统SRM
  17. 麒麟下适配mellanox网卡驱动
  18. 为什么要经常更换无轴螺旋输送机叶片?
  19. 计算机与算盘有什么区别
  20. perf part II

热门文章

  1. HQChart使用教程60-新版k线训练使用教程
  2. 制作web3d动态产品展示的优点
  3. GNU Radio: USRP2 and N2x0 Series
  4. 高通平台开发系列讲解(AI篇)高通神经网络处理引擎 SNPE SDK架构
  5. 显示网站统计量和访客地图
  6. Broadcast Recevier回顾及自定义DeviceAdminReceiver模板完善
  7. win7硬盘分区软件_误删数据恢复软件,你应该拥有它!
  8. H5 AUI 使用总结
  9. Markdown实用快捷键
  10. 面试分享:一年经验初探阿里巴巴前端社招