战疫内外,京东智联云如此“一鸣惊人”!

鼠年春节,一场疫情突如其来地打破了人们平静的生活;但在滨州,一款名为“疫情助手”的上线软件却为滨州市民的疫情生活带来“雪中送炭”的丝丝温情,细微知著中人们深深感受到了京东诠释而来的“ABCDE”技术战略以及那股子科技力量背后的温暖人心。

%title插图%num

滨州市一位公务人员展示“疫情助手”
疫情之内,京东释放科技力量温暖人心
据晶少了解,这款“疫情助手”全名为“疫情助手智能机器人咨询平台”,作为京东自主研发的智能情感客服系统,其主要依靠NeuHub京东人工智能开放平台提供的语义理解、句法分析等能力,就可通过问题预判、意图反问、分类识别、相似度匹配等多种方法探索出用户的准确意图,并根据问题类型,智能匹配出*佳的解决方案。

在滨州抗疫过程中,该产品历经多重场景、用户、数据的锤炼,通过提供实时疫情查询、专业医生服务、就医指南、发热门诊医院查询等功能高效协助当地政府、医疗单位遏制灾情,提供了有效的技术支撑。

同样的抗疫惊喜还出现在千里之外的广西南宁。一样在疫情期间,京东智能疫情产品在南宁“爱南宁”APP和微信端落地被应用,超过千万市民只需从疫情专区进入“应急资源信息发布”,就可以在“智能疫情助理”模块中选择相应服务。

据悉,这款京东“智能疫情助理”产品源于京东智联云打造的通用智能对话平台,可以根据不同行业、不同场景的需求,快速搭建出融合行业理解、支持多轮交互、具备情感能力的对话产品,具有场景化快速落地与快速调优能力,目前累计服务咨询量高达数近百万次。

%title插图%num

此外,基于京东智联云*的语音语义技术研发的同款智能疫情助理已经在北京、山东、安徽、江苏、江西、四川等地的十多个行业、一千余家组织和机构中快速落地,服务免费并累计服务咨询数量达数百万条,让人们在特殊时期充分感受到了技术的便利与科技的温度。

无论是智能疫情助理驰援抗疫前线武汉,还是携手浙江丽水开启“5G+AI”科技抗“疫”,抑或是全国十余城共同落地“京东智能温感筛查系统”,可以想见,疫情期间京东已充分做到广泛调动内部基于京东云平台、京东人工智能开放平台NeuHub、京东物联小京鱼智能服务平台的能力和资源,迅速向社会推出了应急资源信息发布与匹配平台、智能疫情助理、云视频会议、远程家庭医生服务等十余款免费产品和服务,为3000多个企业提供免费远程视频会议服务,保障数十万学生“停课不停学”,实现云上经营、云上办公等,截至2月28日已覆盖上万机构、数百万用户,匹配并提供抗疫物资超6.6亿件。

%title插图%num

疫情严峻,但京东的技术是有温度的。对此京东集团技术委员会主席、京东云与AI总裁周伯文表示,在疫情防控攻坚战中,京东智联云不断推出有温度的技术产品助力政府治理、企业经营、服务公众生活,彰显责任与担当。

疫情之外,京东一路技术向前、融合至上
放眼疫情科技背后,盘点京东一路坚持贯彻的“技术转型”,我们发现,其实早在2017年初,全面加速转型的号角就已然在其内部吹响:在日前发布的2019年第四季度及全年财报数据显示,京东全年净服务收入为662亿元人民币,同比大幅增长44.1%,总收入占比超过10%,如此说明什么问题?足见技术与服务正逐渐成为其增长的又一重要引擎。

除此之外,晶少得知,2019年京东体系所属上市及非上市企业合计研发投入达179亿元,研发投入同比增长高达47.8%,已跃升为对技术投入*多的中国企业之一,成绩表现着实可圈可点。具体来讲在云计算领域,截至2019年,京东云累计建基地及落地城市云超过40个,合作伙伴超过2500,注册用户超过69万,推出300+款产品与服务,实现100%云上订单,拥有全球*大规模Docker集群之一和中国*大的GPU集群之一。

另外在物联网技术领域,京东方面2014年就率先进行业务布局并发布*个自主研发,跨品牌,跨品类的智能家居互联互通平台。目前该智能家居互联互通平台可连接高质量设备突破1.5亿台,设备品类超230种,品牌超1000家,用户交互次数近20亿次。

