一日一技:圖文結合,大模型自動抓取列表頁
熟悉我的同學都知道,GNE可以自動化提取任意文章頁面的正文,專業版GnePro的準確率更是在13萬個網站中達到了90%。
但GNE一直不支持列表頁的自動抓取。這是因為列表頁的列表位置很難定義。例如下面這張圖片:
圖片
對人來說,要找到文章列表很簡單,紅色方框框住的部分就是我們需要的文章列表。但如果讓程序自動根據HTML格式相似的規律來尋找列表頁,它可能會提取出藍色方框的位置、綠色方框的位置、灰色方框的位置,甚至導航欄。
之前我也試過使用ChatGPT來提取文章列表,但效果并不理想。因為傳給大模型HTML以后,他也不能知道這里面某個元素在瀏覽器打開以后,會出現什么位置。因此它本質上還是通過HTML找元素相似的規律來提取列表項目。那么其實沒有解決我的根本問題,上圖中的藍色、綠色、灰色位置還是經常會提取到。
前兩天使用GLM-4V識別驗證碼以后,我對智譜的大模型在爬蟲領域的應用充滿了期待。正好這兩天智譜上線了視頻/圖片理解的旗艦模型GLM-4V-Plus。于是我突然有了一個大膽的想法,能不能結合圖片識別加上HTML,讓大模型找到真正的文章列表位置呢?
說干就干,我這次使用少數派的Matrix精選頁面來進行測試。如下圖所示:
圖片
需要注意的是,這個頁面是異步加載的頁面,因此通過在開發者工具中右鍵來獲取包含列表頁的源代碼,如下圖所示:
圖片
接下來,為了節省Token省錢,我首先對這個HTML進行清洗,移除一些顯然不需要的HTML元素:
from lxml.html import fromstring, HtmlElement
from lxml.html import etree
def remove_node(node: HtmlElement):
"""
this is a in-place operation, not necessary to return
:param node:
:return:
"""
parent = node.getparent()
if parent is not None:
parent.remove(node)
with open('/Users/kingname/Downloads/sspai.html') as f:
html = f.read()
selector = fromstring(html)
USELESS_TAG = ['style', 'script', 'link', 'video', 'iframe', 'source', 'picture', 'header', 'blockquote',
'footer', 'svg']
for tag in USELESS_TAG:
eles = selector.xpath(f'//{tag}')
for ele in eles:
remove_node(ele)
html_clean = etree.tostring(selector, pretty_print=True, encoding='unicode')
print(html_clean)
代碼如下圖所示:
圖片
其實有很多頁面,在源代碼里面會有一個<script>標簽,它有一個type屬性,值是application/ld+json。它的text是一個大JSON,包含了頁面上的所有有用信息。只需要提取這個JSON并解析就能拿到需要的全部信息。不過這個情況不在今天的討論范圍,因此我們也把<script>一并刪去。
接下來,對少數派這個列表頁做一下截圖,調用GLM-4V-Plus模型時,同時上傳截圖和源代碼。如下圖所示:
圖片
在system里面,我定義了一個函數,并通過注釋說明這個函數需要實現什么功能。讓GLM-4V-Plus首先理解圖片,然后分析HTMl,并補全我的Python代碼。
最后運行生成的代碼如下圖所示:
我把這段代碼復制出來執行,發現可以正確解析出列表頁中每篇文章的標題和URL,如下圖所示:
圖片
它自動生成的XPath,到少數派頁面上手動驗證,發現確實能夠正確找到每一篇文章:
圖片
看起來,GLM-4V-Plus模型確實天然適合做爬蟲:既能識別驗證碼,又可以識別網頁生成XPath提取數據。如果我再把DrissionPage用上,解決反爬蟲問題,最后通過模型的Tool Call機制來控制DP操作頁面,那就是全自動爬蟲了。后面就有無限的想象力了。
如果大家對GLM-4V-Plus+DrissionPage結合的全自動爬蟲有興趣,請在本文下面留言。我們下一篇文章,就來實現這個真正意義上的,自己動,自己抓,自己解析的,擁有自己大腦的全自動爬蟲。
除了GLM-4V-Plus 外,這一次的旗艦模型還有GLM-4-Plus和CogView-3-Plus模型。
GLM-4-Plus無論是解決復雜的數學問題、解析深奧的代碼算法,還是理解并解答各類邏輯推理題都有了極大的提升。使得模型能夠更好地反映人類的思維方式和偏好。
CogView-3-Plus能夠提供更加精細的文生圖能力。如果我們使用GLM-4V-Plus抓取網頁,使用GLM-4-Plus分析網頁的內容并生成文案,最后使用CogView-3-Plus生成配圖,然后自動發小紅書或者公眾號,形成閉環。