首页 文章 精选 留言 我的

精选列表

搜索[Python],共10000篇文章
优秀的个人博客,低调大师

Python爬虫(一)——豆瓣下图书信息

爬虫目的: 随着近年互联网的发展,网络上的信息飞速数量增长。在庞大的数据面前想要获得期望的信息往往如同大海捞针。通过合理的筛选,在百万甚至数亿计的数据中找到所需信息,无疑有着非常大的意义。 在豆瓣网下,有很多与日常生活相关的模块网站 内置的评分评价功能可以为用户提供很大选择空间,以豆瓣读书为例: 其中包含六个大型模块(文学,流行,文化,生活,经管,科技),内部细分了145个小型模块。 在以数十万计的图书信息中,找到各模块中热门好评图书,对于读者或是书商都是很重要的。 爬虫代码概述 一.数据存储 csv文件存储,为方便后继使用pandas进行分析,对于爬取的html文件使用BeautifulSoup进行解析 字段选择为 : 书名(titles) 作者/出版社(authors) 评分(nums) 评论数(peoples) 1 csvinfo = open(name + '.csv', 'ab') 2 begcsv = csv.writer(csvinfo) 3 begcsv.writerow(['titles', 'authors', 'nums', 'peoples']) 4 csvinfo.close() 二.网页解析 html中书名(titles) 作者/出版社(authors) 评分(nums) 评论数(peoples)等字段对应selector分别为: #subject_list > ul > li > div.info > h2 > a #subject_list > ul > li > div.info > div.pub #subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums #subject_list > ul > li > div.info > div.star.clearfix > span.pl 解析代码如下 : 1 # 爬取指定name模块的url,并存储至name.csv文件 2 def web(url, name): 3 db_data = requests.get(url, headers=header) 4 soup = BeautifulSoup(db_data.text, 'lxml') 5 titles = soup.select('#subject_list > ul > li > div.info > h2 > a') 6 authors = soup.select('#subject_list > ul > li > div.info > div.pub') 7 nums = soup.select('#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums') 8 peoples = soup.select('#subject_list > ul > li > div.info > div.star.clearfix > span.pl') 9 10 for title, author, num, people in zip(titles, authors, nums, peoples): 11 data = [ 12 ( 13 title.get('title'), 14 author.get_text().replace(' ', '').replace("\n", ""), 15 num.get_text().replace(' ', '').replace("\n", ""), 16 people.get_text().replace(' ', '').replace("\n", "") 17 ) 18 ] 19 csvfile = open(name + '.csv', 'ab') 20 writer = csv.writer(csvfile) 21 print(data) 22 writer.writerows(data) 23 csvfile.close() 三.请求头设置 1 header = { 2 'Accept': '*/*;', 3 'Connection': 'keep-alive', 4 'Accept-Language': 'zh-CN,zh;q=0.9', 5 'Accept-Encoding': 'gzip, deflate, br', 6 'Host': 'book.douban.com', 7 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36' 8 } 四.图书分页 在豆瓣的反爬虫机制中,正常人浏览习惯只会查看靠前的页码,而位于后面的一般不会查看, 所以豆瓣将50页之后的书籍信息设置为只能通过搜索查询,在分页中无法查看。url规则为每页加20,get请求,所以在确定标签后,可以修改start值来换页。 代码: 1 # name模块标签分页 指定为前50页 2 def setCsv(name): 3 url = 'https://book.douban.com/tag/' + name 4 urls = [('https://book.douban.com/tag/' + name + '?start={}&type=T').format(str(i)) for i in range(20, 980, 20)] 5 info(name=name) 6 web(url, name) 7 for single_url in urls: 8 print(single_url) 9 web(single_url, name=name) 五.完整代码 1 # -*- coding: utf-8 -*- 2 from bs4 import BeautifulSoup 3 import requests 4 import csv 5 import sys 6 7 reload(sys) 8 sys.setdefaultencoding('utf-8') 9 10 # 请求头设置 11 header = { 12 'Accept': '*/*;', 13 'Connection': 'keep-alive', 14 'Accept-Language': 'zh-CN,zh;q=0.9', 15 'Accept-Encoding': 'gzip, deflate, br', 16 'Host': 'book.douban.com', 17 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36' 18 } 19 20 21 # 初始化csv文件 22 def info(name): 23 csvinfo = open(name + '.csv', 'ab') 24 begcsv = csv.writer(csvinfo) 25 begcsv.writerow(['titles', 'authors', 'nums', 'peoples']) 26 csvinfo.close() 27 28 29 # 爬取指定name模块的url,并存储至name.csv文件 30 def web(url, name): 31 db_data = requests.get(url, headers=header) 32 soup = BeautifulSoup(db_data.text, 'lxml') 33 titles = soup.select('#subject_list > ul > li > div.info > h2 > a') 34 authors = soup.select('#subject_list > ul > li > div.info > div.pub') 35 nums = soup.select('#subject_list > ul > li > div.info > div.star.clearfix > span.rating_nums') 36 peoples = soup.select('#subject_list > ul > li > div.info > div.star.clearfix > span.pl') 37 38 for title, author, num, people in zip(titles, authors, nums, peoples): 39 data = [ 40 ( 41 title.get('title'), 42 author.get_text().replace(' ', '').replace("\n", ""), 43 num.get_text().replace(' ', '').replace("\n", ""), 44 people.get_text().replace(' ', '').replace("\n", "") 45 ) 46 ] 47 csvfile = open(name + '.csv', 'ab') 48 writer = csv.writer(csvfile) 49 print(data) 50 writer.writerows(data) 51 csvfile.close() 52 53 54 # name模块标签分页 指定为前50页 55 def setCsv(name): 56 url = 'https://book.douban.com/tag/' + name 57 urls = [('https://book.douban.com/tag/' + name + '?start={}&type=T').format(str(i)) for i in range(20, 980, 20)] 58 info(name=name) 59 web(url, name) 60 for single_url in urls: 61 print(single_url) 62 web(single_url, name=name) 63 64 65 if __name__ == '__main__': 66 setCsv(str) #str为标签名 六.数据结果 1 wber@wber:~/桌面$ tree -h 数据 2 数据 3 ├── [4.0K] 经管 4 │ ├── [ 41K] 策划.csv 5 │ ├── [ 79K] 创业.csv 6 │ ├── [ 70K] 股票.csv 7 │ ├── [ 98K] 管理.csv 8 │ ├── [ 67K] 广告.csv 9 │ ├── [ 90K] 金融.csv 10 │ ├── [ 95K] 经济学.csv 11 │ ├── [ 79K] 理财.csv 12 │ ├── [ 43K] 企业史.csv 13 │ ├── [ 94K] 商业.csv 14 │ ├── [ 89K] 投资.csv 15 │ └── [ 86K] 营销.csv 16 ├── [4.0K] 科技 17 │ ├── [ 19K] UCD.csv 18 │ ├── [ 21K] UE.csv 19 │ ├── [ 64K] web.csv 20 │ ├── [ 92K] 编程.csv 21 │ ├── [ 43K] 程序.csv 22 │ ├── [ 89K] 互联网.csv 23 │ ├── [ 33K] 交互.csv 24 │ ├── [ 64K] 交互设计.csv 25 │ ├── [ 66K] 科技.csv 26 │ ├── [100K] 科普.csv 27 │ ├── [ 99K] 科学.csv 28 │ ├── [5.8K] 神经网络.csv 29 │ ├── [ 48K] 算法.csv 30 │ ├── [ 20K] 通信.csv 31 │ └── [ 65K] 用户体验.csv 32 ├── [4.0K] 流行 33 │ ├── [ 23K] J.K.罗琳.csv 34 │ ├── [ 67K] 阿加莎·克里斯蒂.csv 35 │ ├── [ 37K] 安妮宝贝.csv 36 │ ├── [ 18K] 沧月.csv 37 │ ├── [ 81K] 穿越.csv 38 │ ├── [ 75K] 耽美.csv 39 │ ├── [ 76K] 东野圭吾.csv 40 │ ├── [ 21K] 高木直子.csv 41 │ ├── [ 37K] 古龙.csv 42 │ ├── [ 22K] 郭敬明.csv 43 │ ├── [ 50K] 韩寒.csv 44 │ ├── [106K] 绘本.csv 45 │ ├── [ 40K] 几米.csv 46 │ ├── [ 49K] 金庸.csv 47 │ ├── [ 99K] 科幻.csv 48 │ ├── [ 97K] 科幻小说.csv 49 │ ├── [ 19K] 落落.csv 50 │ ├── [ 98K] 漫画.csv 51 │ ├── [ 91K] 魔幻.csv 52 │ ├── [ 98K] 奇幻.csv 53 │ ├── [ 90K] 青春.csv 54 │ ├── [ 85K] 青春文学.csv 55 │ ├── [ 86K] 日本漫画.csv 56 │ ├── [ 65K] 三毛.csv 57 │ ├── [ 96K] 推理.csv 58 │ ├── [ 97K] 推理小说.csv 59 │ ├── [ 83K] 网络小说.csv 60 │ ├── [ 76K] 武侠.csv 61 │ ├── [ 46K] 校园.csv 62 │ ├── [ 94K] 悬疑.csv 63 │ ├── [ 84K] 言情.csv 64 │ ├── [ 62K] 亦舒.csv 65 │ ├── [ 80K] 张小娴.csv 66 │ └── [ 14K] 张悦然.csv 67 ├── [4.0K] 生活 68 │ ├── [ 82K] 爱情.csv 69 │ ├── [ 93K] 成长.csv 70 │ ├── [ 49K] 家居.csv 71 │ ├── [ 80K] 健康.csv 72 │ ├── [ 93K] 教育.csv 73 │ ├── [ 88K] 励志.csv 74 │ ├── [ 70K] 两性.csv 75 │ ├── [ 89K] 灵修.csv 76 │ ├── [ 85K] 旅行.csv 77 │ ├── [ 82K] 美食.csv 78 │ ├── [ 85K] 女性.csv 79 │ ├── [ 83K] 情感.csv 80 │ ├── [ 58K] 人际关系.csv 81 │ ├── [ 85K] 摄影.csv 82 │ ├── [ 89K] 生活.csv 83 │ ├── [ 67K] 手工.csv 84 │ ├── [100K] 心理.csv 85 │ ├── [ 64K] 养生.csv 86 │ ├── [ 80K] 游记.csv 87 │ ├── [ 86K] 职场.csv 88 │ └── [ 21K] 自助游.csv 89 ├── [4.0K] 文化 90 │ ├── [ 93K] 传记.csv 91 │ ├── [ 94K] 电影.csv 92 │ ├── [ 77K] 二战.csv 93 │ ├── [ 69K] 佛教.csv 94 │ ├── [ 76K] 国学.csv 95 │ ├── [ 78K] 回忆录.csv 96 │ ├── [ 88K] 绘画.csv 97 │ ├── [ 86K] 建筑.csv 98 │ ├── [ 75K] 近代史.csv 99 │ ├── [ 76K] 军事.csv 100 │ ├── [ 61K] 考古.csv 101 │ ├── [ 91K] 历史.csv 102 │ ├── [ 82K] 美术.csv 103 │ ├── [ 89K] 人文.csv 104 │ ├── [ 85K] 人物传记.csv 105 │ ├── [ 91K] 社会.csv 106 │ ├── [ 93K] 社会学.csv 107 │ ├── [ 90K] 设计.csv 108 │ ├── [ 84K] 数学.csv 109 │ ├── [ 90K] 思想.csv 110 │ ├── [ 89K] 文化.csv 111 │ ├── [ 90K] 西方哲学.csv 112 │ ├── [ 79K] 戏剧.csv 113 │ ├── [102K] 心理学.csv 114 │ ├── [ 96K] 艺术.csv 115 │ ├── [ 82K] 艺术史.csv 116 │ ├── [ 82K] 音乐.csv 117 │ ├── [ 95K] 哲学.csv 118 │ ├── [ 90K] 政治.csv 119 │ ├── [ 89K] 政治学.csv 120 │ ├── [ 80K] 中国历史.csv 121 │ ├── [ 67K] 自由主义.csv 122 │ └── [ 86K] 宗教.csv 123 └── [4.0K] 文学 124 ├── [ 32K] 茨威格.csv 125 ├── [ 66K] 村上春树.csv 126 ├── [ 67K] 当代文学.csv 127 ├── [ 19K] 杜拉斯.csv 128 ├── [ 89K] 儿童文学.csv 129 ├── [ 24K] 港台.csv 130 ├── [ 76K] 古典文学.csv 131 ├── [ 92K] 经典.csv 132 ├── [ 40K] 鲁迅.csv 133 ├── [ 16K] 米兰·昆德拉.csv 134 ├── [ 84K] 名著.csv 135 ├── [ 23K] 钱钟书.csv 136 ├── [ 87K] 日本文学.csv 137 ├── [ 75K] 散文.csv 138 ├── [ 76K] 诗词.csv 139 ├── [ 87K] 诗歌.csv 140 ├── [ 79K] 随笔.csv 141 ├── [ 91K] 童话.csv 142 ├── [ 79K] 外国名著.csv 143 ├── [ 99K] 外国文学.csv 144 ├── [ 61K] 王小波.csv 145 ├── [ 89K] 文学.csv 146 ├── [ 88K] 小说.csv 147 ├── [ 31K] 余华.csv 148 ├── [ 73K] 杂文.csv 149 ├── [ 60K] 张爱玲.csv 150 └── [ 71K] 中国文学.csv 151 152 6 directories, 142 files

