没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
解决解决Python3 抓取微信账单信息问题抓取微信账单信息问题
主要介绍了Python3 抓取微信账单信息,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
这段时间有个朋友想导出微信里面的账单信息,后来发现微信的反爬虫还是很厉害的,花了点时间去分析。
一、采用传统模拟一、采用传统模拟http抓取抓取
抓取的主要URL:https://wx.tenpay.com/userroll/userrolllist,其中后面带上三个参数,具体参数见代码,其中exportkey这参数是会过期的,userroll_encryption和userroll_pass_ticket 这两个参数需要从
cookie中获得,应该是作为获取数据的标识,通过抓包也看不出端倪,应该是微信程序内部生成的,如果使用微信开发着工具登录后直接访问网址有的时候可以访问返回数据,但是只是在较短的时间内
有效,而且当返回会话超时后,继续使用网页访问就会被限制,一直提示会话超时,应该是在网页和移动端中exportkey有不同的时间和访问次数的限制。
之后想通过破解seesion的方式,研究了一下,发现这是不可能的,想要破解session需要搞定wx.login,而wx.login是微信提供的,想要破解难度应该不用我说了。
二、解决二、解决exportkey 这个这个key和和Cookie的获取的获取
需要的工具:
1、安卓/苹果手机
2、Fiddler(抓包工具)
搞过爬虫的都知道Fiddler,具体操作就不多说了,设置好代理和开启Fiddler后,抓取url中的exportkey和相应的Cookie,用于接下来的数据抓取。
三、上代码三、上代码
代码写的不是很好,若有错误还望各位大大指正。
# coding:utf-8
import datetime
import time
import urllib
import urllib.request
import json
import sys
import io
import ssl
from DBController import DBController #数据库
#设置系统编码格式
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
#解决访问Https时不受信任SSL证书问题
ssl._create_default_https_context = ssl._create_unverified_context
class MainCode:
def __init__(self, url=""):
self.url = url
self.dbController = DBController() # 数据库控制
self.userroll_encryption = "uoxQXsCenowxj0G0ppRKBg8iHRPZwZKaUZB0ka1Y5apUuQnKkZTsA/2RMhBPGyMdiHS8QXk8y2JeLgqTPqZPU9fkrCUp+TIQPkHH/uExAwKeBFLute0ztdHaC6GJUJ2+/R8NGWGe16hSKc6L1+LvAw=="
self.userroll_pass_ticket = "V7oum4glDbdaAwibC8mcuTizGIKmC9A/Y/V12qASuDALdRMveHcRHv1QXamFk27Z"
# self.last_bill_id = ""
# self.last_bill_type = ""
# self.last_create_time = ""
# self.last_trans_id = ""
self.last_item = {}
self.num= 0
#获取网页信息
def get_html(self, url, maxTryNum=5):
goon = True # 网络中断标记
obj = {}
for tryNum in range(maxTryNum):
try:
# print(self.token)
header = {
"Accept": 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
"Accept-Encoding":'gzip, deflate, br',
"Accept-Language":'zh-CN,zh;q=0.8',
"Cache-Control":'max-age=0',
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 Safari/601.1 wechatdevtools/1.02.1810240 MicroMessenger/6.5.7 Language/zh_CN webview/15415760070117398 webdebugger port/32594",
"Cookie":"userroll_encryption="+self.userroll_encryption+"; userroll_pass_ticket="+self.userroll_pass_ticket,
"Host":"wx.tenpay.com",
"Upgrade-Insecure-Requests":"1",
}
req = urllib.request.Request(url=url, headers=header)
# 访问网址
result = urllib.request.urlopen(req, timeout=5).read()
break
except urllib.error.HTTPError as e:
if tryNum < (maxTryNum - 1):
print("尝试连接请求" + str(tryNum + 1))
# host = self.host2
time.sleep(5)
else:
print('Internet Connect Error!', "Error URL:" + url)
goon = False
break
if goon:
page = result.decode('utf-8')
obj = json.loads(page)
#print(obj)
#print(page)
else:
print("--------------------------")
return obj
#保存到数据库
def save_info_to_db(self, item):
select_sql = "SELECT count(*)as num FROM wx_order2 where trans_id = '%s'" % (item["trans_id"])
results = self.dbController.ExecuteSQL_Select(select_sql)
if int(results[0][0]) == 0:
sql = "INSERT INTO wx_order2 (bill_id, bill_type, classify_type, fee, fee_type, out_trade_no, pay_bank_name, payer_remark, remark, order_time, title, total_refund_fee, trans_id,fee_attr) VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s','%s','%s')" % (
str(item['bill_id']),
str(item['bill_type']),
str(item['classify_type']),
str(item['fee']),
str(item['fee_type']) ,
str(item['out_trade_no']),
str(item['pay_bank_name']),
str(item['payer_remark']),
str(item['remark']),
str(item['order_time']),
str(item['title']),
str(item['total_refund_fee']),
str(item['trans_id']),
str(item['fee_attr'])
)
# print(sql)
try:
self.dbController.ExecuteSQL_Insert(sql)
# self.log.info("插入数据成功")
except Exception as e:
print("save_info_to_db:",e)
return
#从获取的网页信息中过滤所需要的信息
def get_data(self,url):
res_obj = self.get_html(url)
this_page_num = 0
#若返回的ret_code== 0 则说明获取数据成功
资源评论
weixin_38502929
- 粉丝: 7
- 资源: 959
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功