使用googlesearch库爬取谷歌搜索结果时如何实现短语精确匹配
谷歌搜索精确短语匹配爬取解决方案
你当前遇到的是googlesearch库查询参数转义,以及谷歌搜索运算符使用不规范导致的精确匹配失效问题,可通过以下方法解决:
方法1:修正查询语句写法
你之前的转义写法可能被库自动吞掉,导致双引号没有实际传递给谷歌搜索接口,同时site运算符不需要加https://前缀,调整后代码如下:
from googlesearch import search # 外层用单引号包裹查询串,内部直接写双引号实现精确匹配,site后直接写域名 query = '"water outage" site:heraldsun.com' # 新增safe参数关闭内容过滤,避免匹配结果被意外拦截 for j in search(query, tld="com", num=100, stop=None, pause=2, safe='off'): print(j)
方法2:新增二次校验逻辑兜底
谷歌本身的搜索逻辑偶尔会返回不完全匹配的结果,你可以在拿到链接后,爬取页面内容做精确校验,确保结果完全符合要求:
from googlesearch import search import requests from bs4 import BeautifulSoup query = '"water outage" site:heraldsun.com' # 配置请求头避免被目标网站拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } for url in search(query, tld="com", num=100, stop=None, pause=2): try: resp = requests.get(url, headers=headers, timeout=10) resp.encoding = resp.apparent_encoding page_content = BeautifulSoup(resp.text, 'lxml').get_text() # 精确匹配目标短语 if "water outage" in page_content: print(url) except: # 跳过请求失败、解析失败的链接 continue
其他注意事项
pause参数不要低于2秒,否则容易触发谷歌反爬机制,返回异常的缓存结果- 不要修改
search方法的tld参数,保持为com才能和普通谷歌网页搜索的结果对齐
内容的提问来源于stack exchange,提问作者Sarah Das
相关产品推荐
相关产品推荐

