写点什么

AI 帮写爬虫,真的吗? Amazon Q:当然!

  • 2023-12-07
    北京
  • 本文字数:3680 字

    阅读完需:约 12 分钟

大小:1.48M时长:08:38
AI 帮写爬虫,真的吗? Amazon Q:当然!

2023 年技术圈什么最火?答案毫无疑问是 AIGC,伴随该项技术的发展,新的编程方式也出现了,那就是用 AI 辅助编程,有了 AI 的加持,开发人员的效率和生产力可以得到大幅度的提升。今天我们就介绍一款非常棒的人工智能编程工具 Amazon CodeWhisperer , 相信我,用上他之后,你的工作效率至少能翻一倍。



  1. 在日常的编码工作中,你是否会碰到如下难题?

  2. 接触了一款全新的 Python 模块,不知道如何开启 hello world;

  3. 模块的某个方法,忘记了参数和返回值,反复切换手册会打断思路;

  4. 不想写注释;

  5. 写了一段代码,但是并不健壮,担心有难以发现的漏洞;

  6. ……


如果你正在被这些问题困扰,那 Amazon CodeWhisperer 能非常好的解决上述问题。

下面跟随我的脚步,开启 CodeWhisperer 的实践吧!

CodeWhisperer 初始化


CodeWhisperer 支持的 IDE 包括 Visual Studio(VS)Code(本篇博客使用的 IDE) 和 JetBrains IDE(IntelliJ、PyCharm、CLion、GoLand、WebStorm、Rider、PhpStorm、RubyMine 和 DataGrip),安装过程只需要几分钟,这里我们不详细展开讲解,大家可以参考 官方文档 ,官方还贴心的准备的视频教程~


本篇博客我们使用 VSCode 完成一个爬虫项目实践,可以直接在 VSCode 插件中检索【CodeWhisperer】,直接安装即可(已经有将近 200W 的安装量啦,要抓紧跟上大家的节奏),安装完毕,在 VSCode 侧边栏中会出现 CodeWhisperer 插件图标,如下所示。



初始化过程中最重要的就是账号的链接,点击上图【Connect to ……】链接,之后按照步骤登录账号,一系列的操作之后,浏览器出现下图绿色状态提示界面,此时账号对接已经完成。



返回到 VSCode 中,会发现 Amazon CodeWhisperper 帮助手册已经打开,建议阅读一下 ,里面已经整理了插件的基础使用说明。



与此同时,VSCode 左下角开发者工具(DEVELOPER TOOLS)也已经显示链接到 Builder ID。至此,我们的前置工作已经全部完成,下面可以开始进行工具使用。



CodeWhisperper 使用

简单逻辑示例


CodeWhisperer 插件安装完毕,默认会开启 Auto-Suggesions(自动建议模式),此时当我们在编写注释或代码之后,CodeWhisperer 会自动给我们提供代码提示,这个过程就像超强版的语法提示,如果你还没有安装好插件,可以先看一下动图,整体感受一下。



CodeWhisperer 的代码提示,在 VSCode 中可以使用左右方向键进行选择,使用 Tab 进行确认,其他按键表示不采纳提示代码。初次体验下来,正如插件名称(Whisperer:低语者)所描述的一样,就像是编辑器在轻轻的和我们说着即将要敲入的代码,如果同意,可以一键采纳,不同意,直接忽略即可。

代码翻译示例


拥有此功能之后,很多简单的程序完全可以基于智能提示编写完毕,但这肯定不够,我们需要 CodeWhisperer 完成更有挑战的事情,在 Python 爬虫领域,经常需要将一段前端 JS 代码用 Python 重新实现。


下面提供一段 JavaScript 中生成 UUID 的代码,然后用 Python 复写。


 p = function(e) {  var t = e || null;  return null == t && (t = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function(e) {      var t = 16 * Math.random() | 0;      return ("x" === e ? t : 3 & t | 8).toString(16)  }  ))),
复制代码


在 VSCode 中直接输入你的需求,然后 CodeWhisperper 会给我们一个完整的实现示例,可以看到代码重写完全正确。



加密函数示例


除了翻译代码外,在编写爬虫案例的时候,如果你对某些加密函数使用详情有遗忘,可以让 CodeWhisperer 直接给出示例,快速唤醒自己的记忆。

下图为输入注释 # 使用 Python 实现 hmac_sha256 加密函数 获取函数的使用示例代码。



如果在使用 CodeWhisperer 的过程中按错按键,即没有使用 Tab 确认代码,可以随时按下快捷键 Alt+C,CodeWhisperer 代码提示会再次出现,又可以继续加速你的开发效率了。

混合加密示例