如此发展,可以想见未来包括以安全、可信赖为核心差异化的基础云服务,以智能供应链为抓手的数字化、智能化产业互联网应用云服务,以边缘计算为代表的云、边、端协同的下一代智能云服务等在内的三个方向都势必成为主攻着力点。

深耕技术的同时,我们了解到目前恰逢互联网竞争已遁入下半场,人口红利正被2B企业服务(特别是技术服务)所取代;行业方面,随着AI、云计算等技术与IoT产业的融合,硬件与软件的协同趋势加剧,促使涉足2B领域的企业必须同时具备全产业链整合和供应链智能制造能力,从而覆盖全场景以及全品类。

在此背景下,作为一家以供应链为基础的技术与服务公司,京东技术战略强大之余走向融合实属必然,所以在趁热打铁之际,2019年12月京东集团再次加码对技术的投入,将原京东云、人工智能、物联网整合成为京东云与AI事业部,统一冠名为“京东智联云”品牌,并于2020年3月5日正式启用,技术融合释放更多价值,终成定局。

%title插图%num

着力解读新品牌内涵就会发现,总体来说LOGO所描绘的三种颜色分别代表了人工智能、物联网、云计算与大数据等多种前沿技术。对此京东集团技术委员会主席、京东云与AI总裁周伯文总结道,“京东智联云的品牌形象传承着京东‘红’,代表可信赖;搭配世界通用的科技‘蓝’,代表在京东价值观下对技术与创新的坚持;交互融合组成的无限符号‘ ∞’,代表互联互通的智联世界,也寓意更多不断发展变化的前沿科技。未来十年将是智能经济的时代,作为京东对外技术与服务输出的核心通道,将着力打造可信赖的智能技术,更好携手合作伙伴,始于信赖,胜于格局。”

就晶少理解,*简线条中 3个无限符号相互环绕交织,确实生动形象地表达了京东人工智能、物联网以及云计算融合形成的科技体系,未来将成为集团技术能力的统一输出窗口,但此种部门的整合、业务的合并以及品牌的融合*不仅仅是简单的“加法关系”,而是更多承载了“以人工智能(AI)为大脑、大数据(Big Data)为氧气、云(Cloud)为躯干、物联网(Device)为感知神经,以不断探索(Exploration)为好奇心”的京东技术“ABCDE”战略的有机体,以此为基础提供可信赖与高效率的前沿科技服务,为G(政府)、B(企业)、C(个人)端用户提供包括从基础资源到智能应用等各类产品与服务才是核心所在。

AI、云计算、 IoT的业务整合是技术发展的需要,也是“集中力量办大事”的考量,能够具备提供一站式、生态化技术解决方案的能力才更有助于将自身全面深厚的技术积累转化为技术势能,对内释放并对外赋能,正所谓“融合技术、释放价值、整合优势,输出一体化解决方案”就是这个道理。

技术融合在前,帮助用户补齐产业要素、实现产品创新、推进产业转型升级紧随其后,不容割裂。基于新品牌的着力打造,面对企业伙伴甚至是智能化初期企业,京东智联云未来想必会大力整合云、AI、IoT技术和产品,打造安全、可信赖差异化的基础云服务,共同进行产品技术创新和打磨。另外对于开发者而言,全新组合的京东智联云则是一个平台、技术与工具的乐园。稳定、丰富、高效、开放的特点让开发者尽情施展才华,开“箱”即用,部署成本低是常态。如今以NeuHub为核心载体的新一代智能供应链平台已成入选了科技部公布的智能供应链国家新一代人工智能开放创新平台,未来会让更多产业开发者受益匪浅。

%title插图%num

由简入深,技术以场景致胜,联接场景、赋能产业也是未来京东智联云内外赋能的重要一环。通过数字企业和数字政府两大主要场景,京东智联云协同打造零售、物流、金融、城市四朵云和强大丰富的生态平台,提供从底层资源到上层应用的全面服务,凭借自身在零售、物流、金融等领域多年深耕所积累的场景和技术优势,为客户提供更多、更好、更融合、更场景化的技术与服务,构建统一平台生态。想必此举也是助推内部技术能力、资源优势来搭建京东技术大中台,将技术势能通过技术中台对内释放和对外赋能的重要抓手之一。

回到行文*初,疫情之内我们看到了京东智联云携手宿迁联通、鸿联九五在江苏推出疫情防控外呼机器人公益活动;我们看到了京东智联云助力黑龙江省前进农场,在抗击疫情*艰难的时刻用技术短时间内帮助解决抗疫、生产物资供应等紧急问题;我们同时也看到了由京东智联云为海淀区政府定制部署,提供“应急物资、疫情动态、企业服务、市民服务”等多重服务,全面支持北京市海淀区应急防疫工作的诸多举措……这不正是京东通过可信赖的AI+云+端技术打造云智联世界,探索前沿科技,抵达真实生活,展望美好未来的集中展现吗?

