python模拟登录淘宝直通车_Python实现的淘宝直通车数据抓取(1)

最近帮一个朋友做一个抓取淘宝直通车数据的小项目,感觉ython比较适合写爬虫程序,决定使用Python来做程序。

首先是登陆程序,因为淘宝的登陆校验很复杂,所以不能直接使用命令行的形式输入账号密码。查阅资料后,发现可以使用Selenium的自动测试框架,决定用这个框架实现登陆。

首先下载一个纯净版的firefox浏览器,放到主目录下,然后用python打开浏览器:

def openbrowser_login():

binary=FirefoxBinary(os.getcwd()+'/Firefox/Firefox.exe')

profile=FirefoxProfile()

profile.set_preference("browser.cache.disk.enable",False)

profile.set_preference("browser.cache.offline.enable",False)

driver=webdriver.Firefox(firefox_binary=binary,firefox_profile=profile)

driver.get('http://zhitongche.taobao.com/')

while(True):

if(len(driver.window_handles)>1):

print('检测到页面跳转!')

driver.switch_to.window(driver.window_handles[1]);

time.sleep(3)

driver.get(driver.current_url)

time.sleep(5)

break;

else:

time.sleep(2)

cookie = [item["name"] + "=" + item["value"] for item in driver.get_cookies()]

cookiestr=';'.join(item for item in cookie)

try:

driver.quit()

except Exception as e:

pass

return cookiestr

实现的方式就是先去文件目录下找到firefox的启动文件,然后使用浏览器打开淘宝直通车的登陆页,程序每隔两秒检测一次页面,如果发现新开了额外的标签,就认为是登录成功,这时把页面的cookie保存下来并返回。打开浏览器时同时设置了一些属性,profile是浏览器属性设置文件,这里将浏览器缓存功能关闭。

下面是实现检查登陆的函数:

def check_login(cookiestr):

print('开始登陆验证!')

url='https://i.taobao.com/my_taobao.htm'

headers= {

'Host':'i.taobao.com',

'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0',

'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',

# 'Accept-Encoding':'gzip, deflate',

'Referer' :'https://www.taobao.com',

'Content-Type': 'application/x-www-form-urlencoded',

'Connection' : 'Keep-Alive',

'Cookie' : cookiestr,

'Cache-Control':'max-age=0',

}

request=urllib.request.Request(url,headers=headers)

try:

response=urllib.request.urlopen(request)

# print(response.geturl())

if(response.geturl()==url):

print('登陆验证通过!')

return True

except Exception as e:

print(e)

print('登陆验证失败!请重新登陆!')

return False

然后是检查淘宝直通车权限,如果检查权限通过,就将cookie文件保存下来方便下次使用:

def check_subway(cookiestr):

print('开始淘宝直通车验证!')

url='http://subway.simba.taobao.com/bpenv/getLoginUserInfo.htm'

headers= {

'Host':'subway.simba.taobao.com',

'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0',

'Accept':'application/json, text/javascript, */*; q=0.01',

'Accept-Language':'zh-CN,zh;q=0.8',

'Connection' : 'Keep-Alive',

'Cookie' : cookiestr,

'Origin':'http://subway.simba.taobao.com',

'Cache-Control':'max-age=0',

'X-Requested-With':'XMLHttpRequest'

}

request=urllib.request.Request(url,headers=headers)

data={'_referer':'/tools/insight/index'}

postdata=urllib.parse.urlencode(data).encode('utf-8')

try:

response=urllib.request.urlopen(request,data=postdata)

string=response.read().decode()

parse=json.loads(string)

if(parse['code']=='200'):

print('淘宝直通车验证通过!您当前以登陆')

fp=open('cookie','wt')

fp.write(cookiestr)

fp.close()

print('登陆cookie已经保存!')

return parse['result']['token']

except Exception as e:

print(e)

print('淘宝直通车验证失败!请重新登陆!')

return False

在主函数中,程序将优先加载cookie文件,cookie失效或没有cookie文件时打开浏览器进行登陆:

#主函数

if(os.path.exists('cookie')):

print('检测到cookie文件!将使用cookie登陆!')

fp=open('cookie','r')

cookiestr=fp.read()

fp.close()

else:

cookiestr=openbrowser_login()

while(True):

if(check_login(cookiestr)):

token=check_subway(cookiestr)

if(token!=False):

break;

cookiestr=openbrowser_login()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的serversocket_Java ServerSocket 实现聊天室功能(简易版)

大体实现功能可以选择房间,可以与房间中的用户进行实时的交流说在前面的话:serverSocket.accept() 会形成阻塞scanner.hasNextLine() 和 scanner.nextLine() 也会形成阻塞windows 下需要打开telnet服务。请自行百度实现思路:用户连接上服务器后选择房间号&#xff0…

python爬虫验证码的识别_Python爬虫识别验证码

Python爬虫识别验证码安装tesserocrpip3 install tesserocr pillow识别测试将验证码图片放到项目根目录下,用tesserocr库识别该验证码,代码如下所示:import localelocale.setlocale(locale.LC_ALL, C)import tesserocrfrom PIL import Imagei…

python对象属性赋值_关于python对象 中dict属性赋值的疑问

下面这段代码 很奇怪把两个对象放在一个 list中然后循环操作两个对象 中 一个dict key的数值但是循环操作输出的时候发现两个对象的 值会叠加#!/usr/bin/env pythonclass test:base {score : 100}def setBase(self, score):self.base[score] scoredef addScore(self):self.se…

java mysql jsp分页代码_JSP实现数据库分页显示源代码例