优秀的个人博客,低调大师

Python3源码—Dict对象

7.1. 散列表 散列表的基本思想,是通过一定的函数将需搜索的键值映射为一个整数,将这个整数视为索引值去访问某片连续的内存区域。理论上,在最优情况下,散列表能提供O(1)复杂度的搜索效率。 用于映射的函数称为散列函数(hash function),而映射后的值称为元素的散列值(hash value)。在散列表的实现中,所选择的散列函数的优劣将直接决定所实现的散列表的搜索效率的高低。 在使用散列表的过程中,不同的对象经过散列函数的作用,可能被映射为相同的散列值。而且随着需要存储的数据的增多,这样的冲突就会发生得越来越频繁。散列冲突是散列技术与生俱来的问题。 装载率是散列表中已使用空间和总空间的比值。如果散列表一共可以容纳10个元素,而当前已经装入了6个元素,那么装载率就是6/10。研究表明,当散列表的装载率大于2/3时,散列冲突发生的概率就

优秀的个人博客,低调大师

python itchat 爬取微信好友信息

原文链接:https://mp.weixin.qq.com/s/4EXgR4GkriTnAzVxluJxmg 「itchat」一个开源的微信个人接口,今天我们就用itchat爬取微信好友信息,无图言虚空 三张图分别是「微信好友头像拼接图」、「性别统计图」、「个性签名统计图」 「微信好友头像拼接图」 image 「性别统计图」 image 「个性签名统计图」 image 安装 pip3 install itchat 主要用到的方法:itchat.login() 微信扫描二维码登录itchat.get_friends() 返回完整的好友列表,每个好友为一个字典, 其中第一项为本人的账号信息,传入update=True, 将更新好友列表并返回, get_friends(update=True) itchat.get_head_img(userName="") 根据userName获取好友头像 微信好友头像拼接图 获取好友信息,get_head_img拿到每个好友的头像,保存文件,将头像缩小拼接至一张大图。 先获取好友头像: def headImg(): itchat.login() friends = itchat.get_friends(update=True) # itchat.get_head_img() 获取到头像二进制,并写入文件,保存每张头像 for count, f in enumerate(friends): # 根据userName获取头像 img = itchat.get_head_img(userName=f["UserName"]) imgFile = open("img/" + str(count) + ".jpg", "wb") imgFile.write(img) imgFile.close() 这里需要提前在同目录下新建了文件夹img,否则会报No such file or directory错误,img用于保存头像图片,遍历好友列表,根据下标count命名头像,到这里可以看到文件夹里已经保存了所有好友的头像。 接下来就是对头像进行拼接 遍历文件夹的图片,random.shuffle(imgs)将图片顺序打乱 用640*640的大图来平均分每一张头像,计算出每张正方形小图的长宽,压缩头像,拼接图片,一行排满,换行拼接,好友头像多的话,可以适当增加大图的面积,具体代码如下: def createImg(): x = 0 y = 0 imgs = os.listdir("img") random.shuffle(imgs) # 创建640*640的图片用于填充各小图片 newImg = Image.new('RGBA', (640, 640)) # 以640*640来拼接图片,math.sqrt()开平方根计算每张小图片的宽高, width = int(math.sqrt(640 * 640 / len(imgs))) # 每行图片数 numLine = int(640 / width) for i in imgs: img = Image.open("img/" + i) # 缩小图片 img = img.resize((width, width), Image.ANTIALIAS) # 拼接图片,一行排满,换行拼接 newImg.paste(img, (x * width, y * width)) x += 1 if x >= numLine: x = 0 y += 1 newImg.save("all.png") 好友头像图成型,头像是随机打乱拼接的 image 性别统计图 同样itchat.login()登录获取好友信息,根据Sex字段判断性别,1 代表男性(man),2 代表女性(women),3 未知(unknown) def getSex(): itchat.login() friends = itchat.get_friends(update=True) sex = dict() for f in friends: if f["Sex"] == 1: #男 sex["man"] = sex.get("man", 0) + 1 elif f["Sex"] == 2: #女 sex["women"] = sex.get("women", 0) + 1 else: #未知 sex["unknown"] = sex.get("unknown", 0) + 1 # 柱状图展示 for i, key in enumerate(sex): plt.bar(key, sex[key]) plt.show() 性别统计柱状图 image 个性签名统计图 获取好友信息,Signature字段是好友的签名,将个性签名保存到.txt文件,部分签名里有表情之类的会变成emoji 类的词,将这些还有特殊符号的替换掉。 def getSignature(): itchat.login() friends = itchat.get_friends(update=True) file = open('sign.txt', 'a', encoding='utf-8') for f in friends: signature = f["Signature"].strip().replace("emoji", "").replace("span", "").replace("class", "") # 正则匹配 rec = re.compile("1f\d+\w*|[<>/=]") signature = rec.sub("", signature) file.write(signature + "\n") sign.txt文件里写入了所有好友的个性签名,使用wordcloud包生成词云图,pip install wordcloud 同样可以采用jieba分词生成词图,不使用分词的话就是句子展示,使用jieba分词的话可以适当把max_font_size属性调大,比如100。 需要注意的是运行不要在虚拟环境下,deactivate 退出虚拟环境再跑,详细代码如下: # 生成词云图 def create_word_cloud(filename): # 读取文件内容 text = open("{}.txt".format(filename), encoding='utf-8').read() # 注释部分采用结巴分词 # wordlist = jieba.cut(text, cut_all=True) # wl = " ".join(wordlist) # 设置词云 wc = WordCloud( # 设置背景颜色 background_color="white", # 设置最大显示的词云数 max_words=2000, # 这种字体都在电脑字体中,window在C:\Windows\Fonts\下,mac下可选/System/Library/Fonts/PingFang.ttc 字体 font_path='C:\\Windows\\Fonts\\simfang.ttf', height=500, width=500, # 设置字体最大值 max_font_size=60, # 设置有多少种随机生成状态,即有多少种配色方案 random_state=30, ) myword = wc.generate(text) # 生成词云 如果用结巴分词的话,使用wl 取代 text, 生成词云图 # 展示词云图 plt.imshow(myword) plt.axis("off") plt.show() wc.to_file('signature.png') # 把词云保存下 句子图 image 使用jieba分词产生的词云图 image 看来,「努力」 「生活」 还是很重要的 itchat 除了以上的信息,还有省市区等等信息都可以抓取,另外还可以实现机器人自动聊天等功能,这里就不一一概述了。 最后附上github地址:https://github.com/taixiang/itchat_wechat 欢迎关注我的博客:https://blog.manjiexiang.cn/ 欢迎关注微信号:春风十里不如认识你 image.png