疫情之外,如今越来越多的“智能”走入日常生活,随时随地享受数字经济时代带来的便捷渐渐演变成人们生活的主旋律。可以肯定的一点,未来品牌升级之后的京东智联云势必将大力联手各方,通过云、边、端提供丰富、稳定且易用的产品、服务与解决方案,将智能科技落地千万家,民之所想、技术所向。

如今智能经济时代已开启,消费者服务面临升级,企业技术服务的黄金机遇也已到来,我们相信品牌升级之后的京东智联云,未来定将一如既往,利用自身沉淀的能力洞察以及各产业场景中的实战经验,铸造更多“硬核”技术力量服务民生、技术报国,在一线。
————————————————

原文链接:https://blog.csdn.net/sch881226/article/details/104747505

记一次服务器磁盘无可用空间问题的解决方案

问题回顾:

有一天突然发现A系统上传文件报500错误no space disk leaf.

环境:

linux服务器 tomcat7

问题定位:

根据tomcat的异常说明在上传文件时linux服务器本地磁盘不足,随后便登录到服务器上查看

使用df -h 发现目录/export使用了近24G的磁盘,但是用户 du -chs /export发现只有3.5G大小。根本对不上。怀疑是隐藏文件过大导致,使用命令 du -chs .[!.]* * 发现只有一个4K的隐藏文件。*后查资料后,使用lsof命令 发现存在文件被删除但是由于进程还存活导致磁盘根本没有释放。

坑点:

在删除大文件(日志文件)不要使用rm命令,尽量使用>xxx.log命令来执行清空日志文件。

准备建个人记录站 购买什么服务器好呢

非程序员,现在买了个.top 的域名,再买个服务器,套个 wordpress 模板就可以跑起来了对嘛 准备买腾讯云的云+校园*低版 这样可以吗

looseChen 2019-10-30 11:01:03 +08:00 ❤️ 1
建议买个配置低的,先把项目跑起来再说。
windyland 2
windyland 2019-10-30 11:04:39 +08:00 via Android ❤️ 1
国内服务器需要备案,否则 http 会被阻断并跳转到备案页面
Kilerd 3
Kilerd 2019-10-30 11:22:35 +08:00 ❤️ 1
GitHub 加静态博客 才是长久之道
xenme 4
xenme 2019-10-30 11:23:38 +08:00 ❤️ 1
想自己折腾就买虚拟主机*便宜,或者免费的 GitHub

服务器还是太贵了
kenanremix 5
kenanremix 2019-10-30 11:34:13 +08:00
@Kilerd 那我去折腾下
@looseChen 我看了下配置*低都要 120
@xenme 便宜服务器就行 通过一个网页跳转到其他链接 如 steam weibo ins 等
@windyland 有 vultr 的服务器 但是每次安装 lnmp 的时候就断开连接了
looseChen 6
looseChen 2019-10-30 17:22:43 +08:00
@kenanremix 不用吧,阿里云我记得有 86 一年 t5 的,你如果需要购买,可以进我的团,我把返现退给你
tianyu1234 7
tianyu1234 2019-10-31 07:51:31 +08:00 via iPhone
腾讯云去年 100 一年开车的服务器。1C2G1M50G,刚买的时候性能挺强的,速度也快。现在跑个 WP 都堪忧。
LiJie 8
LiJie 2019-11-02 14:20:31 +08:00
境外服务器吧,自在很多。性价比不必境内差。
ooobsidian 9
ooobsidian 2019-11-03 11:05:54 +08:00
就阿里云的学生机吧,10 元 /月
bzmoo 10
bzmoo 2019-11-04 15:11:24 +08:00
@looseChen 今天折腾大半天,还是决定买 3 年 T5 那个,就个人记录应该够用了,麻烦给个团链接吧,不需要返现~

looseChen 2019-11-04 21:57:32 +08:00 via iPhone
@bzmoo
v 站不让发这种链接,
vx: Y2hlbmppbnlhbmc4MzIyMDc=

这是 base64
chinesestudio 12
chinesestudio 2019-11-05 23:44:31 +08:00 via Android
还是买个虚拟机吧 别人又多了一个肉鸡
looseChen 13
looseChen 2019-11-06 09:42:38 +08:00
@bzmoo 老哥,你能收到我的回复吗,我怎么感觉我被降权了
leffz 14
leffz 306 天前
看你的服务器要求不高,选*低配的就行了

