需求:抓取多个⽹⻚的内容,创建⼀个简单的索引,然后实现⼀个⼩型的搜索功能,以理解搜索技术的基本原理。
分析:要创建⼀个简单的⽹⻚搜索引擎,需要完成⼏个步骤:⾸先,抓取多个⽹⻚的内容;然后,从这些内容中提取⽂本,创建⼀个简单的索引;最后,实现⼀个搜索功能,允许⽤⼾查询索引并返回相关的结果。
步骤 1: 抓取⽹⻚内容
⾸先,需要从⼏个⽹⻚抓取内容。为简化,将使⽤静态HTML⻚⾯作为⽰例。在实际应⽤中,可能会使⽤ requests 和 BeautifulSoup 从实际的⽹站抓取内容。
步骤 2: 创建索引
其次,需要从抓取到的内容中提取⽂本,并创建⼀个简单的索引。在这个例⼦中,索引将是⼀个字典,键是单词,值是包含该单词的⽹⻚列表。
步骤 3: 实现搜索功能
最后,将实现⼀个简单的搜索功能,允许⽤⼾输⼊⼀个查询词,然后返回包含该词的所有⽹⻚。
from collections import defaultdict
import requests
from bs4 import BeautifulSoup
# ⽰例⽹⻚列表
urls = [
'http://example.com/page1',
'http://example.com/page2',
# 添加更多⽹⻚URL
]
# 索引,格式为{word: [url1, url2]}
index = defaultdict(set)
# 抓取⽹⻚并创建索引
for url in urls:
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
text = soup.get_text()
words = text.split()
for word in words:
index[word.lower()].add(url)
# 搜索函数
def search(query):
"""根据查询词返回包含该词的⽹⻚列表"""
return index.get(query.lower(), [])
# ⽰例搜索
query = 'python'
results = search(query)
print(f"包含 '{query}' 的⽹⻚有: {results}")
在这个脚本中:
• 定义了⼀个URL列表 urls ,这些是想要抓取的⽹⻚。
• 使⽤ defaultdict(set) 创建⼀个索引,其中键是单词,值是包含该单词的URL集合。这样可以避免重复记录同⼀URL。
• 对于每个URL,使⽤ requests.get 抓取⽹⻚内容,然后⽤ BeautifulSoup 解析HTML,提取纯⽂本。之后,将⽂本拆分成单词,并更新索引。
• search 函数接受⼀个查询词,返回索引中包含该查询词的URL列表。