Last updated on

本文仅学习交流使用,记录学习用webdriver模拟登录支付宝保存cookie,再用requests.session()加载cookie并用Xpath获取订单信息,将订单存储到MySQL数据库中的过程。

本机主要运行环境及库Arch Linux

webdriver(Chrome或者FireFox)

Python3.6

selenium 库

json 库

requests 库

lxml 库

MySQLdb 库

确保本机具有或类似的运行条件,webdriver 安装方法在selenium模拟登录163邮箱中已经提到。

selenium、json、requests、lxml库都可以通过python的包管理工具PyPI安装。

Python2.x 的版本通过pip安装mysql-python 来连接MySQL数据库,Python3.x则需要通过pip安装mysqlclient来实现Python和MySQL的连接。

获取cookie

我们用webdriver登录支付宝来获取cookie,并用json使数据持久化。

首先获取支付宝登录页面的URL:

https://auth.alipay.com/login/index.htm?goto=https%3A%2F%2Flab.alipay.com%2Fuser%2Fi.htm

通过Chrome开发者工具获取用户名文本框的id属性、密码文本框的name属性、和登录按钮的id属性

部分代码如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14driver = webdriver.Firefox()

driver.maximize_window()

driver.get('https://auth.alipay.com/login/index.htm?goto=https%3A%2F%2Fmy.alipay.com%2Fportal%2Fi.htm')

time.sleep(2)

driver.find_element_by_id('J-input-user').send_keys('你的支付宝用户名') # 输入用户名

driver.find_element_by_name('password_rsainput').send_keys('你的支付宝密码') # 输入密码

driver.find_element_by_id('J-login-btn').click() # 点击登录按钮

# 获取cookie,并保存到本地

cookies = driver.get_cookies()

with open('cookies','w') as f:

json.dump(cookies, f)

f.close()

driver.close()

设置cookie

要用requests.session()请求网页进行爬取,所以我们就直接加载本地的cookie来请求网页

部分代码如下:1

2

3

4

5

6with ('cookies', 'r') as f:

cookies= json.load(f)

for cookie in cookies:

c = {cookie['name']: cookie['value']}

session.cookies.update(c)

获取数据

采用lxml来解析网页,然后通过xpath来找到相应的数据,最后存储到各自list中,为的是之后存储到数据库方便

部分代码如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27# 获取交易记录界面

html = self.session.get('https://consumeprod.alipay.com/record/standard.htm')

# 用lxml解析html

selector= etree.HTML(html.text)

# 获取最近20个交易数据

for i in range(1,21):

# 获取流水号