疫情之下,Nutanix推创新性解决方案助力企业发展

一场突如其来的疫情,打乱了人们春节探亲访友的步伐,“隔离、延迟复工/开学、远程办公”等成为2020开年的关键词,大家的生活方式也随之发生了变化。为打赢这场疫情防控阻击战,数千名医护人员奔赴疫区,与此同时,还有一大批科技公司加入战斗。Nutanix就是这其中的一位。

“与2003年的‘非典’时期不同,随着互联网、云计算的快速发展和应用,再次面对突发事件,很多企业客户已经能够应对自如。”Nutanix中国区董事总经理马莉在接受采访时表示,疫情期间,“远程办公”似乎成为了一种常态现象。相应的,也产生了大量新的需求和新的趋势。数据显示,从2月10号开工以来,全国保守估计有近2亿人通过远程办公的方式工作。这背后所代表是则是一些企业已经利用一系列软件解决方案和应用来应对了近来的不可预测和不确定因素,确保了业务的连续性。毫无疑问,云技术在其中起了重要作用。

作为技术*的企业云软件和超融合解决方案厂商,Nutanix在疫情期间把员工的健康和安全放在首位的同时,也在关注客户的现有产品使用情况。他们积*与合作伙伴进行联络,建立合作伙伴和客户的培训机制等,助力合作伙伴应对此次疫情。

为了更好地助力中国企业保持平稳运行,Nutanix发布了相应的举措来支持中国企业:3月3日,Nutanix宣布向所有中国企业提供桌面即服务(DaaS)解决方案Xi  Frame 的增强免费试用版,帮助中国企业解决因员工无法正常工作而导致的企业生产力下降问题;3月12日,Nutanix宣布新增5个数据中心扩展Xi Frame虚拟桌面服务在亚太和日本地区的可用性,进一步支持受疫情影响企业。

“我们在这个时间段推出一系列的解决方案,就是希望能够帮助到合作伙伴来复工复产,保证业务连续性。”马莉表示,IDC预测,到2021年中国90%以上的企业会采用多云组合的方式,即采用公有云、多云,私有平台这样一个组合的方式来运营它的信息系统。在疫情影响的推动下,我们看到这个进程其实是在加速的,而且很多客户已经在考虑和启动多云环境来推进他的业务了。

多云环境下,虚拟桌面架构(VDI)和桌面即服务(DaaS),成为疫情期间远程办公的理想解决方案,其原因主要有两点:产品的灵活性、方便性,在任何时间、任何地点、任何设备上都可以进行的便捷、安全、高效的远程办公体验;以及对信息的安全、数据的安全,包括如何能够保证效率和长期的投入、产出等优势,被更多的客户和企业关注。
%title插图%num

虽然VDI与DaaS都是远程办公场景,但涉及到基础架构层面,两者是大有不同的。Nutanix中国区技术总监夏峰先生介绍到,Nutanix后台的架构可以随着并发用户数增加能灵活、水平地扩展,而且可按需扩展的。现在使用的VDI主要有两大供应商:Citrix和VMware。Nutanix和两家都有着紧密的合作,可以为客户提供整合的VDI解决方案。

%title插图%num

夏峰讲到,VDI的优势在于能够为企业带来的*大价值在于其能够让企业在不牺牲业务安全性、生产力或性能的情况下,为人员提供流动性和灵活性。Nutanix 超融合架构是*适合虚拟桌面架构的数据中心架构,这样一种架构就是为了应对并发用户数的提升或者是将来用户突然间的增长。在疫情下,原来很多使用VDI的客户,一下子并发的办公人数增多,对Nutanix提出的需求更多的是扩容,要求增加节点,要求应对更多的用户这样一些需求。当然还有一些客户可能是原来没有考虑VDI,现在要考虑建设远程桌面。

在采访的过程中,夏峰为我们举了澳大利亚客户的一个例子。这个客户临时因为疫情管控,员工不能面对面工作。客户临时决定要把原来的预算用来做VDI,它选用了Nutanix的底层架构。*终,Nutanix只用了两天的时间布了1千个点,让企业的员工在家里面能够拨入到公司里面的一些数据和应用环境,能够支撑它的员工在家里办公。“底层用 Nutanix 易于管理,非常灵活,能够非常迅速地部署,安全性又很高。这些条件其实都可以让用户考虑快速地在Nutanix的产品上部署自己远程办公的系统和环境。”夏峰如是说。

