Python网页爬虫MongoDB关键词查询失效问题求助
问题分析与解决方法
核心问题
你的代码没把抓取到的文章段落内容存入MongoDB,反而存了个空字典mydict,导致数据库里根本没有实际的文章文本,自然查不到特定词汇。另外循环打印段落的语句没缩进,存在语法错误。
修复步骤
- 提取并整理段落文本:把每个段落的文本提取出来,要么存成列表,要么拼接成完整文章,再写入数据库。
- 修正语法错误:给循环打印语句加上正确缩进。
- 正确存储数据:把整理好的文本内容存入MongoDB文档,而非空字典。
修改后的完整代码
import pymongo import requests from bs4 import BeautifulSoup # 抓取网页内容 url = "https://www.bbc.com/news/articles/cy081nqx2zjo" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 提取所有段落文本并过滤空内容 paragraphs = soup.find_all("p") article_content = [] for paragraph in paragraphs: text = paragraph.text.strip() if text: article_content.append(text) print(text) # 检查抓取结果(改为统计内容总长度更合理) def check_content(content): total_length = sum(len(p) for p in content) return "extracted fine" if total_length > 100 else "An exception occurred" print(check_content(article_content)) # 连接MongoDB并存储数据 client = pymongo.MongoClient("mongodb://localhost:27017") db = client["mydb"] collection = db["summarizer"] # 存储段落列表和拼接后的完整文本,方便后续查询 doc = { "url": url, "article_paragraphs": article_content, "full_article_text": "\n".join(article_content) } collection.insert_one(doc)
查询特定词汇的方法
数据存好后,用以下方式查询包含目标词汇的文章:
import pymongo # 连接数据库 client = pymongo.MongoClient("mongodb://localhost:27017") db = client["mydb"] collection = db["summarizer"] # 示例:查询包含"climate"的文档(忽略大小写) keyword = "climate" results = collection.find({"full_article_text": {"$regex": keyword, "$options": "i"}}) # 输出匹配结果预览 for doc in results: print(f"匹配文章URL:{doc['url']}") print(f"内容预览:{doc['full_article_text'][:200]}...\n")
- 若要精确匹配某一段落,可查询
article_paragraphs字段:collection.find({"article_paragraphs": {"$elemMatch": {"$regex": keyword}}}) - 频繁查询的话,建议给
full_article_text创建文本索引提升效率:collection.create_index([("full_article_text", pymongo.TEXT)]),之后用collection.find({"$text": {"$search": keyword}})查询更高效。
内容的提问来源于stack exchange,提问作者John Tomasson
相关产品推荐
相关产品推荐