优秀的个人博客,低调大师

更深入的理解 Python 中的迭代

Visual Studio 的应用周期管理Application Lifecycle Management(ALM)项目 —— Ranger 是一个志愿者社区,它提供专业的指导、实践经验、以及开发者社区的漏洞修补解决方案。它创建于 2006 年,作为微软内部社区去 “将产品组与大家相连接,并去除推广阻力”。 在 2009 时,社区已经有超过 200 位成员,这导致了协作和计划面临很大的挑战,在依赖和手工流程上产生了瓶颈,并导致了开发者社区不断增加的延迟和各种报怨。在 2010 时,计划进一步去扩充包括微软最有价值专家(MVP)在内的分布在全球的社区。 这个社区被分割成十几个活跃的团队。每个团队都致力于通过它的生命周期去设计、构建和支持一个指导或处理项目。在以前,团队的瓶颈在团队管理级别上,原因是严格的、瀑布式的流程和高度依赖一个或多个项目经理。在制作、发布和“为什么、做什么、和怎么做”驱动的决定上,项目经理都要介入其中。另外,缺乏一个实时的指标阻止了团队对他们的解决方案效率的监控,以及对来自社区的关于 bug 和常见问题的关注。 是时候去寻找一些做好这些事情的方法了,更好地实现开发者社区的价值。 DevOps 去“灭火” “DevOps 是人员、流程和产品的结合,使我们的最终用户能够持续传递价值。” --Donovan Brown 为解决这些挑战,社区停止了所有对新项目的冲刺,去探索敏捷实践和新产品。致力于使社区重新活跃起来,为找到促进自治、掌控、和目标的方法,正如在 Daniel H. Pink 的书《Drive》中所说的那样,对僵化的流程和产品进行彻底的改革。 “成熟的自组织、自管理和跨职能团队,在自治、掌控和目标上茁壮成长。" --Drive, Daniel H. Pink. 从文化开始 —— 人 —— 第一步是去拥抱 DevOps。社区实现了 Scrum 框架,使用 kanban 去提升工程化流程,并且通过可视化去提升透明度、意识和最重要的东西 —— 信任。使用自组织团队后,传统的等级制度和指挥系统消失了。自管理促使团队去积极监视和设计它们自己的流程。 在 2010 年 4 月份,社区再次实施了另外的关键一步,切换并提交它们的文化、流程、以及产品到云上。虽然开放的“为社区而社区”的核心 解决方案 仍然是指导和补充,但是在开源解决方案(OSS)上大量增加投资去研究和共享 DevOps 转换的成就。 持续集成(CI)和持续交付(CD)使用自动化流水线代替了死板的人工流程。这使得团队在不受来自项目经理的干预的情况下为早期问题和早期应用者部署解决方案。增加遥测技术可以使团队关注他们的解决方案,以及在用户注意到它们之前,检测和处理未知的问题。 DevOps 转变是一个持续进化的过程,通过实验去探索和验证人、流程和产品的改革。最新的试验引入了流水线革新,它可以持续提升价值流。自动扫描组件、持续地以及静默地检查安全、协议和开源组件的品质。部署环和特性标志允许团队对所有或者特定用户进行更细粒度的控制。 在 2017 年 10 月,社区将大部分的私有版本控制仓库转移到 GitHub 上。将所有仓库转移所有者和管理职责到 ALM DevOps Rangers 社区,给团队提供自治和机会,去激励更多的社区对开源解决方案作贡献。团队被授权向他们的最终用户交付质量和价值。 好处和成就 拥抱 DevOps 使 Ranger 社区变得更加敏捷,实现了对市场的快速反应和快速学习和反应的流程,减少了宝贵的时间投入,并宣布自治。 下面是从这个转变中观察到的一个列表,排列没有特定的顺序: 自治、掌控和目标是核心。 从可触摸的和可迭代的东西开始 —— 避免摊子铺的过大。 可触摸的和可操作的指标很重要 —— 确保不要掺杂其它东西。 人(文化)的转变是最具挑战的部分。 没有蓝图;任何一个组织和任何一个团队都是独一无二的。 转变是一个持续的过程。 透明和可视非常关键。 使用工程化流程去强化预期行为。 转换变化表: < 如显示不全,请左右滑动 > 过去 当前 想象 分支 服务于发布隔离 特性 主分支 构建 手动且易错 自动而一致 问题检测 来自用户 主动感知 问题解决 几天到几周 几分钟到几天 几分钟 计划 详细的设计 原型与故事板 流程管理 2 个流程经理(PM) 0.25 个 PM 0.125 个 PM 发布终止 6 到 12 个月 3 到 5 周期 每个周期 发布 手动且易错 自动而一致 周期 1 个月 3 周 团队规模 10 到 15 2 到 5 构建时间 几小时 几秒钟 发布时间 几天 几分钟 但是,我们还没有做完,相反,我们就是一个令人兴奋的、持续不断的、几乎从不结束的转变的一部分。 原文发布时间为:2018-05-26 本文作者:Willy Schaub 本文来自云栖社区合作伙伴“Linux中国开源社区”,了解相关信息可以关注“Linux中国开源社区”。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册