另一方面,就DaaS来说,这其实是一种完全外包的虚拟桌面解决方案。它既不依赖也不占用任何内部硬件资源,能够提供与VDI相同的灵活性、安全性和权限,但完全由第三方处理,并且托管在他们的云上。在公有云市场刚刚兴起的早期阶段,许多服务商就已经可以提供这样的服务。夏峰在采访中还提到,DaaS是可以立即启用,不需要企业在数据中心提供相应的架构来支撑这样的计算和存储,而且云平台就是把这样一个基础架构的建设从一次性投入转变为按需投入的模式。
%title插图%num

“Nutanix的Xi Frame其实也是这样的一种解决方案,而且,Xi Frame可以提供各种用户的认证方式,以及任意的交互。”夏峰讲到,目前,Nutanix 的Xi Frame解决方案有两种落地方式:因中国的特殊互联网管理要求,选择与跟国内公有云厂商或者服务提供商合作提供DaaS服务。另外一种,是本地“Xi Frame”,即用户自己把数据或者桌面的分配方式放在云上,企业通过云上的控制平面,在自己的数据中心搭建本地的虚拟桌面。

%title插图%num

夏峰强调,如果大家在远程办公中需要使用VDI或者DaaS环境,并且想要获得良好的云体验,就必须保证企业后台的现代化数据中心是一个水平扩展的架构,这个其实也是Nutanix一直致力的方向。

“Nutanix作为一个未来的多云环境当中的重要的提供商,希望能持续的有一些创新的想法,创新的做法,并推到这个市场当中,能够帮中国的客户,帮我们的合作伙伴渡过难关。“正如马莉*后所谈到的,Nutanix已经吹响科技战“疫”的号角,全力为打赢疫情战做努力。
————————————————

原文链接:https://blog.csdn.net/sch881226/article/details/105114609

python爬虫–协程(初识)

python爬虫–协程(初识)

python爬虫–协程
基本知识
event_loop:事件循环,相当于一个无限循环,我们可以把一些函数注册到这个事件循环上,当满足某些条件的时候,函数就会被循环执行。
coroutine:携程对象,我们可以将携程对象注册到事件循环中,它会被时间循环调用。我们可以使用async关键字来定义一个方法,这个方法在调用时不会被立即执行,而是返回一个协程对象。
task:任务,它是对协程对象的进一步封装, 包含了任务的各个状态。
future:代表将来执行或还没有执行的任务,实际上和task 没有本质区别。
async定义-个协程.
await用来挂起阻塞方法的执行。
协程的基本使用
import asyncio

async def request(url):
print(‘正在请求的url是:’,url)
print(‘请求成功:’,url)
#async修饰的函数,调用之后返回的一个协程对象
c = request(‘www.baidu.com’)

# #创建一个事件循环对象
# loop = asyncio.get_event_loop()
#
# #将携程对象注册到loop中,然后启动loop
# loop.run_until_complete(c)

# #task的使用
# loop = asyncio.get_event_loop()
# #基于loop创建一个task对象
# task = loop.create_task(c)
# print(task)
# loop.run_until_complete(task)
# print(task)

#future的使用
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(c)
print(task)
loop.run_until_complete(task)
print(task)

多任务协程实现
import asyncio
import time

async def request(url):
print(‘正在请求的url是:’,url)
#在异步协程中如果出现同步模块相关的代码,那么就无法实现异步
#time.sleep(2)
await asyncio.sleep(2)
print(‘请求成功:’,url)
#async修饰的函数,调用之后返回的一个协程对象
start = time.time()
urls = {
‘www.123.com’,
‘www.234.com’,
‘www.345.com’
}
#存放多个任务对象
stask = []
for url in urls:
c = request(url)
task = asyncio.ensure_future(c)
stask.append(task)
loop = asyncio.get_event_loop()

loop.run_until_complete(asyncio.wait(stask))

print(time.time()-start)

多任务协程异步实现
在进行多任务协程实现前,还需要建立一个简单的本地http服务

from flask import Flask
import time

app = Flask(__name__)

@app.route(‘/azb’)
def index_azb():
time.sleep(2)
return ‘Hello azb’

@app.route(‘/xx’)
def index_xx():
time.sleep(2)
return ‘Hello xx’

@app.route(‘/hh’)
def index_hh():
time.sleep(2)
return ‘Hello hh’

if __name__ == ‘__main__’:
app.run(threaded=True)

实现%title插图%num

import requests,asyncio,time

start = time.time()
urls = [
‘http://127.0.0.1:5000/azb’,’http://127.0.0.1:5000/xx’,’http://127.0.0.1:5000/hh’
]