如果将上述逻辑都定义为单逻辑,那下述需求就是一个复合逻辑示例了,在实际编码中,会碰到需要将两种加密混合使用的情况,需求如下:

使用 Python 实现 Base64 + AES 加密字符串


在 IDE 中输入上述注释信息,然后回车,CodeWhisperer 就会自动生成后续代码,其中部分逻辑可以一次性完成,效果如下,其中在核心逻辑部分,CodeWhisperer 表现非常优秀,答案秒输出,并且直接可用。



算法模板示例


在业务逻辑的编写过程中,有时会用到常见算法,例如快排、堆排、哈希等,这些算法很多都类似模板代码,在编写的时候,如果可以一键生成,能大幅度提高代码编写速度,包括算法改写速度,在 CodeWhisperer 中,可以通过注释快速生成。

使用 Python 生成快排代码



体验 5 个示例之后,CodeWhisperer 的使用非常简单,而且无需切换编辑窗口,在 IDE 的代码文件中直接完成了 AIGC 的问答流程,响应速度非常快,代码准确性很高。


单独的案例对 CodeWhisperer 已经没有难度了,接下来我们尝试完成一个完整的 Python 爬虫案例(咱们看一下只写注释,能不能完成一个合格的爬虫采集程序)。

CodeWhisperer 项目实战


目标采集站点为作者博客,无侵权问题。

编写爬虫基础框架注释,包含如下内容:

  1. 程序使用的采集模块

  2. 目标采集站点地址

  3. 采集的目标标签

  4. 数据存储到文件

  5. 发送采集到的数据到指定邮箱

第一步:输入如下注释,获取网页响应内容


使用 Python requests 模块采集 https://blog.csdn.net/hihell?type=blog


# 使用 Python requests 模块采集 https://blog.csdn.net/hihell?type=blog
import requests
url = 'https://blog.csdn.net/hihell?type=blog'
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36' }response = requests.get(url, headers=headers)
print(response.text)
复制代码


写完注释,直接回车之后,CodeWhisperer 直接给我们生成了对应的代码,过程中只需要按下 回车和 Tab 键即可。


如果你觉得上述代码有些简单,可以在代码基础上继续完善,例如将请求头进行完善,增加 referer 和 host 参数,直接在需要修改的位置添加注释即可。


bc2cec9e458845859e9c407965d14bf5.gif


第二步:编写目标数据采集函数


这一步,我们要使用 lxml 模块中的 etree 提取目标标签,继续将我们的逻辑输入到注释注释中,然后回车。

使用 etree 模块提取网页响应中所有的 article 标签


# 使用 etree 模块提取网页响应中所有的 article 标签
from lxml import etree
html = etree.HTML(response.text)
article_tags = html.xpath('//article')
print(article_tags)
复制代码


此时目标博客标签已经被初步提取,下面要将标题和超链接地址进行再次提取,这里的注释需要尽可能编写清晰,如果你对 Python 爬虫技术栈有一定了解,到这里就会发现 CodeWhisperer 对代码编写提速效果。


# 循环 article_tags 提取其内部的超链接标签的 href 属性和 h4 标签文本# 注意标签结构是 超链接 a 标签含后代 h4 标签for article in article_tags:    href = article.xpath('./a/@href')[0]    title = article.xpath('./a//h4/text()')[0]    print(href, title)
复制代码

第三步:数据存入到 csv 文件中


写入文件的逻辑属于常见操作,直接输入函数需求,相信 CodeWhisperer 会直接生成的,输入的参考注释如下:

编写一个 csv 文件写入函数,其包含 2 个参数,分别是 title 和 href


# 编写一个 csv 文件写入函数,其包含 2 个参数,分别是 title 和 href
def write_to_csv(title, href): with open('codewhisperper_demo.csv', 'a', encoding='utf-8') as f: f.write(title + ',' + href + '\n')
复制代码

write_to_csv() 函数调用放到上述循环中即可完成本步骤。再次运行代码,在爬虫目录会生成对应的文件,打开文件得到目标数据,效果图如下所示。


image.png


这里一个简单的爬虫写完了,但是我们的工作还没有完成,要继续优化这个程序。

第四步:将采集到的数据,发送到 163 邮箱


输入注释:# 编写一个邮件发送函数,将刚刚生成的文件 codewhisperper_demo.csv 发送到指定邮箱,CodeWhisperer 瞬间就会帮助我们生成一个参考函数,实际效果如下图所示。


bc2cec9e458845859e9c407965d14bf5.gif


将上述代码中的账号和密码修改为自己真实数据,即可实现一键发送邮件。

