如何用Python从谷歌搜索结果中排除约2000个网页?
嘿,作为Python新手碰到这种批量排除网页的问题确实头大——谷歌那减号语法根本扛不住2000个这么多的排除项对吧?别慌,我给你捋个新手友好、通俗易懂的方案,全程用基础Python代码+一个简单工具,保证你能跟着走通~
核心思路:绕开谷歌的限制,本地过滤
谷歌的搜索指令有长度上限,2000个网址堆进去肯定直接失效。所以咱们换个思路:先把谷歌的搜索结果全部拿下来,再自己在本地把要排除的网页筛掉,完全不受谷歌的限制!
具体步骤(全程复制改参数就行)
1. 先准备你的排除列表
把2000个要排除的网址存成一个文本文件,比如命名为blocked_urls.txt,每行放一个网址,像这样:
https://example1.com/page1 https://example2.com/post/article https://testsite.com/archive ...
然后用Python把这个文件读成一个集合(集合查找速度比列表快10倍不止,2000个元素秒查):
# 读取排除列表,存成集合 blocked_urls = set() with open('blocked_urls.txt', 'r', encoding='utf-8') as f: for line in f: url = line.strip() # 去掉换行符和多余空格 if url: # 跳过空行 blocked_urls.add(url)
2. 获取谷歌搜索结果
这里用一个专门的Python库googlesearch-python,它能帮咱们轻松拿到谷歌的搜索结果,新手装起来也简单:
先打开命令提示符(Windows)或终端(Mac/Linux),输入:
pip install googlesearch-python
然后写代码拿搜索结果:
from googlesearch import search # 替换成你自己的搜索关键词 your_search_query = "Python新手入门教程" # 获取搜索结果,num_results可以设置你要拿多少条,比如100条 search_results = [] # 加pause=2是为了避免被谷歌反爬,每查一次停2秒 for result in search(your_search_query, num_results=100, pause=2): search_results.append(result)
3. 过滤掉要排除的网页
现在咱们把搜索结果里不在排除列表的网址挑出来:
filtered_results = [] for url in search_results: if url not in blocked_urls: filtered_results.append(url)
就这么简单!集合的not in操作超快,2000个排除项完全没压力。
4. 保存或查看结果
把过滤后的结果存成文本文件,方便你后续查看:
with open('filtered_results.txt', 'w', encoding='utf-8') as f: for url in filtered_results: f.write(url + '\n')
或者直接在控制台打印出来看看:
print("过滤后的有效搜索结果:") for idx, url in enumerate(filtered_results, 1): print(f"{idx}. {url}")
新手必看的细节优化
如果发现有些网址明明要排除却没被过滤掉,大概率是网址格式不统一(比如搜索结果是https://www.example.com,你排除列表里是example.com)。可以加个小函数统一网址格式:
def normalize_url(url): # 统一转为小写,去掉开头的https://、http://、www. url = url.lower().replace('https://', '').replace('http://', '').replace('www.', '') # 去掉末尾的斜杠 if url.endswith('/'): url = url[:-1] return url # 读取排除列表时就标准化 blocked_urls = set() with open('blocked_urls.txt', 'r', encoding='utf-8') as f: for line in f: url = line.strip() if url: blocked_urls.add(normalize_url(url)) # 过滤时也标准化网址 filtered_results = [] for url in search_results: if normalize_url(url) not in blocked_urls: filtered_results.append(url)
这样不管网址带不带www.或https://,都能正确匹配排除啦~
内容的提问来源于stack exchange,提问作者Sergiy
相关产品推荐
相关产品推荐