async def get_page(url):
print(‘正在下载’,url)
#request是基于同步,必须使用基于异步的网络请求模块
response = requests.get(url=url)
print(‘下载成功!’,url)

tasks = []

for url in urls:
c = get_page(url)
task = asyncio.ensure_future(c)
tasks.append(task)

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

print(‘总耗时’,time.time()-start)

aiohttp模块引入%title插图%num
import requests,asyncio,time,aiohttp

start = time.time()
urls = [
‘http://127.0.0.1:5000/azb’,’http://127.0.0.1:5000/xx’,’http://127.0.0.1:5000/hh’
]

async def get_page(url):
async with aiohttp.ClientSession() as session:
async with await session.get(url) as response:
#text()返回字符串形式的响应数据
#read()返回的二进制形式的响应数据
#json()返回的就是json对象
#获取响应数据操作之前一定要使用await进行手动挂起

page_text = await response.text()
print(page_text)

tasks = []

for url in urls:
c = get_page(url)
task = asyncio.ensure_future(c)
tasks.append(task)

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

print(‘总耗时’,time.time()-start)

%title插图%num

协程还是没有理解

Android 反编译的常用方式

首先反编译别人的APK,主要是学习别人的实现逻辑,给自己一个思路。比较商业的APK也不会给你留下这个漏洞,一些核心的业务处理会在后台进行操作;本地的 APK 也会进行混淆加密等。

好了废话不多说,步入正题:

方法一:在线反编译

很简单方便的一个方法,只要打开网页,把APK放进入,就可以在线编译了,不过速度比较慢,对于比较大型的APK还是不要用这种方法,容易出错。

网址:http://www.javadecompilers.com/apk

%title插图%num

方法二:利用apktool工具

需要用的工具有:

1、APK TOOL:这是谷歌提供的的编译工具,我们知道APK其实就是一个压缩文件,我们完全可以把.apk文件后缀改成.zip,这样我们就可以获取里面的资源文件(图片,res目录下的xml文件)和AndroidManifest.xml(这个是乱码的)如果你使用 apk tool 来进行反编译 apk 就不会出现这种问题了。下载地址:https://ibotpeaches.github.io/Apktool/install/ (需要fq)

2、dex2jar:将apk反编译成java源码(classes.dex转化成jar文件) 下载地址:http://sourceforge.net/projects/dex2jar/files/

3、jd-gui:用来查看 jar 包里面的代码的一种工具。官网下载地址:http://jd.benow.ca/

如果不方便fq,这里打包好三个工具下载:https://download.csdn.net/download/li815705994/12367490

下面说一下具体如何使用这个工具

*步:apk反编译得到程序的源代码、图片、XML配置、语言资源等文件

下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK文件放到该目录下,

打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:apktool.bat d -f  winsh.apk  -o text(apktool2.0以后用这个命令)

注意:(命令中winsh.apk指的是要反编译的APK文件全名, text为反编译后资源文件存放的目录名称,即为:apktool.bat   d  -f    [apk文件 ]  -o  [输出文件夹])

%title插图%num
如果成功了那你的目录下会出现一个text的文件夹

%title插图%num

text就是我们反编译的内容了,当然如果修改完想打包apk也是可以的,因为主题的原因这个就不细说了,网上有很多。

第二步:Apk反编译得到Java源代码

所需工具:dex2jar

将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出来的工具dex2jar-2.0 文件夹内,

在命令行下定位到dex2jar.bat所在目录,输入d2j-dex2jar.bat classes.dex,效果如下:

%title插图%num

第三步:使用jd-gui打开classes_dex2jar.jar文件

直接打开jd-gui.exe工具,在里面找到刚才的classes_dex2jar.jar,就可以了如下:

%title插图%num

注意:被混淆过的效果图(类文件名称以及里面的方法名称都会以a,b,c….之类的样式命名):

方法三:图形化反编译apk

需要下载Gapktool.jar,其实这个原理跟方法二是差不多的,只是这个更智能,不需要我们手动敲写命令,都是可视化的,简单方便。下载地址:https://download.csdn.net/download/li815705994/12367497

下载后直接点击Gapktool.bat,就会开启一个界面,把需要编译的apk放进去,在指定一个输出目录就可以了。

%title插图%num

1.运行Gapktool.bat
2.apk文件和输出目录使用英文路径

注意:默认使用jad反编译,如果编译出来的java代码难以阅读,请选择使用jd-gui反编译。
保留smali文件删除gen、src修改res里的文件后可以重修打包成apk使用。

