- AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!
- 2023年10月18日 來源:北方企業新聞網
提要:2023 年技術圈什么最火?答案毫無疑問是 AIGC,伴隨該項技術的發展,新的編程方式也出現了,那就是用 AI 輔助編程,有了 AI 的加持,開發人員的效率和生產力可以得到大幅度的提升。
2023 年技術圈什么最火?答案毫無疑問是 AIGC,伴隨該項技術的發展,新的編程方式也出現了,那就是用 AI 輔助編程,有了 AI 的加持,開發人員的效率和生產力可以得到大幅度的提升。今天我們就介紹一款非常棒的人工智能編程工具 Amazon CodeWhisperer , 相信我,用上他之后,你的工作效率至少能翻一倍。

在日常的編碼工作中,你是否會碰到如下難題?
1. 接觸了一款全新的 Python 模塊,不知道如何開啟 hello world;
2. 模塊的某個方法,忘記了參數和返回值,反復切換手冊會打斷思路;
3. 不想寫注釋;
4. 寫了一段代碼,但是并不健壯,擔心有難以發現的漏洞;
5. ……
如果你正在被這些問題困擾,那 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 重新實現。

在 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. 發送采集到的數據到指定郵箱
第一步:輸入如下注釋,獲取網頁響應內容
#

寫完注釋,直接回車之后,CodeWhisperer 直接給我們生成了對應的代碼,過程中只需要按下 回車和 Tab 鍵即可。
如果你覺得上述代碼有些簡單,可以在代碼基礎上繼續完善,例如將請求頭進行完善,增加 referer 和 host 參數,直接在需要修改的位置添加注釋即可。

第二步:編寫目標數據采集函數
這一步,我們要使用 lxml 模塊中的 etree 提取目標標簽,繼續將我們的邏輯輸入到注釋注釋中,然后回車。
# 使用 etree 模塊提取網頁響應中所有的 article 標簽
# 使用 etree 模塊提取網頁響應中所有的 article 標簽

print(article_tags)
此時目標博客標簽已經被初步提取,下面要將標題和超鏈接地址進行再次提取,這里的注釋需要盡可能編寫清晰,如果你對 Python 爬蟲技術棧有一定了解,到這里就會發現 CodeWhisperer 對代碼編寫提速效果。

第三步:數據存入到 csv 文件中
寫入文件的邏輯屬于常見操作,直接輸入函數需求,相信 CodeWhisperer 會直接生成的,輸入的參考注釋如下:

write_to_csv() 函數調用放到上述循環中即可完成本步驟。再次運行代碼,在爬蟲目錄會生成對應的文件,打開文件得到目標數據,效果圖如下所示。

到這里一個簡單的爬蟲寫完了,但是我們的工作還沒有完成,要繼續優化這個程序。
第四步:將采集到的數據,發送到 163 郵箱
輸入注釋:# 編寫一個郵件發送函數,將剛剛生成的文件 codewhisperper_demo.csv 發送到指定郵箱,CodeWhisperer 瞬間就會幫助我們生成一個參考函數,實際效果如下圖所示。

將上述代碼中的賬號和密碼修改為自己真實數據,即可實現一鍵發送郵件。
打開收件箱,可以看到剛剛的郵件已經發送成功,CodeWhisperer 給我們提供了一種郵件發送的實現,你可以再其基礎上進行改造,以滿足個性化的需求。

CodeWhisperer 使用總結
在博客開篇,我提出了編碼過程中幾個比較頭疼的問題,尤其是第二個,程序員在編碼過程中總是切出去查找代碼示例和文檔手冊,從而打斷編碼思路,而 CodeWhisperer 非常完美的解決了該問題,在編碼的過程中,Amazon CodeWhisperer 自動提供編碼建議,同意就使用,不同意就舍棄,真正實現了沉浸式編程。
除此之外,CodeWhisperer 還可以基于代碼和注釋生成新的業務代碼,尤其當我們 Python 工程師接觸一個新的模塊時,他可以快速的產出示例代碼,而且生成的代碼與我們編碼風格非常相似,甚至編碼風格和命名規則都可以完美學習到。在編碼代碼過程中,CodeWhisperer 還會自動為我們的代碼提供注釋參考,讓我們將更多精力投入到業務邏輯中。
將 CodeWhisperer 用起來吧,幾分鐘之后,你就會深刻的感受到編碼效率的提升!