序言
python控制appium来采集电商数据越来越流行。拼夕夕之多多买菜数据非常难采集,他们用到了云函数,反爬也相当厉害。
郑重说明
我们研究技术只为了正常收集数据和分析数据。切勿攻击服务器,切勿违法互联网法律法规。一下代码仅供学习和研究。
用python控制appium打开微信代码如下:
from appium.webdriver import Remote # 引入打开软件的包
# app的启动参数
desired_cap = {
"platformName": "Android", # 手机系统
"platformVersion": "9", # 手机系统版本
"deviceName": 'HUAWEI', # 手机的名字,不会进行校验,但是没有会报错
"automationName": "UiAutomator2", # 自动化测试框架 (1.4以上的appium不用写)
"appPackage": "com.tencent.mm", # app包名
"appActivity": ".ui.LauncherUI", # app的启动页面
}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_cap)
启动代码如下:
# coding=utf-8 import json import os.path from os import system from multiprocessing import Pool import time from base.base_api import BaseApi from base.base_root import BaseRoot from po.bangdanwechat_page import BangDanWechatPage from po.ddmcwechat_page import DdmcWechatPage def main(device_info): print(f"###########################################{device_info} start#########################################") showtime = time.strftime('%Y-%m-%d', time.localtime(time.time())) batchtime = time.time() curpath = BaseRoot.root_path folder = f"/log/{showtime}/" if not os.path.exists(curpath + f'/{folder}/'): os.makedirs(curpath + f'/{folder}/') ########调接口 请求要采集的货仓数据######## ''' warehouseName: 新疆 warehouseCode: 650000000000 warehouseSonName: 乌鲁木齐 warehouseSonCode: 650100000000 ''' biaoshi = input("请输入本地标示 例如:新疆-乌鲁木齐:") if len(biaoshi) == 0: biaoshi = input("请输入本地标示 例如:新疆-乌鲁木齐:") biaoshicontent = biaoshi.split('-') mydict = {} mydict['warehouseName'] = biaoshicontent[0] mydict['warehouseSonName'] = biaoshicontent[1] response_text = BaseApi.getFetchConfigData(mydict) biaoshi_dict = json.loads(response_text) fetch_address = json.loads(biaoshi_dict['data']['fetch_address']) fetch_cates = json.loads(biaoshi_dict['data']['fetch_cates']) ''' {'code': 0, 'msg': 'success', 'time': '1679644488', 'data': { 'fetch_address': '{"shop": "客人店", "warehouseCode": "650000000000", "warehouseName": "新疆", "warehouseSonCode": "650100000000", "warehouseSonName": "乌鲁木齐"}', 'fetch_cates': '{ "上新": 1, "百货": 1, "洗护": 1, "花卉": 1, "电器": 1 }'}} ''' ####存标示##### biaoshi_json = {} sava_path_dir = curpath + folder + f'{device_info}-biaoshi-{biaoshi}.json' if not os.path.isfile(sava_path_dir): ''' warehouseName = input("请输入货仓省份 例如:新疆:") warehouseSonName = input("请输入货仓地区 例如:乌鲁木齐:") warehouseCode = input("请输入省份码 例如:650000000000:") warehouseSonCode = input("请输入货仓地区码 例如:650100000000:") downfenlei = input("请输入下载的分类 例如:{\"上新\": 1, \"百货\": 1, \"洗护\": 1, \"花卉\": 1, \"电器\": 1}:") down_cates = json.loads(downfenlei) ''' warehouseName = fetch_address['warehouseName'] warehouseSonName = fetch_address['warehouseSonName'] warehouseCode = fetch_address['warehouseCode'] warehouseSonCode = fetch_address['warehouseSonCode'] down_cates =fetch_cates print(warehouseName) print(warehouseSonName) print(warehouseCode) print(warehouseSonCode) biaoshi_json['warehouseName'] = warehouseName biaoshi_json['warehouseSonName'] = warehouseSonName biaoshi_json['warehouseCode'] = warehouseCode biaoshi_json['warehouseSonCode'] = warehouseSonCode biaoshi_json['down_cates'] = down_cates json.dump(biaoshi_json, open(sava_path_dir, 'w'), indent=4) else: with open(sava_path_dir, 'r', encoding="utf-8") as f: biaoshi_json = json.load(f) warehouseName = biaoshi_json['warehouseName'] warehouseSonName = biaoshi_json['warehouseSonName'] warehouseCode = biaoshi_json['warehouseCode'] warehouseSonCode = biaoshi_json['warehouseSonCode'] down_cates = biaoshi_json['down_cates'] ####存标示##### ########调接口 请求要采集的货仓数据######## #bangdan_json ={"xiaoliangbang":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0} #目前只采集新品榜 bangdan_json ={"4":0} sava_path_dir = curpath + folder + f'{device_info}-bangdan-{warehouseName}-{warehouseSonName}.json' if not os.path.isfile(sava_path_dir): json.dump(bangdan_json, open(sava_path_dir,'w'), indent=4) else: with open(sava_path_dir, 'r', encoding="utf-8") as f: bangdan_json= json.load(f) BangDanWechatPage(device_info).run(bangdan_json,sava_path_dir,batchtime,warehouseName,warehouseSonName,warehouseCode,warehouseSonCode) print(f"###########################################{device_info} end#########################################") time.sleep(10) print(f"###########################################分类采集开始#########################################") caiji_json ={"tuijian":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0} sava_path_dir = curpath + folder+ f'{device_info}-products-{warehouseName}-{warehouseSonName}.json' if not os.path.isfile(sava_path_dir): json.dump(caiji_json, open(sava_path_dir,'w'), indent=4) else: with open(sava_path_dir, 'r', encoding="utf-8") as f: caiji_json= json.load(f) #down_cates = {"上新": 1, "百货": 1, "洗护": 1, "花卉": 1, "电器": 1} DdmcWechatPage(device_info).run(caiji_json,sava_path_dir,down_cates,batchtime,warehouseName,warehouseSonName,warehouseCode,warehouseSonCode) return "ok" if __name__ == '__main__': device_info = input("请输入设备 例如:62001:") system(f"title {device_info}") main(device_info)
注意事项:项目代码只是为了大家共同学习和共同进步,技术在正直人手里可以改变世界,技术在不法之人手里会危害世界。我们一定要遵纪守法。
以上代码百分百原创,喜欢可以私信。