青训营X豆包MarsCode 技术训练营第九课 | 豆包MarsCode AI 刷题

1 阅读5分钟

学习笔记:易速鲜花网络人脉工具项目

1. 项目背景与目标

  • 背景:易速鲜花电商网络通过自媒体获得流量,需扩大品牌影响力,计划通过微博大V推广。
  • 目标:开发人脉搜索工具,帮助市场营销部门找到适合推广鲜花的微博大V,并提供联络方案。

2. 技术实现细节

  • 第一步:使用LangChain搜索工具,找到可能对鲜花推广感兴趣的大V,并返回UID。
  • 第二步:根据UID,使用爬虫工具获取大V的公开信息,并以JSON格式返回。

3. LangChain组件应用

  • 提示模板:用于告诉大模型需要找到的内容(UID)。
  • LLM调用:利用大模型的能力进行搜索和信息提取。
  • Chain和Agent:LangChain中的Chain和Agent用于任务的执行和流程控制。
  • 自定义Tool:因为内置的SerpAPI Tool不能完全满足需求,所以创建了Customized Tool。

4. 实现代码详解

  • 主程序findbigV.py

    • 设置API密钥。
    • 导入所需的库和自定义的Agent。
    • 执行搜索并获取UID,然后爬取大V信息。
  • 微博Agent(weibo_agent.py)

    • 定义lookup_V函数,用于搜索大V的UID。
    • 使用PromptTemplate和ChatOpenAI与LangChain代理交互。
  • 搜索UID的工具(search_tool.py)

    • 继承SerpAPIWrapper类,重构_process_response方法,返回URL而不是snippet。
    • 实现get_UID函数,用于搜索与特定鲜花相关的微博UID。
  • 爬取大V资料(scraping_tool.py)

    • 定义scrape_weibo函数,用于爬取微博用户信息。
    • 实现get_data函数,根据UID构建URL并爬取信息。
    • 代码详细:

主程序 findbigV.py

第二步完成之后,主程序代码如下:

plain
复制代码
AI练中学
# 设置OpenAI API密钥
import os
os.environ["OPENAI_API_KEY"] = 'Your OpenAI API Key'
os.environ["SERPAPI_API_KEY"] = 'Your SerpAPI Key'

# 导入所取的库
import re
from agents.weibo_agent import lookup_V
from tools.general_tool import remove_non_chinese_fields
from tools.scraping_tool import get_data

if __name__ == "__main__":

    # 拿到UID
    response_UID = lookup_V(flower_type = "牡丹" )

    # 抽取UID里面的数字
    UID = re.findall(r'\d+', response_UID)[0]
    print("这位鲜花大V的微博ID是", UID)

    # 根据UID爬取大V信息
    person_info = get_data(UID)
    print(person_info)

从第一步到第二步,我们主要是完成了一次微博信息的爬取。

scraping_tool.py 中的 scrape_weibo 方法

第二步中的关键逻辑是scraping_tool.py中的scrape_weibo方法,具体代码如下:

# 导入所需的库
import json
import requests
import time

