真正的自然语言编程

这是「进击的Coder」的第 943 篇技术分享

作者:kingname

来源:未闻 Code

阅读本文大概需要 3 分钟。

在之前的文章《一次性数据抓取的万能方法,半自动抓取任意异步加载网站》中,我讲到一个万能的爬虫开发方法。从浏览器保存 HAR 文件,然后写 Python 代码解析 HAR 文件来抓取数据。

但可能有同学连 Python 代码都不想写,他觉得还要学习haralyzer太累了,有没有什么办法,只需要说自然语言,就能解析HAR文件?

最近我在测试open-interpreter,发现借助它,基本上已经可以实现自然语言编程的效果了。今天我们用小红书为例来介绍这个方法。

如下图所示,我现在要抓取小红书首页游戏频道的帖子。通过不停往下滑动页面,我已经抓到了不少数据包。

f1ce99bce288d86e6073ede03369634d.png

现在,把所有数据包保存为xiaohongshu.har文件(方法看我上一篇文章)。

接下来,我们来安装open-interpreter,使用pip进行安装就可以了:pip install open-interpreter。它依赖的第三方库比较多,因此可能需要安装一会儿。

我使用的是deepseek的模型,因为非常便宜,1 元钱充值 50 万 Token,常规任务足够了。理论上,所有 Claude 和兼容 openai 库的模型都可以。大家也可以使用 Groq 的免费 API,或者硅基流动的 API,或者通义千问,或者 ChatGPT 或者 Azure OpenAI 都没问题。也支持 Ollama,但我测试下来 Ollama 运行的 Llama3.1 或者 Qwen2 的 8b 模型效果都还不太好。

如果你是用的 Open AI 的 API,那么你什么都不需要做,直接命令行运行interpreter即可,第一次运行他会让你提供 API KEY。如果是其他的大模型。在 deepseek 获得 API Key 以后,我们创建一个文件:~/Library/Application Support/open-interpreter/profiles/default.yaml,在里面填写如下内容:

llm:
  model: "deepseek-chat"
  temperature: 0
  api_key: <你的API KEY>  # Your API key, if the API requires it
  api_base: https://api.deepseek.com  # The URL where an OpenAI-compatible server is running to handle LLM API requests
  # api_version: ...  # The version of the API (this is primarily for Azure)
  max_output: 4096  # The maximum characters of code output visible to the LLM
  
# Computer Settings
computer:
  import_computer_api: True # Gives OI a helpful Computer API designed for code interpreting language models


multi_line: True # If True, you can input multiple lines starting and ending with ```

version: 0.2.5  # Profile version (do not modify)

如下图所示。

bc8092b5c3e98427a440dd0f7b2c6203.png

然后命令行执行interpreter启动。如下图所示:

40869e625767bc3538ec5cf9a1ee6f5f.png

在这里,直接输入你的需求就可以了。我这里写的内容如下:

读取/Users/kingname/Downloads/xiaohongshu.har 这个文件,然后找到url中包含/api/sns/web/v1/homefeed的请求,接下来,使用json.loads加载返回的内容。注意返回的内容可能直接是JSON字符串,也可能是base64字符串,你需要判断。如果发现是base64,需要先解码。然后再使用json.loads加载。读取.data.items列表,对这个列表进行迭代,如果每一项的model_type字段不为note,跳过。如果是note,那么就读取note_card.display_title字段,把结果打印出来。

open-interpreter 会自动生成执行计划和 Python 代码,如下图所示:

921efb44a256b22275779c65ed907539.png

根据它的提示,按下y执行,然后他会自动执行下一步骤,再按y,直到结果出来,如下图所示:

9b3257fe060e43cac2688522904a1337.png

如果执行时报错,它会自动分析原因,然后修改代码,如下图所示:

d6d355206ae0a37f2c238f32ea1c2cea.png它修改完成以后,运行结果如下:

ff4e1f5bcf7f6c4cf2323be688a10cc2.png

如果你在一开始的需求里面让他把结果生成到一个 txt 文件里面,那么你这个时候就可以去对应的 txt 文件里面拿到结果了。

整个过程中,你唯一需要做的只有两件事情:

  1. 输入需求

  2. 不停按 y

如果你连 y 都不想按,那么可以在启动时加个命令,自动执行代码interpreter --auto_run

open-interpreter还支持在 Python 里面调用,方法如下:

import interpreter

interpreter.chat('读取/Users/kingname/Downloads/xiaohongshu.har 这个文件,然后找到url中包含/api/sns/web/v1/homefeed的请求,接下来,使用json.loads加载返回的内容。注意返回的内容可能直接是JSON字符串,也可能是base64字符串,你需要判断。如果发现是base64,需要先解码。然后再使用json.loads加载。读取.data.items列表,对这个列表进行迭代,如果每一项的model_type字段不为note,跳过。如果是note,那么就读取note_card.display_title字段,把结果写入到note_title.txt文件中')

with open('note_title.txt') as f:
    for line in f:
        print('接下来就可以用结果做其他Python操作了')

借助open-interpreter,我们可以实现全自动爬虫,它可以自动使用 requests 请求 URL,也可以自动操作浏览器,自动滚动页面。而且这种方式操作的是真正的浏览器,不会被反爬虫机制检测到。只要控制滚动频率,可以说是万无一失。对于任意网站,无论是后端渲染还是异步加载,全都可以正常抓取。只要你能清楚描述你的需求,就能正常实现你的需求。

再举个例子,我想爬我的博客文章,需求描述如下:

访问https://kingname.info/,使用lxml执行xpath: //a[@class="post-title-link"]/@href获取每篇文章的url。然后逐一进入每一篇文章的详情页,使用//h1[@class="post-title"]/text()获取标题,使用//time[@itemprop="dateCreated datePublished"]/text获取发布时间,使用//div[@itemprop="articleBody"]/p//text()获取正文。然后把这些数据保存到article.txt文件中。每篇文章之间 使用==========分割

运行效果如下图所示:

e3da63998f912ef2579d975505f148dc.png

bc66e9f03310d6949243f82faa5ca7f0.png

点个在看你最好看

outside_default.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值