一日一技:圖文結(jié)合,大模型自動抓取列表頁
熟悉我的同學(xué)都知道,GNE可以自動化提取任意文章頁面的正文,專業(yè)版GnePro的準(zhǔn)確率更是在13萬個網(wǎng)站中達(dá)到了90%。
但GNE一直不支持列表頁的自動抓取。這是因?yàn)榱斜眄摰牧斜砦恢煤茈y定義。例如下面這張圖片:
圖片
對人來說,要找到文章列表很簡單,紅色方框框住的部分就是我們需要的文章列表。但如果讓程序自動根據(jù)HTML格式相似的規(guī)律來尋找列表頁,它可能會提取出藍(lán)色方框的位置、綠色方框的位置、灰色方框的位置,甚至導(dǎo)航欄。
之前我也試過使用ChatGPT來提取文章列表,但效果并不理想。因?yàn)閭鹘o大模型HTML以后,他也不能知道這里面某個元素在瀏覽器打開以后,會出現(xiàn)什么位置。因此它本質(zhì)上還是通過HTML找元素相似的規(guī)律來提取列表項(xiàng)目。那么其實(shí)沒有解決我的根本問題,上圖中的藍(lán)色、綠色、灰色位置還是經(jīng)常會提取到。
前兩天使用GLM-4V識別驗(yàn)證碼以后,我對智譜的大模型在爬蟲領(lǐng)域的應(yīng)用充滿了期待。正好這兩天智譜上線了視頻/圖片理解的旗艦?zāi)P虶LM-4V-Plus。于是我突然有了一個大膽的想法,能不能結(jié)合圖片識別加上HTML,讓大模型找到真正的文章列表位置呢?
說干就干,我這次使用少數(shù)派的Matrix精選頁面來進(jìn)行測試。如下圖所示:
圖片
需要注意的是,這個頁面是異步加載的頁面,因此通過在開發(fā)者工具中右鍵來獲取包含列表頁的源代碼,如下圖所示:
圖片
接下來,為了節(jié)省Token省錢,我首先對這個HTML進(jìn)行清洗,移除一些顯然不需要的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)
代碼如下圖所示:
圖片
其實(shí)有很多頁面,在源代碼里面會有一個<script>標(biāo)簽,它有一個type屬性,值是application/ld+json。它的text是一個大JSON,包含了頁面上的所有有用信息。只需要提取這個JSON并解析就能拿到需要的全部信息。不過這個情況不在今天的討論范圍,因此我們也把<script>一并刪去。
接下來,對少數(shù)派這個列表頁做一下截圖,調(diào)用GLM-4V-Plus模型時,同時上傳截圖和源代碼。如下圖所示:
圖片
在system里面,我定義了一個函數(shù),并通過注釋說明這個函數(shù)需要實(shí)現(xiàn)什么功能。讓GLM-4V-Plus首先理解圖片,然后分析HTMl,并補(bǔ)全我的Python代碼。
最后運(yùn)行生成的代碼如下圖所示:
我把這段代碼復(fù)制出來執(zhí)行,發(fā)現(xiàn)可以正確解析出列表頁中每篇文章的標(biāo)題和URL,如下圖所示:
圖片
它自動生成的XPath,到少數(shù)派頁面上手動驗(yàn)證,發(fā)現(xiàn)確實(shí)能夠正確找到每一篇文章:
圖片
看起來,GLM-4V-Plus模型確實(shí)天然適合做爬蟲:既能識別驗(yàn)證碼,又可以識別網(wǎng)頁生成XPath提取數(shù)據(jù)。如果我再把DrissionPage用上,解決反爬蟲問題,最后通過模型的Tool Call機(jī)制來控制DP操作頁面,那就是全自動爬蟲了。后面就有無限的想象力了。
如果大家對GLM-4V-Plus+DrissionPage結(jié)合的全自動爬蟲有興趣,請?jiān)诒疚南旅媪粞?。我們下一篇文章,就來?shí)現(xiàn)這個真正意義上的,自己動,自己抓,自己解析的,擁有自己大腦的全自動爬蟲。
除了GLM-4V-Plus 外,這一次的旗艦?zāi)P瓦€有GLM-4-Plus和CogView-3-Plus模型。
GLM-4-Plus無論是解決復(fù)雜的數(shù)學(xué)問題、解析深奧的代碼算法,還是理解并解答各類邏輯推理題都有了極大的提升。使得模型能夠更好地反映人類的思維方式和偏好。
CogView-3-Plus能夠提供更加精細(xì)的文生圖能力。如果我們使用GLM-4V-Plus抓取網(wǎng)頁,使用GLM-4-Plus分析網(wǎng)頁的內(nèi)容并生成文案,最后使用CogView-3-Plus生成配圖,然后自動發(fā)小紅書或者公眾號,形成閉環(huán)。