总结:

开发者辛辛苦苦将自己的应用开发出来被别人一反编译便成为了他自己的东西,所以要进行混淆处理。

 

Python requests库参数提交 注意事项

Python requests库参数提交 注意事项

字典与json字符串区别

# python 中的字典格式,是dict类型
{‘a’: ‘sd’}
如果声明a = {“a”: “sd”},它仍是字典,不过python会默认将双引号换成单引号,*后打印的仍然为{‘a’: ‘sd’}

# python 中的json字符串,是str类型
{“a”: “sd”}
两者差别在于引号

在爬虫的过程中有些请求参数是json字符串的,有的是字典类型的,要区分json字符串和字典%title插图%num

json字符串格式如
点击view source%title插图%num

很显然是json字符串格式的,字典转json字符串可以用json.dumps()函数
用data=json.dumps({ })

字典格式如

%title插图%num
点击view source后得到的东西显然可以直接加到url后面的,直接用字典形式提交data={}即可

python爬虫-数据解析(xpath)

python爬虫-数据解析(xpath)

xpath基本概念
xpath解析:*常用且*便捷高效的一种解析方式。通用性强。

xpath解析原理
1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
2.调用etree对象中的xpath方法结合xpath表达式实现标签的定位和内容的捕获。
环境安装
pip install lxml
1
如何实例化一个etree对象:
from lxml import etree

1.将本地的html文件中的远吗数据加载到etree对象中:
etree.parse(filePath)
1
2.可以将从互联网上获取的原码数据加载到该对象中:
etree.HTML(‘page_text’)
1
xpath(‘xpath表达式’)
– /:表示的是从根节点开始定位。表示一个层级
– //:表示多个层级。可以表示从任意位置开始定位
– 属性定位://div[@class=’song’] tag[@attrName=’attrValue’]
– 索引定位://div[@class=’song’]/p[3] 索引从1开始的
– 取文本:
– /text()获取的是标签中直系的文本内容
– //text()标签中非直系的文本内容(所有文本内容)
– 取属性:
/@attrName ==>img/src

xpath爬取58二手房实例
爬取网址
https://xa.58.com/ershoufang/

完整代码
from lxml import etree
import requests

