给定一个关键词字符串,例如“Python 最佳实践”,我想从 Python 脚本中获取包含该关键词的 Stack Overflow 问题的前 10 个问题,按相关性排序。我的目标是以列表(标题、URL)结束。如何实现这个目标?你是否考虑过查询 Google?你将如何用 Python 实现它?
2、解决方案
1、使用 Stack Overflow 搜索 API
Stack Overflow 提供了一个搜索 API,可以用于从脚本中搜索问题。该 API 允许您指定查询字符串、排序顺序和其他选项。以下是使用 Stack Overflow 搜索 API 从脚本中获取问题的示例:
import requests
def get_stackoverflow_questions(query):
"""
使用 Stack Overflow 搜索 API 获取问题
Args:
query (str): 查询字符串
Returns:
list: 问题的列表
"""
# 设置请求参数
params = {
'q': query,
'sort': 'relevance',
'order': 'desc'
}
# 发送请求
response = requests.get('https://api.stackexchange.com/2.3/questions', params=params)
# 解析响应
data = response.json()
questions = data['items']
# 返回问题列表
return questions
# 获取包含“Python 最佳实践”关键词的前 10 个问题
questions = get_stackoverflow_questions('Python 最佳实践')
# 打印问题列表
for question in questions:
print(question['title'])
print(question['link'])
2、使用 BeautifulSoup 库
BeautifulSoup 是一个用于从 HTML 和 XML 文档中提取数据的 Python 库。它可以轻松地解析 HTML 文档并提取所需的信息。以下是使用 BeautifulSoup 库从 Stack Overflow 搜索结果页面中提取问题的示例:
import requests
from bs4 import BeautifulSoup
def get_stackoverflow_questions(query):
"""
使用 BeautifulSoup 库从 Stack Overflow 搜索结果页面中提取问题
Args:
query (str): 查询字符串
Returns:
list: 问题的列表
"""
# 设置请求参数
params = {
'q': query,
'sort': 'relevance',
'order': 'desc'
}
# 发送请求
response = requests.get('https://stackoverflow.com/search', params=params)
# 解析响应
soup = BeautifulSoup(response.text, 'html.parser')
# 找到问题列表
questions = soup.find_all('div', class_='question-summary')
# 提取问题列表中的信息
question_list = []
for question in questions:
title = question.find('a', class_='question-hyperlink').text
link = question.find('a', class_='question-hyperlink')['href']
question_list.append((title, link))
# 返回问题列表
return question_list
# 获取包含“Python 最佳实践”关键词的前 10 个问题
questions = get_stackoverflow_questions('Python 最佳实践')
# 打印问题列表
for question in questions:
print(question[0])
print(question[1])
3、使用正则表达式
正则表达式是一种用于匹配文本模式的强大工具。它可以用于从文本中提取所需的信息。以下是使用正则表达式从 Stack Overflow 搜索结果页面中提取问题的示例:
import requests
import re
def get_stackoverflow_questions(query):
"""
使用正则表达式从 Stack Overflow 搜索结果页面中提取问题
Args:
query (str): 查询字符串
Returns:
list: 问题的列表
"""
# 设置请求参数
params = {
'q': query,
'sort': 'relevance',
'order': 'desc'
}
# 发送请求
response = requests.get('https://stackoverflow.com/search', params=params)
# 解析响应
html = response.text
# 匹配问题列表
pattern = r'<div class="question-summary">.*?<a class="question-hyperlink" href="(.+?)">(.+?)</a>'
questions = re.findall(pattern, html)
# 返回问题列表
return questions
# 获取包含“Python 最佳实践”关键词的前 10 个问题
questions = get_stackoverflow_questions('Python 最佳实践')
# 打印问题列表
for question in questions:
print(question[1])
print(question[0])