Python并行处理谷歌搜索请求 编程新手求助
并行处理谷歌搜索请求的解决方案
嗨,作为编程新手,你能意识到用并行处理优化网络请求这类IO密集型任务真的很棒!你的重复代码完全可以通过并行方式大幅节省时间,我来一步步帮你实现~
首先咱们先把重复的逻辑封装成通用函数,这样不管多少个URL都能复用:
import requests from bs4 import BeautifulSoup from concurrent.futures import ThreadPoolExecutor # 定义处理单个搜索请求的函数 def get_google_search_results(search_url): # 加User-Agent模拟浏览器请求,避免被谷歌反爬拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } try: response = requests.get(search_url, headers=headers) response.raise_for_status() # 检查请求是否成功 soup = BeautifulSoup(response.text, "lxml") result_stats = soup.find("div", {"id": "resultStats"}) return result_stats.text if result_stats else "未找到结果统计" except Exception as e: return f"请求失败: {str(e)}" # 要处理的搜索URL列表 search_urls = [ 'https://www.google.com.tr/search?q=test', 'https://www.google.com.tr/search?q=test2', 'https://www.google.com.tr/search?q=test3' ] # 使用线程池并行执行请求(IO密集型任务用线程池更高效) if __name__ == "__main__": # 创建线程池,最大线程数设为URL数量即可 with ThreadPoolExecutor(max_workers=3) as executor: # 批量提交任务并获取结果 results = executor.map(get_google_search_results, search_urls) # 遍历打印每个URL的结果 for url, result in zip(search_urls, results): print(f"URL: {url}") print(f"结果统计: {result}\n")
为什么选ThreadPoolExecutor而非multiprocessing?
网络请求属于IO密集型任务,线程切换的开销远小于进程,用线程池更高效、资源占用更低。只有CPU密集型任务(比如大量计算)才更适合用multiprocessing。
入门核心逻辑伪代码
如果想先理清思路,核心步骤可以简化成这样:
- 第一步:把「请求URL→解析页面→提取结果」的重复步骤写成一个函数,输入是URL,输出是目标结果
- 第二步:把所有要处理的URL整理成一个列表
- 第三步:创建并行执行器(线程池/进程池),将列表中的每个URL交给执行器调用函数
- 第四步:收集所有执行结果并处理(比如打印)
额外小提醒
谷歌有反爬机制,直接裸请求容易被限制,所以代码里加了User-Agent模拟浏览器请求,你可以根据自己的浏览器调整这个值。如果还是被拦截,少量请求的话可以尝试加个短间隔,或者换个User-Agent试试~
内容的提问来源于stack exchange,提问作者msari
相关产品推荐
相关产品推荐

