You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google搜索页面无法提取SALT-2000.6的href锚标签问题求助

解决Google搜索结果中特定型号链接提取问题

核心思路

放弃依赖不稳定的类名定位,改为基于域名+型号文本匹配的通用提取逻辑,同时兼容静态请求和动态渲染场景。


方案1:静态请求+精准文本匹配

针对静态HTML即可获取结果的场景,遍历所有含目标域名的链接,通过链接文本及父元素文本匹配型号:

from bs4 import BeautifulSoup
import requests

def get_sundown_link(model):
    # 构造site限定搜索,缩小结果范围
    search_url = f"https://www.google.com/search?q={model}+site%3Asundownaudio.com"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }
    resp = requests.get(search_url, headers=headers)
    soup = BeautifulSoup(resp.text, "html.parser")

    for a_tag in soup.find_all("a", href=True):
        raw_href = a_tag["href"]
        # 解析Google跳转链接,提取真实URL
        if raw_href.startswith("/url?q="):
            real_link = raw_href.split("/url?q=")[1].split("&")[0]
        else:
            real_link = raw_href

        # 检查链接及周边2层父元素文本是否包含目标型号(大小写不敏感)
        target_text = model.lower()
        link_text = a_tag.get_text(strip=True).lower()
        parent_text = " ".join([p.get_text(strip=True).lower() for p in a_tag.find_parents("div", limit=2)])
        if target_text in link_text or target_text in parent_text:
            return real_link
    return None

# 测试调用
print(get_sundown_link("SALT-200.4"))
print(get_sundown_link("SALT-2000.6"))

方案2:动态渲染处理(针对JS加载的结果)

如果静态请求无法获取SALT-2000.6的结果,说明该结果由JavaScript动态加载,用Selenium模拟浏览器渲染:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

def get_sundown_link_dynamic(model):
    search_url = f"https://www.google.com/search?q={model}+site%3Asundownaudio.com"
    # 配置无头浏览器
    chrome_options = Options()
    chrome_options.add_argument("--headless=new")
    chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")

    driver = webdriver.Chrome(options=chrome_options)
    driver.get(search_url)
    # 滚动页面触发动态加载,等待内容渲染
    time.sleep(2)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

    soup = BeautifulSoup(driver.page_source, "html.parser")
    driver.quit()

    # 复用方案1的匹配逻辑
    for a_tag in soup.find_all("a", href=True):
        raw_href = a_tag["href"]
        if raw_href.startswith("/url?q="):
            real_link = raw_href.split("/url?q=")[1].split("&")[0]
        else:
            real_link = raw_href

        target_text = model.lower()
        link_text = a_tag.get_text(strip=True).lower()
        parent_text = " ".join([p.get_text(strip=True).lower() for p in a_tag.find_parents("div", limit=2)])
        if target_text in link_text or target_text in parent_text:
            return real_link
    return None

# 测试动态方案
print(get_sundown_link_dynamic("SALT-2000.6"))

注意事项

  • 避免频繁请求Google,建议添加随机延迟(time.sleep(random.uniform(2,5))),防止触发反爬。
  • 若型号匹配仍有问题,可放宽匹配规则,比如只检查链接路径中是否包含型号关键字(如model.replace(".", "")后匹配)。

内容的提问来源于stack exchange,提问作者Cryptic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:22:05