AsyncHtmlLoader无法正常抓取维基百科页面内容问题求助
AsyncHtmlLoader无法正常抓取维基百科页面内容问题求助
大家好,我最近在学习RAG相关内容,照着书上的代码用AsyncHtmlLoader抓取维基百科2023板球世界杯的页面,但遇到了问题——返回的不是页面实际内容,而是维基的机器人政策提示。我尝试加了agent相关的设置,但还是没解决,想请教下大家怎么处理这个问题?
我的代码如下:
from langchain_community.document_loaders import AsyncHtmlLoader # This is the URL of the Wikipedia page on the 2023 Cricket World Cup url="https://en.wikipedia.org/wiki/2023_Cricket_World_Cup" loader = AsyncHtmlLoader(url) html_data = loader.load() print(html_data)
运行后的输出:
Fetching pages: 100%|####################################################################| 1/1 [00:00<00:00, 3.47it/s] [Document(metadata={'source': 'https://en.wikipedia.org/wiki/2023_Cricket_World_Cup'}, page_content='Please respect our robot policy https://w.wiki/4wJS when crawling us. Contact bot-traffic@wikimedia.org if you need higher volumes. (b74d0e2) (30224bb)')]
问题分析
维基百科有严格的反爬机制,默认的AsyncHtmlLoader请求头没有模拟正常浏览器的访问,所以被识别成了爬虫,返回了机器人政策的提示信息。
可行的解决办法
方法一:给AsyncHtmlLoader添加自定义请求头
通过设置headers参数,模拟浏览器的User-Agent,让请求看起来更像正常用户访问:from langchain_community.document_loaders import AsyncHtmlLoader url="https://en.wikipedia.org/wiki/2023_Cricket_World_Cup" # 这里可以用任意主流浏览器的User-Agent,下面是Chrome的示例 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } loader = AsyncHtmlLoader(url, headers=headers) html_data = loader.load() # 打印页面内容的前500字符验证 print(html_data[0].page_content[:500])方法二:使用LangChain专门的WikipediaLoader
LangChain提供了针对维基百科的专属加载器,它通过官方API获取内容,更稳定且不会触发反爬:from langchain_community.document_loaders import WikipediaLoader # 传入页面标题或者关键词,load_max_docs控制加载的文档数量 loader = WikipediaLoader(query="2023 Cricket World Cup", load_max_docs=1) docs = loader.load() print(docs[0].page_content)
备注:内容来源于stack exchange,提问作者Muhammad Faizan Khan
相关产品推荐
相关产品推荐

