Python爬虫,京东自动登录,在线抢购商品

2023-11-17

京东抢购
Python爬虫,自动登录京东网站,查询商品库存,价格,显示购物车详情等。
可以指定抢购商品,自动购买下单,然后手动去京东付款就行。

chang log
2017-03-30 实现二维码扫码登陆

2017-06-27 Golang版JD_AutoBuy

运行环境
Python 2.7

第三方库
Requests: 简单好用,功能强大的Http请求库

beautifulsoup4: HTML文档格式化及便签选择器

环境配置

1 pip install requests
2 pip install beautifulsoup4

项目源码分享

1 # -- coding: utf-8 --
2
3 “”"
4 JD online shopping helper tool
5 -----------------------------------------------------
6 only support to login by QR code,
7 username / password is not working now.
8 “”"
9
10
11 import bs4
12 import requests, requests.utils, pickle
13 import requests.packages.urllib3
14 requests.packages.urllib3.disable_warnings()
15
16 import os
17 import time
18 import json
19 import random
20
21
22 import argparse
23 #from selenium import webdriver
24
25
26 import sys
27 reload(sys)
28 sys.setdefaultencoding(‘utf-8’)
29
30 # get function name
31 FuncName = lambda n=0: sys._getframe(n + 1).f_code.co_name
32
33
34 def tags_val(tag, key=’’, index=0):
35 ‘’’
36 return html tag list attribute @key @index
37 if @key is empty, return tag content
38 ‘’’
39 if len(tag) == 0 or len(tag) <= index:
40 return ‘’
41 elif key:
42 txt = tag[index].get(key)
43 return txt.strip(’ \t\r\n’) if txt else ‘’
44 else:
45 txt = tag[index].text
46 return txt.strip(’ \t\r\n’) if txt else ‘’
47
48
49 def tag_val(tag, key=’’):
50 ‘’’
51 return html tag attribute @key
52 if @key is empty, return tag content
53 ‘’’
54 if tag is None:
55 return ‘’
56 elif key:
57 txt = tag.get(key)
58 return txt.strip(’ \t\r\n’) if txt else ‘’
59 else:
60 txt = tag.text
61 return txt.strip(’ \t\r\n’) if txt else ‘’
62
63
64 class JDWrapper(object):
65 ‘’’
66 This class used to simulate login JD
67 ‘’’
68
69 def init(self, usr_name=None, usr_pwd=None):
70 # cookie info
71 self.trackid = ‘’
72 self.uuid = ‘’
73 self.eid = ‘’
74 self.fp = ‘’
75
76 self.usr_name = usr_name
77 self.usr_pwd = usr_pwd
78
79 self.interval = 0
80
81 # init url related
82 self.home = ‘https://passport.jd.com/new/login.aspx’
83 self.login = ‘https://passport.jd.com/uc/loginService’
84 self.imag = ‘https://authcode.jd.com/verify/image’
85 self.auth = ‘https://passport.jd.com/uc/showAuthCode’
86
87 self.sess = requests.Session()
88
89 self.headers = {
90 ‘User-Agent’ : ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36’,
91 ‘ContentType’: ‘text/html; charset=utf-8’,
92 ‘Accept-Encoding’:‘gzip, deflate, sdch’,
93 ‘Accept-Language’:‘zh-CN,zh;q=0.8’,
94 ‘Connection’ : ‘keep-alive’,
95 }
96
97 self.cookies = {
98
99 }
100
101 ‘’’
102 try:
103 self.browser = webdriver.PhantomJS(‘phantomjs.exe’)
104 except Exception, e:
105 print ‘Phantomjs initialize failed :’, e
106 exit(1)
107 ‘’’
108
109 @staticmethod
110 def print_json(resp_text):
111 ‘’’
112 format the response content
113 ‘’’
114 if resp_text[0] == ‘(’:
115 resp_text = resp_text[1:-1]
116
117 for k,v in json.loads(resp_text).items():
118 print u’%s : %s’ % (k, v)
119
120 @staticmethod
121 def response_status(resp):
122 if resp.status_code != requests.codes.OK:
123 print ‘Status: %u, Url: %s’ % (resp.status_code, resp.url)
124 return False
125 return True
126
127 def _need_auth_code(self, usr_name):
128 # check if need auth code
129 #
130 auth_dat = {
131 ‘loginName’: usr_name,
132 }
133 payload = {
134 ‘r’ : random.random(),
135 ‘version’ : 2015
136 }
137
138 resp = self.sess.post(self.auth, data=auth_dat, params=payload)
139 if self.response_status(resp) :
140 js = json.loads(resp.text[1:-1])
141 return js[‘verifycode’]
142
143 print u’获取是否需要验证码失败’
144 return False
145
146 def get_auth_code(self, uuid):
147 # image save path
148 image_file = os.path.join(os.getcwd(), ‘authcode.jfif’)
149
150 payload = {
151 ‘a’ : 1,
152 ‘acid’ : uuid,
153 ‘uid’ : uuid,
154 ‘yys’ : str(int(time.time() * 1000)),
155 }
156
157 # get auth code
158 r = self.sess.get(self.imag, params=payload)
159 if not self.response_status®:
160 print u’获取验证码失败’
161 return False
162
163 with open (image_file, ‘wb’) as f:
164 for chunk in r.iter_content(chunk_size=1024):
165 f.write(chunk)
166
167 f.close()
168
169 os.system(‘start ’ + image_file)
170 return str(raw_input(‘Auth Code: ‘))
171
172 def login_once(self, login_data):
173 # url parameter
174 payload = {
175 ‘r’: random.random(),
176 ‘uuid’ : login_data[‘uuid’],
177 ‘version’ : 2015,
178 }
179
180 resp = self.sess.post(self.login, data=login_da

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬虫,京东自动登录,在线抢购商品 的相关文章

随机推荐

  • python文件操作与异常处理

    一 文件操作 内建函数open 能够打开一个指定路径下的文件 返回一个文件对象 open的两个参数 第一个参数是文件名 第二个是打开方式 r w a b 依次表示读 写 追加写 二进制 1 内建函数 包含在 buildings 这个模块中的
  • 什么是数字化管理

    问题 什么是数字化管理 数字化管理是什么意思 数字化管理是指利用计算机 通信 网络 人工智能等技术 量化管理对象与管理行为 实现计划 组织 协调 服务 创新等职能的管理活动和管理方法的总称 数字化管理的本质就是将现代化管理思想 管理方法 管
  • JS String 字符串方法

    1 charAt 方法从一个字符串中返回指定的字符 var anyString Brave new world console log anyString charAt 0 B console log anyString charAt 1
  • 移动端自动化测试实战

    UI自动化测试的价值 1 提升回归测试的效率 2 可以进行兼容性测试 UI 自动化测试应用场景 冒烟测试自动化 提测之前自动断言提测质量 提供准入参考 功能测试自动化 辅助 QA 与测试工程师的快速验证 验收测试自动化 兼容性测试等 移动端
  • Markdown 语法完全指南

    这里写目录标题 简介 1 标题 2 段落和换行 3 文本样式 粗体和斜体 删除线和代码 嵌套标记 4 链接 内联链接 引用链接 5 列表 无序列表 有序列表 嵌套列表 任务列表 6 引用块 7 插入图片 8 水平线 9 代码块 10 表格
  • MySQL 的优化方案总结

    性能优化 Optimize 指的是在保证系统正确性的前提下 能够更快速响应请求的一种手段 而且有些性能问题 比如慢查询等 如果积累到一定的程度或者是遇到急速上升的并发请求之后 会导致严重的后果 轻则造成服务繁忙 重则导致应用不可用 它对我们
  • 如何使用命令实现在达梦数据库里修改表的某个字段

    达梦数据库里当字段长度太小的时候 在应用程序里会出现这样的报错 列 XXXX 长度超出定义 说明当前要存储的内容跟设定的字段长度是不匹配的 很明显这样的问题是要调整字段长度的的 定位到列所在的表 就可以通过达梦sql脚本去修改这个字段的长度
  • 【Xilinx】Spartan 7上手指南(ARTY S7开发板)

    Spartan 7上手指南 一 安装board文件 1 下载并解压板卡压缩文件 2 复制到Vivado安装目录 二 demo工程 1 下载demo 2 修改tcl 3 恢复工程 4 生成bit 三 调试运行 1 连接电脑 2 设置串口 3
  • 分布式应用:Zabbix 自动发现与自动注册

    目录 一 理论 1 Zabbix 自动发现 2 Zabbix 自动发现部署 3 Zabbix 自动注册 4 Zabbix 自动注册部署 二 实验 1 Zabbix 自动发现部署 2 Zabbix 自动注册部署 三 总结 一 理论 1 Zab
  • 浅谈前端单元测试

    首先声明一点 长期以来 前端开发的单元测试并不是在前端的开发过程中所必须的 也不是每个前端开发工程师所注意和重视的 甚至扩大到软件开发过程中单元测试这一环也不是在章程上有书面规定所要求的 但是随着每个工程的复杂化 代码的高复用性要求和前端代
  • MySql设置唯一标识主键等设置

    建立表 create table user score name char 10 not null default score smallint not null default 0 增加一列 alter table user score
  • 【简单】阶乘之和

    描述 给定n的值 求Sn 1 2 3 4 5 n 之值 但Sn可能很大 因此只要求出Sn关于100007的余数 输入 输入数据有多组 每组占一行 每行一个正整数n n lt 1000 输出 每组输出一个整数 即Sn Mod 100007 样
  • 自动化测试用例设计实例

    在编写用例之间 笔者再次强调几点编写自动化测试用例的原则 1 一个脚本是一个完整的场景 从用户登陆操作到用户退出系统关闭浏览器 2 一个脚本脚本只验证一个功能点 不要试图用户登陆系统后把所有的功能都进行验证再退出系统 3 尽量只做功能中正向
  • 2022年全新Java学习路线图,含源码+笔记

    简洁版本Java学习路线 Java SE基础 gt Java Web gt Maven gt Git gt SSM框架 gt MybatisPlus gt Spring Boot gt 传智健康 医疗行业 gt Spring Cloud g
  • TLS 安全设置未设置为默认设置,这也可能导致此错误。

    edge浏览器打开网页时打示 TLS 安全设置未设置为默认设置 这也可能导致此错误 如图 此时可以通过启用TLS功能处理该问题 控制面板 Internet选项 高级 如图 启用TLS功能后刷新页面或重启浏览器 之后就不会提示之前的报错了
  • ctfshow-萌新-web1( 利用intval函数的特性获取敏感数据)

    ctf show 萌新模块的web1关 这一关考察的是intval 函数转换字符串时的特性以及SQL的拼接绕过 这一关直接就给了源码 并提示我们 id 1000 时 就是flag 先分析一下源码 首先是 intval 函数将参数id转换为数
  • Educoder---计算机系统基础-----计算机系统2.1测试

    1 5 B C A D C 6 10 D C B C B 10题讲解过程 在8位寄存器中存放补码表示的数0FEH 算术左移一位后 其十六进制代码是 A 0FFH B 0FCH C 7CH D 7EH 我是谁 a student a skat
  • 43_iPhone如何查看idfa

    今天工作时 需要帮一位同事查看iPhone的idfa 然后通过idfa做一些定向操作 网上查了十几分钟 一直没有找到合适的方法 最后找到一个对我来说非常简单的方法 很快就找到了我们需要的idfa 在这里记录一下思路 并不做详细解释 懂的人自
  • 【第10篇】MobileNets:用于移动视觉应用的高效卷积神经网络

    MobileNets 用于移动视觉应用的高效卷积神经网络 文章目录 MobileNets 用于移动视觉应用的高效卷积神经网络 摘要 一 简介 二 前期工作 三 MobileNet 架构 3 1 深度可分离卷积 3 2 网络结构和训练 3 3
  • Python爬虫,京东自动登录,在线抢购商品

    京东抢购 Python爬虫 自动登录京东网站 查询商品库存 价格 显示购物车详情等 可以指定抢购商品 自动购买下单 然后手动去京东付款就行 chang log 2017 03 30 实现二维码扫码登陆 2017 06 27 Golang版J