JSP实现数据库分页显示源代码例2018-11-25分页显示数据库信息分页显示数据库记录用户名性别电话E-Mailtry{//驱动程序名String driverName"sun.jdbc.odbc.JdbcOdbcDriver";//连接字符串String url"jdbc:odbc:userdata";//加载驱动程序Class.forName(driver…

java解压zip异常_java解压zip文件示例

若是使用Java自带的压缩工具包来实现解压缩文件到指定文件夹的功能,因为jdk提供的zip只能按UTF-8格式处理,而Windows系统中文件名是以GBK方式编码的,所以如果是解压一个包含中文文件名的zip包,会报非法参数异常,所以要…

ensp删除所有命令_HCIA学习笔记——eNSP配置NAT技术

今天用华为的eNSP做了关于NAT的实验,我把它发了出来,有需要的小伙伴可以收藏一下。分别配置了静态的NAT,NAT Outbound配置,Easy IP配置,NAT server配置。接口配置如图所示。在网关路由器上配置访问外网的默认路由。配置…

java怎么设置背景_如何在Java中设置背景图片?

小编典典根据应用程序或小程序是使用AWT还是Swing,答案会略有不同。(基本上,以J诸如JApplet和JFrame为开头的类是Swing和Appletand Frame是AWT。)无论哪种情况,基本步骤都是:将图像绘制或加载到Image对象中。在要绘制背景的绘画事…

python调用selenium的get_Python – selenium webdriver在循环中停留在.get()

我有一个Python代码片段,它使用Selenium Webdriver来循环一些历史性的棒球赔率.代码的第一部分旨在从调度表(包含大约57个需要循环的页面)中获取所有单独的游戏URL,并将它们存储在列表中.我第一次测试它它工作得很好 – 现在,无论出于何种原因,driver.get()函数似乎无法正常工作…

java什么叫元素_什么是Java做什么 - 每个元素使它们成为对象类型?

这个问题关于如何处理Java for-each循环中的元素。我有一个哈希表,它是一个LinkedLists数组。 LinkedList节点的数据部分包含TableEntry,其中K和V是键和值类型。我写了一个for循环来查看LinkedList中的每个TableEntry,检查一个键是否等于Tabl…

python读取dicom文件的包_python 读取DICOM头文件的实例

用dicompyler软件打开dicom图像,头文件如图所示:当然也可以直接读取:ds dicom.read_file(H:Datadata216622.16.840.1.113662.2.0.105002416.1489146183.701CTCT#0#21662#E7AB693D.dcm)print ds>>(0008, 0008) Image Type CS: [ORIGINA…

java程序员用代码写的情书_用代码写的三行情诗,你懂得程序员的浪漫吗?

原标题:用代码写的三行情诗,你懂得程序员的浪漫吗?在一般人眼里,程序员是一群古板,技术宅,不懂得浪漫的屌丝,但其实这些大神们浪漫起来也是相当可以的!下面让我们来看一下程序员们用…

对比四大企业级linux版本_Linux家族族谱

大体上来讲,Linux分为两个生态体系,红帽和debian。商业版本以Redhat为代表,开源社区版本则以debian为代表。红帽家族redhat :红帽自家服务器centos :基于红帽重新封装的去掉版权信息的免费版本fedora :基于…

java编写静态工具类_Java编程中静态内部类与同步类的写法示例

java静态内部类将某个内部类定义为静态类,跟将其他类定义为静态类的方法基本相同,引用规则也基本一致。不过其细节方面仍然有很大的不同。具体来说,主要有如下几个地方要引起各位程序开发人员的注意。(一)一般情况下,如果一个内部…

python流量实时统计_Python实现获取nginx服务器ip及流量统计信息功能示例

本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考,具体如下:#!/usr/bin/python#codingutf8log_file "/usr/local/nginx/logs/access.log"with open(log_file) as f:contexts f.readlines()# define ip d…

java实验1机动车实验目的_《Java程序设计》实验指导书.doc

《Java程序设计》实验指导书实验一、熟悉JDK环境及主要命令一、实验目的1) 熟悉JDK的环境配置2) 掌握JDK的命令3) 掌握Java Application程序的开发过程,并编写一个Java Application程序二、实验内容1.按照上课所学知识,为自己的机器配置环境变…

python selenium 下载文件_Python Selenium —— 文件上传、下载,其实很简单

很多selenium学习者被浏览器弹出的文件上传、下载框折磨的痛不欲生,今天博主就带你们轻松搞定上传和下载问题。上传上传弹框文件上传是所有UI自动化测试都要面对的一个头疼问题,要处理这个问题,我们需要:首先,要区分出…

mysql vim 命令_Vim基本命令必知必会

光标移动定位方式hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头0 → 数字零,到行首^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)$ →…

python执行语句转换成str_python3.x,_python3.4.3如何转换str字符串?,python3.x - phpStudy...

python3.4.3如何转换str字符串?#codingutf8import pymssqlclass MSSQL:def __init__(self,host,user,pwd,db):self.host hostself.user userself.pwd pwdself.db dbdef __getConnect(self):"""得到连接信息返回: conn.cursor()"…

java中strictfp么意思_什么时候应该在java中使用“strictfp”关键字?

Strictfp确保您从每个平台上的浮点计算获得完全相同的结果。如果不使用strictfp,JVM实现可以在可用的地方使用额外的精度。Within an FP-strict expression, allintermediate values must be elementsof the float value set or the doublevalue set, implying that…

python导入包的输入法_python 模块和包的导入

http://www.cnblogs.com/linhaifeng/articles/6379069.html1,模块开源模块https://pypi.python.org/pypipip/ easy_install安装python setup.py buildpython setup.py installpip install xxxx添加环境变量import os,sysprint (os.path.dirname(os.path.dirname(os.path.dirnam…