网络爬虫
概述
网络爬虫是LangChain中的一项关键功能,允许用户自动从互联网上收集信息。这项功能对于研究和数据收集尤其有价值,因为它可以大幅减少手动搜索和信息整理的工作量。
从网络收集内容有几个主要组件:
Search搜索:使用工具如GoogleSearchAPIWrapper查询并获取URL列表。
Loading加载:将URL转换为HTML内容,使用工具如AsyncHtmlLoader或AsyncChromiumLoader。
Transforming转换:将HTML内容转换为格式化文本,使用HTML2Text或BeautifulSoup等工具。
准备
安装相关依赖库
pip install langchain-openai langchain playwright beautifulsoup4
设置OpenAI的BASE_URL、API_Key
import os
os.environ["OPENAI_BASE_URL"] = "https://xxx.com/v1"
os.environ["OPENAI_API_KEY"] = "sk-dtRXRfYzHDZQT8Cr2874xxxx13F97bF24b7a"
加载器
使用Chromium的无头实例爬取HTML内容,无头模式意味着浏览器在没有图形用户界面的情况下运行,这通常用于网页抓取。
主要有2种方式:
方式 | 加载器 | 描述 |
---|---|---|
Python的asyncio库 | AsyncHtmlLoader | 使用该库aiohttp发出异步 HTTP 请求,适合更简单、轻量级的抓取。 |
Playwright | AsyncChromiumLoader | 使用 Playwright 启动 Chromium 实例,该实例可以处理 JavaScript 渲染和更复杂的 Web 交互。 |
注意:
Chromium 是 Playwright 支持的浏览器之一,Playwright 是一个用于控制浏览器自动化的库。
from langchain_community.document_loaders import AsyncChromiumLoader
# 加载HTML
loader = AsyncChromiumLoader(["https://www.langchain.com"])
html = loader.load()
转换
html2text
html2text 是一个 Python 包,它将 HTML 页面转换为干净、易于阅读的纯文本,无需任何特定的标签操作。它最适合目标是提取人类可读文本而不需要操作特定HTML元素的场景。
要使用html2text,首先需要额外安装
pip install html2text
使用示例如下:
from langchain_community.document_loaders import AsyncChromiumLoader
from langchain_community.document_transformers import Html2TextTransformer
# 加载HTML
loader = AsyncChromiumLoader(["https://www.langchain.com"])
html = loader.load()
# # 转换
html2text = Html2TextTransformer()
docs_transformed = html2text.transform_documents(html)
# 结果
res = docs_transformed[0].page_content[0:500]
print(res)
Beautiful Soup
Beautiful Soup 提供对 HTML 内容更细粒度的控制,支持特定标签的提取、删除和内容清理。它适合根据需要提取特定信息并清理 HTML 内容的情况。
要使用Beautiful Soup,首先也是需要安装
pip install beautifulsoup4
使用示例如下
from langchain_community.document_loaders import AsyncChromiumLoader
from langchain_community.document_transformers import BeautifulSoupTransformer
# 加载HTML
loader = AsyncChromiumLoader(["https://www.langchain.com"])
html = loader.load()
# # 转换
bs_transformer = BeautifulSoupTransformer()
docs_transformed = bs_transformer.transform_documents(html, tags_to_extract=["h1"])
# 结果
res = docs_transformed[0].page_content[0:500]
print(res)
从HTML内容中爬取文本内容标签说明
<p>:段落标签。在HTML中定义段落,并用于组合相关句子或短语
<li>:列表项标签。用于有序(<ol>)和无序(<ul>)列表中,定义列表中的各个项
<div>:分区标签。块级元素,用于组合其他内联或块级元素
<a>:锚点标签。用于定义超链接
<span>:内联容器,用于标记文本的一部分或文档的一部分
提取
定义模式、架构来指定想要提取的数据类型。键名很重要,因为它告诉 LLM想要什么样的信息。
# 定义模式、架构来指定想要提取的数据类型
schema = {
"properties": {
"all_tutorial_category": {"type": "string"},
"category_item": {"type": "string"},
},
"required": ["all_tutorial_category"],
}
提取网页内容的爬虫实现如下
from langchain_community.document_loaders import AsyncChromiumLoader
from langchain_community.document_transformers import BeautifulSoupTransformer
from langchain_openai import ChatOpenAI
from langchain.text_splitter import RecursiveCharacterTextSplitter
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")
from langchain.chains import create_extraction_chain
# 定义模式、架构来指定想要提取的数据类型
schema = {
"properties": {
"category_item": {"type": "string"},
},
"required": ["category_item"],
}
# 执行提取链
def extract(content: str, schema: dict):
return create_extraction_chain(schema=schema, llm=llm).invoke(content)
# 使用AsyncChromiumLoader加载器
def scrape_with_playwright(urls, schema):
loader = AsyncChromiumLoader(urls)
docs = loader.load()
bs_transformer = BeautifulSoupTransformer()
# 限制爬取指定标签内容
docs_transformed = bs_transformer.transform_documents(docs, tags_to_extract=["h4"])
print("使用 LLM 提取内容")
# 获取网站的前 1000 个token文本
splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
chunk_size=1000, chunk_overlap=0
)
splits = splitter.split_documents(docs_transformed)
# 拆分处理
extracted_content = extract(schema=schema, content=splits[0].page_content)
# 打印内容
# pprint.pprint(extracted_content)
return extracted_content
if __name__ == '__main__':
urls = ["https://www.runoob.com/"]
extracted_content = scrape_with_playwright(urls, schema=schema)
print(extracted_content)
执行部分日志如下,可以看出数据提前成功
text': [{'category_item': 'HTML'}, {'category_item': 'CSS'}, {'category_item': 'Bootstrap'},
{'category_item': 'Font Awesome'}, {'category_item': 'Foundation'}, {'category_item': 'JavaScript'},
{'category_item': 'HTML DOM'}, {'category_item': 'jQuery'},
........
{'category_item': 'Markdown'}, {'category_item': 'HTTP'},
{'category_item': 'TCP/IP'}, {'category_item': 'W3C'}]}
自动化
可以使用检索器(如WebResearchRetriever)来自动化网络研究过程,以便使用搜索内容回答特定问题。
自动化爬取实现如下
from langchain.retrievers.web_research import WebResearchRetriever
from langchain_chroma import Chroma
from langchain_community.utilities import GoogleSearchAPIWrapper
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
import logging
from langchain.chains import RetrievalQAWithSourcesChain
import os
os.environ["GOOGLE_API_KEY"] = 'AIzaSyBNrdu0_xxxxx-Vk2nDs'
os.environ["GOOGLE_CSE_ID"] = '405fxxxxxx64ca1'
# 向量存储:使用 Chroma 客户端进行初始化
vectorstore = Chroma(
embedding_function=OpenAIEmbeddings(), persist_directory="./chroma_db_oai"
)
# LLM
llm = ChatOpenAI(temperature=0)
# 搜索
search = GoogleSearchAPIWrapper()
"""
使用上述工具初始化检索器:
使用 LLM 生成多个相关搜索查询(一次 LLM 调用)
对每个查询执行搜索
选择每个查询的前 K 个链接(并行多个搜索调用)
从所有选定的链接加载信息(并行抓取页面)
将这些文档索引到矢量存储中
为每个原始生成的搜索查询查找最相关的文档
"""
web_research_retriever = WebResearchRetriever.from_llm(
vectorstore=vectorstore, llm=llm, search=search
)
# 设置日志
logging.basicConfig()
logging.getLogger("langchain.retrievers.web_research").setLevel(logging.INFO)
# 执行
user_input = "菜鸟教程网站有那些教程分类?"
qa_chain = RetrievalQAWithSourcesChain.from_chain_type(
llm, retriever=web_research_retriever
)
result = qa_chain.invoke({"question": user_input})
print(result)
输出结果如下
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