# 定义爬取微博用户信息的函数
def scrape_weibo(url: str):
    '''爬取相关鲜花服务商的资料'''
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36",
        "Referer": "https://weibo.com"
    }
    cookies = {
        "cookie": '''SINAGLOBAL=3762226753815.13.1696496172299; ALF=1699182321; SCF=AiOo8xtPwGonZcAbYyHXZbz9ixm97mWi0vHt_VvuOKB-u4-rcvlGtWCrE6MfMucpxiOy5bYpkIFNWTj7nYGcyp4.; _sc_token=v2%3A2qyeqD3cTZFNTl0sn3KAYe4fNqzMUEP-C7nxNsd_Q1r-vpYMlF2K3xc4vWNuLNBbp3RsohghkJdlSVN09cymVo5AKAm0V92004V8cSRe9O5v9B65jd4yiG_sATDeB06GnjiJulXUrEF_6XsHh1ozK6jvbTKEUIkF7v0_BlbX6IcWrPkwh6xL_WM_0YUV2v7CtNPwyxfbAjaWnG32TsxG_ftN3s5m7qfaRftU6iTOSnE%3D; XSRF-TOKEN=4o0E6jaUQ0BlN77az0sURTg3; PC_TOKEN=dcf0e7607f; login_sid_t=36ebf31f1b3694fb71e77e35d30f052f; cross_origin_proto=SSL; WBStorage=4d96c54e|undefined; _s_tentry=passport.weibo.com; UOR=www.google.com,weibo.com,login.sina.com.cn; Apache=7563213131783.361.1696667509205; ULV=1696667509207:2:2:2:7563213131783.361.1696667509205:1696496172302; wb_view_log=3440*14401; WBtopGlobal_register_version=2023100716; crossidccode=CODE-gz-1QP2Jh-13l47h-79FGqrAQgQbR8ccb7b504; SSOLoginState=1696667553; SUB=_2A25IJWfwDeThGeFJ6lsQ-SbNzjuIHXVr5gm4rDV8PUJbkNAbLUWtkW1NfJd_XHamKIzj5RlT_-RGMma6z3YQZUK3; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFDKvBlvg14YuHk_4c6MEH_5NHD95QNS024eK.ReK-NWs4DqcjZCJ8oIN.pSKzceBtt; WBPSESS=gyY2mn77F4p5VxWF2IB_yFR0phHVTNfaJAHAMprnW7MeUr-NHPZNyeeyKae3tHELlc_RbcI1XPSz-TjSJqWrIXs-yh1fwhxL4mSDrnpPZEogFt8ScF5NEwSqPGn7x2KMAgTHtWde-3MBm6orQ98PDA=='''
    }
    response = requests.get(url, headers=headers, cookies=cookies)
    time.sleep(3)   # 加上3s 的延时防止被反爬
    return response.text

# 根据UID构建URL爬取信息
def get_data(id):
    url = "https://weibo.com/ajax/profile/detail?uid={}".format(id)
    html = scrape_weibo(url)
    response = json.loads(html)

    return response

我这段爬虫代码特别简洁,不需要过多的解释,唯一需要说明的部分是怎么找到你自己的Cookies。

Cookie 是由服务器发送到用户浏览器的一小段数据,并可能在随后的请求中被回传。它的主要目的是让服务器知道用户的上下文信息或状态。在Web爬虫中,使用正确的Cookie可以模拟登录状态,从而获取到需要权限的网页内容。 首先,用QQ ID登录的微博,通过这样的方式找到的Cookie能用得比较久。然后,从我的浏览器中获取 Cookie,以下是简单步骤:

  1. 使用浏览器(如 Chrome、Firefox)访问微博并登录。
  2. 登录后,右键单击页面并选择“检查”(Inspect)。
  3. 打开开发者工具,点击 Network 选项卡。
  4. 在页面上进行一些操作(如刷新页面),然后在 Network 选项卡下查看请求列表。
  5. 选择任一请求项,然后在右侧的 Headers 选项卡中查找 Request Headers 部分。
  6. 在这部分中,你应该可以看到一个名为 Cookie 的字段,这就是你需要的 Cookie 值。

将获取到的完整Cookie值复制(挺长的),并替换上述代码中的 "你的Cookie" 部分。

  • 精简爬取输出(general_tool.py)

    • 实现remove_non_chinese_fields函数,移除无用的信息,精简输出结果。

5. 项目步骤详解

  1. 找到大V

    • 使用LangChain代理和提示模板,搜索与特定鲜花相关的微博大V UID。
    • 通过CustomSerpAPIWrapper获取URL,从中提取UID。
  2. 爬取大V资料

    • 根据获取的UID,使用爬虫工具爬取大V的公开信息。
    • 精简爬取结果,移除无用信息,保留重要数据。

6. 总结与思考

  • 项目进展:已完成前两步,找到大V UID并爬取资料,为后续生成合作文案打下基础。
  • LangChain应用:通过LangChain组件和自定义Tool,实现了搜索和爬取功能。
  • 下一步计划:利用大模型的文本生成功能撰写合作文案,并将文案解析成所需格式,部署到网络服务器端。