学习笔记:易速鲜花网络人脉工具项目
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,以下是简单步骤:
- 使用浏览器(如 Chrome、Firefox)访问微博并登录。
- 登录后,右键单击页面并选择“检查”(Inspect)。
- 打开开发者工具,点击 Network 选项卡。
- 在页面上进行一些操作(如刷新页面),然后在 Network 选项卡下查看请求列表。
- 选择任一请求项,然后在右侧的 Headers 选项卡中查找 Request Headers 部分。
- 在这部分中,你应该可以看到一个名为 Cookie 的字段,这就是你需要的 Cookie 值。
将获取到的完整Cookie值复制(挺长的),并替换上述代码中的 "你的Cookie"
部分。
-
精简爬取输出(general_tool.py) :
- 实现remove_non_chinese_fields函数,移除无用的信息,精简输出结果。
5. 项目步骤详解
-
找到大V:
- 使用LangChain代理和提示模板,搜索与特定鲜花相关的微博大V UID。
- 通过CustomSerpAPIWrapper获取URL,从中提取UID。
-
爬取大V资料:
- 根据获取的UID,使用爬虫工具爬取大V的公开信息。
- 精简爬取结果,移除无用信息,保留重要数据。
6. 总结与思考
- 项目进展:已完成前两步,找到大V UID并爬取资料,为后续生成合作文案打下基础。
- LangChain应用:通过LangChain组件和自定义Tool,实现了搜索和爬取功能。
- 下一步计划:利用大模型的文本生成功能撰写合作文案,并将文案解析成所需格式,部署到网络服务器端。