基于Llamaindex的网页内容爬取实战

目的

本文不关注如何解析网页 html 元素和各种 python 爬虫技术,仅作为一种网页数据的预处理手段进行研究。Llamaindex 也并不是爬虫技术的集大成者,使用它是为了后续的存查一体化。

安装依赖

shell 复制代码
pip install llama-index-readers-web
# pip install llama_index.embeddings.huggingface
# pip install llama_index.llms.ollama

注释部分是补充安装的内容。

测试一下

vim test-web-bs.py,官方示例默认代码:

python 复制代码
from llama_index.core import VectorStoreIndex, download_loader

from llama_index.readers.web import BeautifulSoupWebReader

loader = BeautifulSoupWebReader()
documents = loader.load_data(urls=["https://google.com"])
index = VectorStoreIndex.from_documents(documents)
index.query("What language is on this website?")

上述这个代码是访问 openai 的,Google 也打不开,运行不了:

shell 复制代码
Could not load OpenAI embedding model. If you intended to use OpenAI, please check your OPENAI_API_KEY.
Original error:
No API key found for OpenAI.

而且单独使用 index.query("What language is on this website?") 也报错:AttributeError: 'VectorStoreIndex' object has no attribute 'query',大修,运行:

shell 复制代码
from llama_index.core import VectorStoreIndex, download_loader
from llama_index.core import Settings

from llama_index.readers.web import BeautifulSoupWebReader
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.ollama import Ollama

Settings.embed_model = HuggingFaceEmbedding(
    model_name="/root/RAGAll/models/bge-large-zh-v1.5"  # 替换为你的本地模型路径
)
Settings.llm = Ollama(
    base_url="http://10.11.12.13:11434",
    model="qwen2.5_7b",
    context_window=4096,
    request_timeout=120.0
)
loader = BeautifulSoupWebReader()
documents = loader.load_data(urls=["https://mp.weixin.qq.com/s/xxx-yyy"])
#print(documents)
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine(similarity_top_k=5, streaming=True)
your_query = "本文主要讲了什么?"
#print(query_engine.query(your_query).response)
response = query_engine.query(your_query)
response.print_response_stream()

改善一下

打印上面的 documents 观察到获取到的正文内容无用字符,边角料颇多。使用下面的 Loader,获取到的正文效果好很多。

python 复制代码
from llama_index.readers.web import UnstructuredURLLoader
urls = [
    "https://mp.weixin.qq.com/s/xyz"
]

loader = UnstructuredURLLoader(
    urls=urls, continue_on_failure=False, headers={"User-Agent": "value"}
)

documents = loader.load_data()
print(documents)

报错 AttributeError: 'VectorStoreIndex' object has no attribute 'query'

关于这个报错,查阅了官方文档,VectorStoreIndex 的确是没有 query 这个方法的,所以应该是官方示例 demo 写错了。

python 复制代码
documents = loader.load_data(urls=["https://www.baidu.com"])
index = VectorStoreIndex.from_documents(documents).as_query_engine()
# 然后才可调用query方法
res = index.query("What language is on this website?")
# The language on this website is Chinese
相关推荐
星恒随风5 分钟前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
888CC++8 分钟前
java 并发编程
java·开发语言·python
Dxy123931021612 分钟前
python缩放图片如何保证图片质量
python
ZHW_AI课题组1 小时前
腾讯云调用IP定位
人工智能·python·机器学习
zhaoshuzhaoshu1 小时前
Python文件操作详细解析带例子
python
醒醒该学习了!1 小时前
Anaconda安装教程+第一个python例子
开发语言·python
linyanRPA1 小时前
影刀RPA+Python店群自动化实战:自研环境隔离引擎,200店铺并发不卡不串号
python·自动化·rpa
郑洁文3 小时前
面向Web安全的Python渗透测试系统设计与实现
python·安全·web安全
情绪总是阴雨天~3 小时前
智能语音分析Agent项目
python·自动化·fastapi·langgraph