if __name__ == ‘__main__’:
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36’
}
url = ‘https://xa.58.com/ershoufang/’
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//section[@class=”list”]/div’)
fp = open(‘./58同城二手房.txt’,’w’,encoding=’utf-8′)
for div in div_list:
title = div.xpath(‘.//div[@class=”property-content-title”]/h3/text()’)[0]
print(title)
fp.write(title+’\n’+’\n’)

效果图

%title插图%num
xpath图片解析下载实例
爬取网址
https://pic.netbian.com/4kmeinv/

完整代码
import requests,os
from lxml import etree

if __name__ == ‘__main__’:
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36’
}
url = ‘https://pic.netbian.com/4kmeinv/’
page_text = requests.get(url=url,headers=headers).text
tree = etree.HTML(page_text)
li_list = tree.xpath(‘//div[@class=”slist”]/ul/li/a’)
if not os.path.exists(‘./piclibs’):
os.mkdir(‘./piclibs’)
for li in li_list:
detail_url =’https://pic.netbian.com’ + li.xpath(‘./img/@src’)[0]
detail_name = li.xpath(‘./img/@alt’)[0]+’.jpg’
detail_name = detail_name.encode(‘iso-8859-1’).decode(‘GBK’)
detail_path = ‘./piclibs/’ + detail_name
detail_data = requests.get(url=detail_url, headers=headers).content
with open(detail_path,’wb’) as fp:
fp.write(detail_data)
print(detail_name,’seccess!!’)

效果图%title插图%num

xpath爬取全国城市名称实例
爬取网址
https://www.aqistudy.cn/historydata/

完整代码
import requests
from lxml import etree

if __name__ == ‘__main__’:
url = ‘https://www.aqistudy.cn/historydata/’
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36’,
}
page_text = requests.get(url=url,headers=headers).content.decode(‘utf-8’)
tree = etree.HTML(page_text)
#热门城市 //div[@class=”bottom”]/ul/li
#全部城市 //div[@class=”bottom”]/ul/div[2]/li
a_list = tree.xpath(‘//div[@class=”bottom”]/ul/li | //div[@class=”bottom”]/ul/div[2]/li’)
fp = open(‘./citys.txt’,’w’,encoding=’utf-8′)
i = 0
for a in a_list:
city_name = a.xpath(‘.//a/text()’)[0]
fp.write(city_name+’\t’)
i=i+1
if i == 6:
i = 0
fp.write(‘\n’)
print(‘爬取成功’)

效果图

%title插图%num
xpath爬取简历模板实例
爬取网址
https://sc.chinaz.com/jianli/free.html

完整代码
import requests,os
from lxml import etree

if __name__ == ‘__main__’:
url = ‘https://sc.chinaz.com/jianli/free.html’
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36’,
}
page_text = requests.get(url=url,headers=headers).content.decode(‘utf-8’)
tree = etree.HTML(page_text)
a_list = tree.xpath(‘//div[@class=”box col3 ws_block”]/a’)
if not os.path.exists(‘./简历模板’):
os.mkdir(‘./简历模板’)
for a in a_list:
detail_url = ‘https:’+a.xpath(‘./@href’)[0]
detail_page_text = requests.get(url=detail_url,headers=headers).content.decode(‘utf-8’)
detail_tree = etree.HTML(detail_page_text)
detail_a_list = detail_tree.xpath(‘//div[@class=”clearfix mt20 downlist”]/ul/li[1]/a’)
for a in detail_a_list:
download_name = detail_tree.xpath(‘//div[@class=”ppt_tit clearfix”]/h1/text()’)[0]
download_url = a.xpath(‘./@href’)[0]
download_data = requests.get(url=download_url,headers=headers).content
download_path = ‘./简历模板/’+download_name+’.rar’
with open(download_path,’wb’) as fp:
fp.write(download_data)
print(download_name,’success!!’)

效果图

%title插图%num

Android反编译工具(二)

文章目录

1、apktool
命令
制作各个平台工具
**windows**
**linux**
**mac**
2、dex2jar + jd-gui
3、 enjarify + jd-gui
4、jadx
1、apktool
一般用于获取AndroidManifest.xml和资源文件

官网:https://ibotpeaches.github.io/Apktool/install/

下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads/

命令

1 java -jar apktool.jar [解压文件名] -o [解压路径]

制作各个平台工具
windows
@echo off
if “%PATH_BASE%” == “” set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
chcp 65001 2>nul >nul
java -jar -Duser.language=en -Dfile.encoding=UTF8 “%~dp0\apktool.jar” %*

linux
https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool

mac
https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/osx/apktool

2、dex2jar + jd-gui
将apk中dex文件反编译成jar,并使用jd-gui查看代码

下载地址:https://sourceforge.net/projects/dex2jar/files/

命令

1 d2j-dex2jar.bat app-debug.apk -o app-debug.jar

3、 enjarify + jd-gui
google出品

下载地址 :https://github.com/Storyyeller/enjarify

命令

1 enjarify *.apk -o out.jar

4、jadx
下载地址:https://github.com/skylot/jadx/releases

直接点击jadx-0.9.0\bin下的jadx-gui.bat

Android反编译工具(一)

Apktool
https://github.com/iBotPeaches/Apktool

可以反编译apk,也可以重新打包apk
下载地址:https://github.com/iBotPeaches/Apktool/releases
brew安装:brew install apktool
文档:https://ibotpeaches.github.io/Apktool/documentation
apktool d test.apk

dex2jar
https://github.com/pxb1988/dex2jar

可以将.dex文件反编译成.class文件并打包成jar
下载地址:https://github.com/pxb1988/dex2jar/releases
brew安装:brew install dex2jar
文档:https://github.com/pxb1988/dex2jar/wiki
d2j-dex2jar classes.dex

jd-gui
https://github.com/java-decompiler/jd-gui

%title插图%num

可以查看.class文件,用来查看dex2jar反编译出的jar
下载地址:https://github.com/java-decompiler/jd-gui/releases
brew安装:brew install jd-gui

jadx-gui
https://github.com/skylot/jadx

可以直接浏览反编译后的apk
下载地址:https://github.com/skylot/jadx/releases

uber-apk-signer
https://github.com/patrickfav/uber-apk-signer

可以对apk签名,支持V1、V2
下载地址:https://github.com/patrickfav/uber-apk-signer/releases
文档:https://github.com/patrickfav/uber-apk-signer/blob/master/README.md
java -jar uber-apk-signer.jar -a [apk路径] –ks [keystore路径] –ksAlias [alias名称]

java2smali
https://github.com/ollide/intellij-java2smali

%title插图%num %title插图%num

IntelliJ IDEA和Android Studio的插件,可以将Java和Kotlin文件编译为smali
下载地址:https://github.com/ollide/intellij-java2smali/releases