如何用Python(含2.7版本)获取并打印谷歌搜索结果URL?
解决Python(含2.7)中提取并打印谷歌搜索结果URL的问题
嘿,我来帮你搞定这个问题!不管是通用Python版本还是Python 2.7,核心思路都是先获取谷歌搜索页面的HTML内容,再解析出里面的结果链接。先看看你的现有代码,有几个小语法问题得先修正,比如test = [] test.append("aa")这里得分开写或者加个分号,另外还得补充必要的库来处理HTML解析。
前置准备
首先得安装两个关键库:
requests:用来发送HTTP请求获取页面内容beautifulsoup4:用来解析HTML页面,提取需要的链接
针对Python 2.7的特殊说明
因为Python 2.7已经停止维护,得安装兼容的旧版本库:
pip install requests==2.27.1 pip install beautifulsoup4==4.9.3
通用Python 3.x版本直接装最新版即可:
pip install requests beautifulsoup4
通用Python 3.x版本完整代码
import sys import requests from bs4 import BeautifulSoup from urllib.parse import urlparse, parse_qs # 检查是否传入了搜索关键词参数 if len(sys.argv) < 2: print("请传入搜索关键词作为命令行参数,比如:python script.py python教程") sys.exit(1) search_keyword = sys.argv[1] print(f"正在搜索关键词: {search_keyword}") # 构造谷歌搜索URL,添加User-Agent模拟浏览器访问(避免被谷歌拦截) main_url = "https://www.google.com/search?q=" final_url = main_url + search_keyword 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" } # 发送请求获取页面内容 req = requests.get(final_url, headers=headers) # 检查请求是否成功 if req.status_code != 200: print(f"请求失败,状态码: {req.status_code}") sys.exit(1) # 解析HTML页面,提取搜索结果链接 soup = BeautifulSoup(req.text, "html.parser") # 谷歌搜索结果通常包裹在class为"yuRUbf"的div容器中 search_results = soup.find_all("div", class_="yuRUbf") print("\n搜索结果URL列表:") for result in search_results: a_tag = result.find("a") if a_tag and "href" in a_tag.attrs: raw_href = a_tag["href"] # 谷歌的链接是/url?q=真实URL&xxx的格式,需要提取q参数对应的真实链接 parsed_url = urlparse(raw_href) real_url = parse_qs(parsed_url.query).get("q", [None])[0] if real_url: print(real_url)
Python 2.7版本适配代码
因为Python 2.7不支持f-string,且urllib模块结构不同,做以下调整:
import sys import requests from bs4 import BeautifulSoup from urlparse import urlparse, parse_qs # 检查命令行参数 if len(sys.argv) < 2: print("请传入搜索关键词作为命令行参数,比如:python script.py python教程") sys.exit(1) search_keyword = sys.argv[1] print("正在搜索关键词: %s" % search_keyword) # 构造搜索URL并发送请求 main_url = "https://www.google.com/search?q=" final_url = main_url + search_keyword 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" } req = requests.get(final_url, headers=headers) # 检查请求状态 if req.status_code != 200: print("请求失败,状态码: %d" % req.status_code) sys.exit(1) # 解析并提取链接 soup = BeautifulSoup(req.text, "html.parser") search_results = soup.find_all("div", class_="yuRUbf") print("\n搜索结果URL列表:") for result in search_results: a_tag = result.find("a") if a_tag and "href" in a_tag.attrs: raw_href = a_tag["href"] parsed_url = urlparse(raw_href) real_url = parse_qs(parsed_url.query).get("q", [None])[0] if real_url: print(real_url)
几个重要注意点
- 一定要加
User-Agent:谷歌会拦截没有浏览器标识的爬虫请求,添加后能避免大部分拦截问题 - 页面结构可能变化:如果某天发现提取不到链接,右键打开谷歌搜索页面的"检查元素",看看搜索结果容器的class是否更新,调整
find_all的参数即可 - Python 2.7建议升级:虽然上面的代码能运行,但Python 2.7已经停止维护,长期来看还是建议迁移到Python 3.x版本
内容的提问来源于stack exchange,提问作者Utkarsh Agrawal
相关产品推荐
相关产品推荐

