一日一技:使用大模型实现全自动爬虫(一)
在文章一日一技:图文结合,大模型自动抓取列表页中,我提到可以使用大模型实现一个全自动爬虫。只需要输入起始URL加上需求,就可以借助模拟浏览器自动完成所有的抓取任务。
在实现的过程中,我发现涉及到的知识点可能一篇文章讲不完,因此拆分成了多篇文章。
爬虫演示
今天是第一部分,我们暂时不依赖模拟浏览器,而是使用httpx(你也可以使用requests)实现全自动爬虫,传入我博客文章列表页,爬虫会自动抓取前三页所有博客文章的标题、正文、作者、发布时间。
爬取结果如下图所示:

运行过程如下图所示:

爬虫首先会进入起始列表页,抓取上面的所有文章。然后进入列表页第二页,再抓取所有文章,最后进入第三页,再抓取所有文章。整个过程都是全自动的。不需要写任何XPath,也不需要告诉爬虫哪里是翻页按钮,文章的标题在哪里,发布时间在哪里,正文在哪里。
模块拆解
代码我已经放到Github:AutoCrawler。由于最近智谱又免费送了1亿的Token,所以还是使用他们最新的基座大模型GLM-4-Plus来实现这个全自动爬虫。
代码分为如下几个主要文件:
llm.py: 封装智谱的大模型,以方便使用。代码如下:

utils.py: 常用工具函数,清洗HTML,重试等等
constants.py: 各种常量,包括各种Prompt
parser.py: 核心解析逻辑,解析列表页、详情页,识别翻页按钮
main.py:调度逻辑。把各个模块组合在一起
原理说明
字段解析与翻页
其中,跟大模型相关的代码在parser.py中。我们来看一下:

代码逻辑很简单,分为两个主要的方法,data_extract用来从列表页提取出详情页URL,从详情页提取出作者、标题、发布时间和正文。paging_extract用来提取分页按钮中,下一页对应的链接。
这个提取的过程就交给智谱GLM-4-Plus来完成。对于字段提取,对应的System Prompt如下:
1 | 你将扮演一个HTML解析器的角色。我将会提供一段HTML代码,这段代码可能代表了一个博客网站的文章列表页或者文章详情页。你需要首先判断这段HTML是属于哪种类型的页面。如果是文章详情页,那么页面中通常会包含文章标题、发布时间、作者以及内容等信息;而如果是列表页,则会列出多篇文章的标题及其对应的详情页链接。 |