爬取谷歌搜索结果时如何去除href链接中google.com/url?q=前缀
谷歌搜索结果跳转前缀去除方案
问题原因
谷歌为了实现点击统计、安全校验等能力,会给搜索结果的原始链接套一层跳转代理,你拿到的href属性里q参数的值才是目标站点的原始链接,后缀的&sa=、&ved=等都是谷歌的跟踪参数。
推荐解决方案(urllib标准库解析,无第三方依赖)
使用Python自带的urllib.parse模块解析url参数,直接提取q参数的取值,不会出现字符串截断错误,兼容性最高。
修改后的代码示例
首先导入依赖:
from urllib.parse import urlparse, parse_qs from selenium.common import exceptions
修改get_result函数中的链接处理逻辑:
def get_result(item_in): try: title = item_in.find_element_by_xpath('.//div/div/a/h3/div').text print(title) except exceptions.NoSuchElementException: return try: link = item_in.find_element_by_xpath('.//div/div/a').get_attribute('href') # 新增谷歌跳转链接处理逻辑 parsed_url = urlparse(link) # 判断是否是谷歌跳转链接 if parsed_url.netloc == 'www.google.com' and parsed_url.path == '/url': query_params = parse_qs(parsed_url.query) # 提取q参数对应的原始链接 if 'q' in query_params: link = query_params['q'][0] print(link) except exceptions.NoSuchElementException: return result = (title, link) return result
简易替代方案(字符串切割,适合快速调试)
如果只是临时调试使用,可以直接通过字符串匹配切割处理,不推荐生产环境使用:
if link.startswith("https://www.google.com/url?q="): # 先切掉前缀,再按第一个&切割去掉后续谷歌跟踪参数 link = link[len("https://www.google.com/url?q="):].split("&")[0]
内容的提问来源于stack exchange,提问作者SY Moon
相关产品推荐
相关产品推荐