number = selector.xpath('//*[@id="J-tradeNo-'+str(i)+

number_list.append(number[0].strip())

# 获取交易时间

time = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[2]/p[1]/text()')

time_list.append(time[0].strip())

# 获取具体内容

try:

# 交易成功的内容

content = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[3]/p[1]/a/text()')

content_list.append(content[0].strip())

except:

# 交易失败的内容

content = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[3]/p[1]/text()')

content_list.append(content[0].strip())

# 获取金额变动

money = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[4]/span/text()')

money_list.append(money[0].strip())

# 获取交易状态

state = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[6]/p[1]/text()')

state_list.append(state[0].strip())

存储数据

将存储到list中的数据,存储到mysql中

部分代码如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17# 连接数据库

db = MySQLdb.connect('localhost', 'root', '数据库密码', '数据库')

# 获取游标

cursor = db.cursor()

for i in range(20):

# sql 插入语句,插入到alipay表中

sql = "INSERT IGNORE INTO alipay(NUMBER,DATE,CONTENT,MONEY,STATE) VALUES ('%s','%s','%s','%s','%s')" % (number_list[i],time_list[i],content_list[i],money_list[i],state_list[i])

try:

# 执行sql语句

cursor.execute(sql)

# 提交到数据库

db.commit()

except:

# 失败回滚

db.rollback()

# 关闭数据库连接

db.close()

完整代码

将代码进行了封装,增加了对加载cookie后登录状态的确认

完整代码如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123# -*- coding=utf-8 -*-

from selenium import webdriver

import time

import json

import requests

from lxml import etree

import MySQLdb

class AlipaySpider(object):

def __init__(self):

self.headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'}

self.session = requests.Session()

self.session.headers = self.headers

self.number_list = []

self.time_list = []

self.content_list = []

self.money_list = []

self.state_list = []

# 用webdriver 获取cookie

def save_cookies(self):

driver = webdriver.Firefox()

driver.maximize_window()

driver.get('https://auth.alipay.com/login/index.htm?goto=https%3A%2F%2Fmy.alipay.com%2Fportal%2Fi.htm')

# 等待2秒

time.sleep(2)

driver.find_element_by_id('J-input-user').send_keys('你的支付宝用户名')

driver.find_element_by_name('password_rsainput').send_keys('你的支付宝密码')

driver.find_element_by_id('J-login-btn').click()

# 获取cookie,并保存到本地

cookies = driver.get_cookies()

with open('cookies','w') as f:

json.dump(cookies, f)

f.close()

driver.close()

# 设置cookie

def set_cookies(self):

# 从文件中获取cookie

with open('cookies', 'r') as f:

cookies = json.load(f)

# 将json存储的cookie 转化为dict,并更新session的coookie

for cookie in cookies:

c = {cookie['name']: cookie['value']}

self.session.cookies.update(c)

# 判断是否已经登录

def aready_login(self):

self.set_cookies()

html_code = self.session.get('https://custweb.alipay.com/account/index.htm',allow_redirects=False).status_code

if html_code == 200:

return True

else:

return False

# 获取数据

def get_data(self):

# 获取交易记录界面

html = self.session.get('https://consumeprod.alipay.com/record/standard.htm')

# 用lxml解析html

selector= etree.HTML(html.text)

# 获取最近20个交易数据

for i in range(1,21):

# 获取流水号

number = selector.xpath('//*[@id="J-tradeNo-'+str(i)+

self.number_list.append(number[0].strip())

# 获取交易时间

time = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[2]/p[1]/text()')

self.time_list.append(time[0].strip())

# 获取具体内容

try:

# 交易成功的内容

content = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[3]/p[1]/a/text()')

self.content_list.append(content[0].strip())

except:

# 交易失败的内容

content = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[3]/p[1]/text()')

self.content_list.append(content[0].strip())

# 获取金额变动

money = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[4]/span/text()')

self.money_list.append(money[0].strip())

# 获取交易状态

state = selector.xpath('//*[@id="J-item-'+str(i)+'"]/td[6]/p[1]/text()')

self.state_list.append(state[0].strip())

# 存储数据

def save_data(self):

# 连接数据库

db = MySQLdb.connect('localhost', 'root', '密码', '数据库')

# 获取游标

cursor = db.cursor()

for i in range(20):

# sql 插入语句,插入到alipay表中

sql = "INSERT IGNORE INTO alipay(NUMBER,DATE,CONTENT,MONEY,STATE) VALUES ('%s','%s','%s','%s','%s')" % (self.number_list[i],self.time_list[i],self.content_list[i],self.money_list[i],self.state_list[i])

try:

# 执行sql语句

cursor.execute(sql)

# 提交到数据库

db.commit()

except:

# 失败回滚

db.rollback()

# 关闭数据库连接

db.close()

def total_crawl(self):

self.save_cookies() # 保存cookie

self.set_cookies() # 设置cookie

self.get_data() # 爬取数据

self.save_data() # 保存数据

def crawl(self):

self.get_data() # 爬取数据

self.save_data() # 保存数据

if __name__ == "__main__":

spider = AlipaySpider()

if spider.aready_login() == True:

spider.crawl()

else:

spider.total_crawl()

总结

通过本次的学习,有2点不足之处。有时由于多次访问支付宝页面,导致登录页面有验证码,这样获取到的cookie就不成功了,需要再次请求,直到没有验证码,才能获取到cookie

数据爬取时,只能爬取到最近的20笔交易记录

遗留问题会在学习更多之后解决

python模拟支付宝扫码登录_Python爬虫模拟登录支付宝并获取订单信息相关推荐

  1. 支付宝扫码验签实例php,PHP 支付宝支付,支付宝回调

    下载官方SDK:https://openhome.alipay.com/doc/sdkDownload.resource?sdkType=PHP 在支付宝所创建的应用中添加" 电脑网站支付. ...

  2. python微信公众号推送_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  3. python教程app 小米应用商店_Python爬虫过程解析之多线程获取小米应用商店数据...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT共享之家 ,作者IT共享者 前言 小米应用商店给用户发现最好的安卓应用和游戏,安 ...

  4. python 12306登录_python爬虫--模拟12306登录

    模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...

  5. python爬取学校教务管理系统_python爬虫模拟登陆学校教务处

    最近在学python爬虫,我想教务处官网可能是每个学生第一个自己动手爬取的网站吧.而且很多学校的教务处没有验证码,很适合初学者练手. 环境准备 本次模拟登陆用到的库除了requests外还有lxml, ...

  6. python爬取京东手机参数_python爬虫——分页爬取京东商城商品信息(手机为例)...

    1.最近刚开始学习python   写了个爬虫练习,感觉主要是得会用F12查询网站结构代码.还涉及到反爬虫,每个网站都不一样,拿到的解析出的json数据格式也不同.得有些Web知识的基础才行. htt ...

  7. C# Winform窗体实现支付宝扫码支付

    C# Winform窗体项目实现支付宝扫码支付 一.内容介绍 啪嗒!( 搬好小板凳 ) 大家好,本次学习的内容是在博主大一winform窗体项目中实现的一个功能--支付宝扫码支付: 主要功能通过支付宝 ...

  8. 支付宝扫码支付模式平台介绍

    互联网在逐渐普及过程中,智能手机逐渐成为人们日常生活内主要电子设备.互联网支付在逐渐普及过程中,移动支付也逐渐出现在人们日常生活工作内,互联网支付企业也逐渐参与到线下支付行列内.第三方支付企业在为社会 ...

  9. 支付宝扫码跳转小程序并传参

    支付宝扫码跳转小程序并传参 1. 打开支付宝开放平台 支付宝开放平台 打开支付宝开放平台,进入自己的小程序详情页面.点击小程序码>关联普通二维码>添加按钮 2. 输入业务域名 这里我们选择 ...

  10. 利用Python实现MOOC扫码登录

    利用Python实现MOOC扫码登录 1.基本原理 访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY 浏览器开启定时轮询服务器,确认KEY对应的扫码结果 用户使用app扫码二维码,a ...

最新文章

  1. 在服务器上处理gis文件,云服务器处理gis
  2. myisam怎么读_耗时半年,我成功“逆袭”,拿下美团offer(刷面试题+读源码+项目准备)...
  3. R语言-时间日期函数
  4. TcxComboBox控件说明
  5. Linux 下定时文件crontab配置
  6. 百度地图InfoWindow弹窗圆角
  7. 专家思维模型之马太效应
  8. xy坐标正负方向_xy坐标分别代表什么
  9. Dango 之 Xadmin
  10. (全网首发)谢惠民答案------谢惠民上下册习题解析
  11. MySQL索引(详细,1万字长文)
  12. 图像数据的特征提取方法
  13. Python实现AI变脸
  14. eeplat中遇到日期先后校验问题的解决
  15. 中标麒麟系统u盘安装_U盘安装中标麒麟Linux桌面版的方法
  16. 大数据相关总结(待续)
  17. 开放银行潜在风险不可忽视,看F5如何应对?
  18. mysql的exists与inner join 和 not exists与 left join 性能差别惊人
  19. 美化WinForm第三方框架DevExpress
  20. 操作系统同步问题:有一个没有限量的大盘子,爸爸只往里面放苹果,妈妈只往里面放桔子,儿子只拿苹果吃,女儿只拿桔子吃,请写出能描述4个人行为的同步方案

热门文章

  1. 前端实现导入(excel文件)导出(word)文件
  2. Vue+elementUI导出xlsl表格,支持复杂表头,自动合拼单元格。xlsx+file-saver插件
  3. 树莓派python扫描蓝牙
  4. 计算机公式固定数值符号,【2人回答】Excel如何锁定,如何Excel某计算公式中锁定其中一个数值?-3D溜溜网...
  5. 使用正片和负片为何会得到效果相同的PCB?
  6. MySQL视图创建与管理(实验五)
  7. android rtsp传输,android-ndk – 使用FFMpeg在Android客户端上进行RTSP流式传输
  8. Windows下cwRsync搭建步骤
  9. 科研论文检索方法入门(计算机领域)
  10. Idea起服务报错java heap space,GC overhead limit exceeded,Information:javac 1.8.0_181 was used to comp解决办法