AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

2023 年技術圈什麼最火?答案毫無疑問是 AIGC,伴隨該項技術的發展,新的編程方式也出現了,那就是用 AI 輔助編程,有了 AI 的加持,開發人員的效率和生產力可以得到大幅度的提升。今天我們就介紹一款非常棒的人工智能編程工具 Amazon CodeWhisperer , 相信我,用上他之後,你的工作效率至少能翻一倍。

AI 幫寫爬蟲,真的嗎? 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 插件圖標,如下所示。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

初始化過程中最重要的就是賬號的鏈接,點擊上圖【Connect to ……】鏈接,之後按照步驟登錄賬號,一系列的操作之後,瀏覽器出現下圖綠色狀態提示界面,此時賬號對接已經完成。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

返回到 VSCode 中,會發現 Amazon CodeWhisperper 幫助手冊已經打開,建議閱讀一下 ,裏面已經整理了插件的基礎使用說明。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

與此同時,VSCode 左下角開發者工具(DEVELOPER TOOLS)也已經顯示鏈接到 Builder ID。至此,我們的前置工作已經全部完成,下面可以開始進行工具使用。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

CodeWhisperper 使用

簡單邏輯示例

CodeWhisperer 插件安裝完畢,默認會開啓 Auto-Suggesions(自動建議模式),此時當我們在編寫註釋或代碼之後,CodeWhisperer 會自動給我們提供代碼提示,這個過程就像超強版的語法提示,如果你還沒有安裝好插件,可以先看一下動圖,整體感受一下。

AI 幫寫爬蟲,真的嗎? 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 會給我們一個完整的實現示例,可以看到代碼重寫完全正確。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

加密函數示例

除了翻譯代碼外,在編寫爬蟲案例的時候,如果你對某些加密函數使用詳情有遺忘,可以讓 CodeWhisperer 直接給出示例,快速喚醒自己的記憶。

下圖爲輸入註釋 # 使用 Python 實現 hmac_sha256 加密函數 獲取函數的使用示例代碼。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

如果在使用 CodeWhisperer 的過程中按錯按鍵,即沒有使用 Tab 確認代碼,可以隨時按下快捷鍵 Alt+C,CodeWhisperer 代碼提示會再次出現,又可以繼續加速你的開發效率了。

混合加密示例

如果將上述邏輯都定義爲單邏輯,那下述需求就是一個複合邏輯示例了,在實際編碼中,會碰到需要將兩種加密混合使用的情況,需求如下:

使用 Python 實現 Base64 + AES 加密字符串

在 IDE 中輸入上述註釋信息,然後回車,CodeWhisperer 就會自動生成後續代碼,其中部分邏輯可以一次性完成,效果如下,其中在覈心邏輯部分,CodeWhisperer 表現非常優秀,答案秒輸出,並且直接可用。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

算法模板示例

在業務邏輯的編寫過程中,有時會用到常見算法,例如快排、堆排、哈希等,這些算法很多都類似模板代碼,在編寫的時候,如果可以一鍵生成,能大幅度提高代碼編寫速度,包括算法改寫速度,在 CodeWhisperer 中,可以通過註釋快速生成。

使用 Python 生成快排代碼

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

體驗 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 參數,直接在需要修改的位置添加註釋即可。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

第二步:編寫目標數據採集函數

這一步,我們要使用 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() 函數調用放到上述循環中即可完成本步驟。再次運行代碼,在爬蟲目錄會生成對應的文件,打開文件得到目標數據,效果圖如下所示。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

到這裏一個簡單的爬蟲寫完了,但是我們的工作還沒有完成,要繼續優化這個程序。

第四步:將採集到的數據,發送到 163 郵箱

輸入註釋:# 編寫一個郵件發送函數,將剛剛生成的文件 codewhisperper_demo.csv 發送到指定郵箱,CodeWhisperer 瞬間就會幫助我們生成一個參考函數,實際效果如下圖所示。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

將上述代碼中的賬號和密碼修改爲自己真實數據,即可實現一鍵發送郵件。

打開收件箱,可以看到剛剛的郵件已經發送成功,CodeWhisperer 給我們提供了一種郵件發送的實現,你可以再其基礎上進行改造,以滿足個性化的需求。

AI 幫寫爬蟲,真的嗎? CodeWhisperer:當然!

CodeWhisperer 使用總結

在博客開篇,我提出了編碼過程中幾個比較頭疼的問題,尤其是第二個,程序員在編碼過程中總是切出去查找代碼示例和文檔手冊,從而打斷編碼思路,而 CodeWhisperer 非常完美的解決了該問題,在編碼的過程中,Amazon CodeWhisperer 自動提供編碼建議,同意就使用,不同意就捨棄,真正實現了沉浸式編程。

除此之外,CodeWhisperer 還可以基於代碼和註釋生成新的業務代碼,尤其當我們 Python 工程師接觸一個新的模塊時,他可以快速的產出示例代碼,而且生成的代碼與我們編碼風格非常相似,甚至編碼風格和命名規則都可以完美學習到。在編碼代碼過程中,CodeWhisperer 還會自動爲我們的代碼提供註釋參考,讓我們將更多精力投入到業務邏輯中。

將 CodeWhisperer 用起來吧,幾分鐘之後,你就會深刻的感受到編碼效率的提升!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章