打开收件箱,可以看到刚刚的邮件已经发送成功,CodeWhisperer 给我们提供了一种邮件发送的实现,你可以再其基础上进行改造,以满足个性化的需求。


image.png


CodeWhisperer 使用总结


在博客开篇,我提出了编码过程中几个比较头疼的问题,尤其是第二个,程序员在编码过程中总是切出去查找代码示例和文档手册,从而打断编码思路,而 CodeWhisperer 非常完美的解决了该问题,在编码的过程中,Amazon CodeWhisperer 自动提供编码建议,同意就使用,不同意就舍弃,真正实现了沉浸式编程。


除此之外,CodeWhisperer 还可以基于代码和注释生成新的业务代码,尤其当我们 Python 工程师接触一个新的模块时,他可以快速的产出示例代码,而且生成的代码与我们编码风格非常相似,甚至编码风格和命名规则都可以完美学习到。在编码代码过程中,CodeWhisperer 还会自动为我们的代码提供注释参考,让我们将更多精力投入到业务逻辑中。


将 CodeWhisperer 用起来吧,几分钟之后,你就会深刻的感受到编码效率的提升!


2023-12-07 11:3810832

评论 1 条评论

发布
用户头像
计算器帮数钱,真的吗?
2023-12-07 14:10 · 北京
回复
没有更多了
发现更多内容

go-zero 之 rest 实战与原理

万俊峰Kevin

RESTful api 网关 microservice Go 语言

同步与异步,回调与协程

Linux服务器开发

线程 后端 协程 底层应用开发 Linux服务器开发

架构师 3 期 3 班 -week2- 总结

zbest

总结 week2

「云原生上云」后的聚石塔是如何应对 双11 下大规模应用挑战的

阿里巴巴云原生

阿里云 云原生

深入了解进程间通信:System V信号量+共享内存

ShenDu_Linux

Linux 进程 内存管理 通信协议

区块链技术应用打造智慧物流

13828808769

区块链技术应用开发

你敢信?就是这个Netty的网络框架差点把我整疯了,哭jj

小Q

学习 编程 面试 Netty 网络

关于物联网规则引擎技术,你想要知道的都在这儿!

华为云开发者联盟

数据 联动 iotda

设备常用网管配置举例

AWS IoT Greengrass设计解析

soolaugust

边缘计算 工业4.0 工业物联网 iiot

跟随杠精的视角一起来了解Redis的主从复制

leonsh

redis redis高可用 redis主从

中国CRM突围指南

ToB行业头条

CRM

cncf serverless 所有项目全解读

coldTea214

云计算 Serverless 容器 cncf

OPPO技术开放日第六期丨OPPO安全解析“应用与数据安全防护”背后的技术

OPPO安全

OPPO安全

PGAS模型编程语言

星际行者

想了解表格问答,我们先看看TA的前世

华为云开发者联盟

数据库 规范 表格

测试过程中如何快速定位一个bug

测试人生路

软件测试

《迅雷链精品课》第九课:区块链P2P网络

迅雷链

区块链

linux后台开发必知的linux系统内存知识总结

linux大本营

c++ Linux 后台开发 架构师 内存管理

大企软件系统问题多?归乡名企工程师:解决很简单,分分钟做个新系统

Learun

敏捷开发 快速开发 企业开发 CRM 企业应用

架构师 3 期 3 班 -week2- 作业

zbest

作业 week2

从零做网站开发:基于Flask和JQuery,实现表格管理平台

华为云开发者联盟

jquery flask 框架

精彩回顾 | 一张图读懂OPPO应用与数据安全防护

OPPO安全

OPPO安全

LeetCode题解:455. 分发饼干,贪心while循环,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Serverless 应用引擎的远程调试和云端联调

阿里巴巴云原生

Java Serverless 云原生 后端

美团T8级架构师剖析Spring Boot源码:日志、缓存、消息、Web服务等

Java架构追梦

Java 源码 架构 微服务 springboot

为什么从蚂蚁离职?base拉胯,高潜也被倒挂,就是酸,忍不了

Java架构师迁哥

在K8S/OpenShift上开发应用程序的14种最佳实践

东风微鸣

Kubernetes 最佳实践 k8s最佳实践 openshift

技术应用丨DWS 空间释放(vacuum full) 最佳实践

华为云开发者联盟

内存 存储 磁盘

智能视频监控的发展和优势

anyRTC开发者

安全 监控 音视频 WebRTC RTC

精心总结C++智能指针用法详解(完整版)附带视频讲解

ShenDu_Linux

c++ 程序员 指针 智能指针

AI 帮写爬虫,真的吗? Amazon Q:当然!_亚马逊云科技_梦想橡皮擦_InfoQ精选文章