最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python利用Selenium搭建免費Web搜索API服務(wù)的方法

 更新時間:2026年06月13日 14:02:41   作者:Hi20240217  
本文介紹了一種利用Selenium搭建免費Web搜索API服務(wù)的方法,讓AI智能體能夠獲取實時網(wǎng)絡(luò)信息,針對主流搜索API付費和調(diào)用限制的問題,該方案通過模擬人類瀏覽器操作實現(xiàn):使用Selenium無頭模式訪問Bing Copilot搜索頁面,提取整理結(jié)果后通過Flask API返回

一、引言:為什么我們需要這個工具?

在AI智能體(Agents)飛速發(fā)展的今天,讓它們能夠“聯(lián)網(wǎng)思考”已成為剛需。想象一下,你的AI助手不僅能回答訓(xùn)練數(shù)據(jù)中的問題,還能實時獲取最新的新聞、股價、科研成果——這就像給盲人恢復(fù)了視力。

然而,現(xiàn)實很骨感:主流的搜索API服務(wù)(如Google Search API、Bing Search API等)往往需要付費注冊,有的還有嚴(yán)格的調(diào)用限制。對于個人開發(fā)者、學(xué)生或小型項目來說,這些門檻可能讓人望而卻步。

本文將介紹如何利用 Selenium(一個流行的瀏覽器自動化工具)搭建一個完全免費的Web搜索API服務(wù),讓你的AI智能體也能輕松獲取實時網(wǎng)絡(luò)信息。

二、核心思路:模擬人類,獲取數(shù)據(jù)

我們的解決方案基于一個簡單而有效的想法:如果AI不能直接調(diào)用搜索API,那我們就讓它“像人一樣使用瀏覽器”。

具體流程如下:

  1. 使用Selenium啟動一個“隱形”的瀏覽器(無頭模式)
  2. 訪問Bing的Copilot搜索頁面
  3. 從頁面中提取、整理搜索結(jié)果
  4. 通過一個簡單的Web API將結(jié)果返回給調(diào)用者

這種方法繞過了官方API的限制,直接與搜索引擎的公開界面交互,實現(xiàn)了“曲線救國”。

三、分步實現(xiàn)

1、搭建搜索服務(wù)端(server.py)

服務(wù)端的核心是一個Flask Web應(yīng)用,它接收搜索請求,用Selenium執(zhí)行搜索,然后返回結(jié)果。

import datetime
from tqdm import tqdm
import os
import time
import json
import re
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import urllib.parse
from flask import Flask, jsonify, request
from flask_cors import CORS
import traceback

app = Flask(__name__)
CORS(app)  # 允許跨域請求

# 設(shè)置Chrome選項
chrome_options = Options()
chrome_options.add_argument('--headless')  # 無頭模式,可選
chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--enable-features=AllowSoftwareGLFallbackDueToCrashes,AllowSwiftShaderFallback')
chrome_options.add_argument('--enable-unsafe-swiftshader')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option('useAutomationExtension', False)
chrome_options.add_argument('--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')
chrome_options.add_argument('--disable-extensions')  # 禁用擴展
chrome_options.add_argument('--disable-infobars')  # 禁用信息欄
prefs = {
    'profile.managed_default_content_settings.images': 2,  # 2 表示禁止加載圖片
}
chrome_options.add_experimental_option('prefs', prefs)

def get_result(wait,driver):    
    combined_texts=[]
    combined_text=""
    # Bing的搜索結(jié)果放在iframe中,需要切換進去
    driver.switch_to.default_content()
    iframes = driver.find_elements(By.TAG_NAME, "iframe")
    try:
        for i,iframe in enumerate(iframes):
            src=iframe.get_attribute('src')
            if src.startswith("https://www.bing.com/search"):
                driver.switch_to.frame(iframe)
                wait.until(EC.presence_of_all_elements_located((By.XPATH, "http://div[contains(@class, 'answer_container')]")))
                answer_elements = driver.find_elements(By.XPATH, "http://div[contains(@class, 'answer_container')]")
                if answer_elements:
                    for element in answer_elements:
                        span_elements = element.find_elements(By.TAG_NAME, "span")                    
                        if span_elements:
                            span_texts = [span.text for span in span_elements if span.text.strip()]
                            combined_text = '\n'.join(span_texts)
                            combined_texts.append(combined_text)
                combined_text="\n".join(combined_texts).replace("查看所有鏈接","")
    except:
        pass
    return combined_text

def search_impl(key_world = "介紹一下中國的首都"):
    driver = webdriver.Chrome(options=chrome_options)    
    wait = WebDriverWait(driver,5)
    key_world_url_encoded = urllib.parse.quote(key_world)
    url = f"https://www.bing.com/copilotsearch?q={key_world_url_encoded}"
    t0=time.time()
    driver.delete_all_cookies()
    driver.get(url)
    for i in range(30):
        combined_text = get_result(wait,driver)
        print(len(combined_text))
        if len(combined_text)>4:
            break
        time.sleep(1)
    t1=time.time()
    output_data = {
        "success":True,
        "message":combined_text,
        "query": key_world,
        "duration": t1-t0,
        "url": driver.current_url,
        "page_title": driver.title
    }
    driver.quit()
    return output_data

@app.route("/search", methods=["POST"])
def search():
    try:
        data = request.get_json()
        if not data:
            return jsonify({"success": False, "message": "params invalid"}), 400
        key_world = data.get("query") 
        body=search_impl(key_world)
        return jsonify(body), 200
    except Exception as e:
        traceback.print_exc()
        return jsonify({"success": False, "message": f"服務(wù)器內(nèi)部錯誤: {str(e)}"}), 500

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

為什么要用無頭模式?

  • 服務(wù)器通常沒有圖形界面
  • 減少資源消耗,運行更高效
  • 避免彈出瀏覽器窗口干擾其他進程

為什么需要等待機制?

  • 網(wǎng)絡(luò)速度和服務(wù)器響應(yīng)時間不確定
  • 頁面元素需要時間加載完成
  • 避免在內(nèi)容加載前就嘗試提?。〞?dǎo)致空結(jié)果)

2、創(chuàng)建客戶端(client.py)

客戶端是一個簡單的Python腳本,用于測試我們的搜索服務(wù)。

import requests
import json

def send_search_request(query, timeout=30):
    """
    發(fā)送搜索請求
    
    Args:
        query: 查詢字符串
        timeout: 超時時間(秒)
    
    Returns:
        響應(yīng)結(jié)果或錯誤信息
    """
    url = "http://localhost:5000/search"
    
    try:
        response = requests.post(
            url,
            json={"query": query},
            headers={"Content-Type": "application/json"},
            timeout=timeout
        )
        response.raise_for_status()  # 如果狀態(tài)碼不是200,拋出異常
        # 嘗試解析JSON響應(yīng)
        try:
            return response.json()
        except json.JSONDecodeError:
            return {"text": response.text, "status_code": response.status_code}
            
    except requests.exceptions.Timeout:
        return {"error": "請求超時"}
    except requests.exceptions.ConnectionError:
        return {"error": "連接失敗,請檢查服務(wù)是否啟動"}
    except requests.exceptions.RequestException as e:
        return {"error": f"請求異常: {str(e)}"}

# 使用示例
if __name__ == "__main__":
    result = send_search_request("獲取最新的AI咨詢")
    print(json.dumps(result, indent=2, ensure_ascii=False))

四、如何運行?

1. 啟動服務(wù)端

打開終端,運行:

python server.py

如果一切正常,你會看到類似下面的輸出:

 * Serving Flask app 'server'
 * Debug mode: on
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://[你的IP地址]:5000

2. 測試客戶端

在另一個終端中,運行:

python client.py

輸出

{
  "duration": 4.231590747833252,
  "message": "。GPT Image 1.5 在圖像生成中實現(xiàn)詳細(xì)特征保留與光線精準(zhǔn)渲染\n。GPT\nImage\n1.5\n在圖像生成中實現(xiàn)詳細(xì)特征保留與光線精準(zhǔn)渲染\n。\nAnthropic Claude系列:發(fā)布Claude Opus 4.6與Claude Cowork,支持百萬token上下文、代碼編譯及零日漏洞自發(fā)現(xiàn)能力\nAnthropic\nClaude系列\(zhòng)n:發(fā)布Claude\nOpus\n4.6與Claude\nCowork,支持百萬token上下文、代碼編譯及零日漏洞自發(fā)現(xiàn)能力\n。\n通義千問 Qwen 系列:開源 Qwen3-TTS、Qwen3-Coder-Next、Qwen3-VL-Embedding,覆蓋語音生成、編程與多模態(tài)檢索場景\n通義千問\nQwen\n系列\(zhòng)n:開源\nQwen3-TTS、Qwen3-Coder-Next、Qwen3-VL-Embedding,覆蓋語音生成、編程與多模態(tài)檢索場景\n。\n多模態(tài)與視頻AI:可靈AI 3.0和2.6版本實現(xiàn)音畫同步、自動分鏡控制,PixVerse V5.5可在幾秒內(nèi)生成導(dǎo)演級多鏡頭短片\n多模態(tài)與視頻AI\n:可靈AI\n3.0和2.6版本實現(xiàn)音畫同步、自動分鏡控制,PixVerse\nV5.5可在幾秒內(nèi)生成導(dǎo)演級多鏡頭短片\n。美團LongCat系列與Vidi2顯著提升視頻編輯和理解能力\n。美團LongCat系列與Vidi2顯著提升視頻編輯和理解能力\n。\n端側(cè)與嵌入式AI:MiniMax、智譜GLM系列、阿里通義Fun-Audio-Chat、騰訊混元3D Studio 支持本地計算,提升端側(cè)推理效率,支持音樂、語音、文本、圖像等多模態(tài)任務(wù)\n端側(cè)與嵌入式AI\n:MiniMax、智譜GLM系列、阿里通義Fun-Audio-Chat、騰訊混元3D\nStudio\n支持本地計算,提升端側(cè)推理效率,支持音樂、語音、文本、圖像等多模態(tài)任務(wù)\n。\n行業(yè)企業(yè)與融資動態(tài)\n港股上市與融資:MiniMax、智譜AI紛紛啟動或完成港股IPO,融資數(shù)額達數(shù)十億港元,推動全球化布局與算力擴展\n港股上市與融資\n:MiniMax、智譜AI紛紛啟動或完成港股IPO,融資數(shù)額達數(shù)十億港元,推動全球化布局與算力擴展\n。\nAI創(chuàng)業(yè)與投資:xAI完成200億美元E輪融資,Meta、迪士尼、亞馬遜、英偉達等加碼投入AI應(yīng)用及硬件\nAI創(chuàng)業(yè)與投資\n:xAI完成200億美元E輪融資,Meta、迪士尼、亞馬遜、英偉達等加碼投入AI應(yīng)用及硬件\n。國內(nèi)新型AI公司如DeepWisdom、Vidu、Kimi、Luma AI、RockFlow等也完成戰(zhàn)略融資\n。國內(nèi)新型AI公司如DeepWisdom、Vidu、Kimi、Luma\nAI、RockFlow等也完成戰(zhàn)略融資\n。\n開源社區(qū)發(fā)展:面壁智能、Mistral AI、阿里Qwen、谷歌Gemini 3 Flash等項目開源,推動算法、模型和工具的全民可用性\n開源社區(qū)發(fā)展\n:面壁智能、Mistral\nAI、阿里Qwen、谷歌Gemini\n3\nFlash等項目開源,推動算法、模型和工具的全民可用性\n。\nAI應(yīng)用趨勢\n辦公與生產(chǎn)力:AgentOS、扣子2.0、MiniMax Agent 2.0、ChatExcel等智能體平臺,實現(xiàn)辦公自動化、代碼協(xié)作和科研輔助\n辦公與生產(chǎn)力\n:AgentOS、扣子2.0、MiniMax\nAgent\n2.0、ChatExcel等智能體平臺,實現(xiàn)辦公自動化、代碼協(xié)作和科研輔助\n。\n多模態(tài)交互與智能助手:螞蟻“靈光”、京東AI購、Meta WorldGen、OpenAI購物研究等,推動AI在現(xiàn)實生活場景的便利化應(yīng)用\n多模態(tài)交互與智能助手\n:螞蟻“靈光”、京東AI購、Meta\nWorldGen、OpenAI購物研究等,推動AI在現(xiàn)實生活場景的便利化應(yīng)用\n。\n個性化與自動化生成:AI視頻、音樂、圖像、3D內(nèi)容生成實現(xiàn)自動化與定制化生產(chǎn),支持多語言、角色扮演及場景復(fù)現(xiàn)\n個性化與自動化生成\n:AI視頻、音樂、圖像、3D內(nèi)容生成實現(xiàn)自動化與定制化生產(chǎn),支持多語言、角色扮演及場景復(fù)現(xiàn)\n。\n推薦獲取平臺\nAI工具集:實時更新產(chǎn)業(yè)新聞、融資動態(tài)、產(chǎn)品發(fā)布,覆蓋多模態(tài)、智能體及工具類AI應(yīng)用\nAI工具集\n:實時更新產(chǎn)業(yè)新聞、融資動態(tài)、產(chǎn)品發(fā)布,覆蓋多模態(tài)、智能體及工具類AI應(yīng)用\n。\nAIbase.cn:每日AI日報、熱點資訊及產(chǎn)品數(shù)據(jù)庫,內(nèi)容專業(yè)全面\nAIbase.cn\n:每日AI日報、熱點資訊及產(chǎn)品數(shù)據(jù)庫,內(nèi)容專業(yè)全面\n。\nAI日報:每天3分鐘掌握最新AI模型、行業(yè)動態(tài)及前沿技術(shù)\nAI日報\n:每天3分鐘掌握最新AI模型、行業(yè)動態(tài)及前沿技術(shù)\n。\n用戶可根據(jù)興趣選擇平臺,結(jié)合社群或訂閱功能獲取\n實時資訊與深度分析\n。這些平臺適用于技術(shù)研究、行業(yè)分析、投資決策及產(chǎn)品應(yīng)用探索。",
  "page_title": "獲取最新的AI咨詢",
  "query": "獲取最新的AI咨詢",
  "success": true,
  "url": "https://www.bing.com/copilotsearch?q=%E8%8E%B7%E5%8F%96%E6%9C%80%E6%96%B0%E7%9A%84AI%E5%92%A8%E8%AF%A2"
}

五、實際應(yīng)用:集成到AI智能體

現(xiàn)在你有了一個可用的搜索API,可以輕松地將它集成到各種AI框架中:

示例:在LangChain中使用

from langchain.tools import Tool

def search_tool(query: str) -> str:
    """調(diào)用我們的本地搜索服務(wù)"""
    result = send_search_request(query)
    if result.get("success"):
        return result.get("message", "未找到相關(guān)信息")
    return f"搜索失敗: {result.get('error', '未知錯誤')}"

# 創(chuàng)建工具實例
search_tool_instance = Tool(
    name="Web搜索",
    func=search_tool,
    description="用于搜索最新的網(wǎng)絡(luò)信息"
)

# 將工具添加到你的AI智能體中

五、結(jié)語

通過這個項目,你不僅獲得了一個免費的搜索API,更重要的是理解了如何通過自動化工具解決實際開發(fā)中的限制。這種"模擬用戶行為"的思路可以應(yīng)用于許多其他場景,如自動化測試、數(shù)據(jù)采集、監(jiān)控報警等。

技術(shù)的本質(zhì)是創(chuàng)造可能性。當(dāng)現(xiàn)有方案受限時,像這樣創(chuàng)造性地組合工具,往往能開辟出新的道路。

提示:請合理使用此工具,尊重目標(biāo)網(wǎng)站的robots.txt協(xié)議,避免給服務(wù)器造成過大壓力。本文僅供學(xué)習(xí)交流使用。

到此這篇關(guān)于python利用Selenium搭建免費Web搜索API服務(wù)的方法的文章就介紹到這了,更多相關(guān)python免費Web搜索API服務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你如何在Pygame 中移動你的游戲角色

    教你如何在Pygame 中移動你的游戲角色

    Pygame是一組跨平臺的 Python 模塊,專為編寫視頻游戲而設(shè)計,您可以使用 pygame 創(chuàng)建不同類型的游戲,包括街機游戲、平臺游戲等等,今天通過本文給大家介紹Pygame移動游戲角色的實現(xiàn)過程,一起看看吧
    2021-09-09
  • Python實現(xiàn)線性擬合及繪圖的示例代碼

    Python實現(xiàn)線性擬合及繪圖的示例代碼

    在數(shù)據(jù)處理和繪圖中,我們通常會遇到直線或曲線的擬合問題,本文主要介紹了Python實現(xiàn)線性擬合及繪圖的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • Python實現(xiàn)批量將符合要求的文件自動復(fù)制到新文件夾

    Python實現(xiàn)批量將符合要求的文件自動復(fù)制到新文件夾

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)批量將文件名稱符合要求的文件自動復(fù)制到新文件夾,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下
    2023-10-10
  • python?snap7讀寫PLC的操作方法

    python?snap7讀寫PLC的操作方法

    這篇文章主要介紹了python?snap7讀寫PLC的操作方法,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 利用Hyperic調(diào)用Python實現(xiàn)進程守護

    利用Hyperic調(diào)用Python實現(xiàn)進程守護

    這篇文章主要為大家詳細(xì)介紹了利用Hyperic調(diào)用Python實現(xiàn)進程守護,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python提取網(wǎng)頁中超鏈接的方法

    Python提取網(wǎng)頁中超鏈接的方法

    很多人在一開始學(xué)習(xí)Python,會打算用作爬蟲開發(fā)。既然要做爬蟲,首先就要抓取網(wǎng)頁,并且從網(wǎng)頁中提取出超鏈接地址。這篇文章給大家分享一個簡單的方法,有需要的可以參考借鑒。
    2016-09-09
  • Win10下Python3.7.3安裝教程圖解

    Win10下Python3.7.3安裝教程圖解

    到2019年初,Python3已經(jīng)更新到了Python3.7.3,Python有兩個大版本Python2和Python3,Python3是現(xiàn)在和未來的主流。這篇文章主要介紹了Win10下Python3.7.3安裝教程圖解,非常不錯,感興趣的朋友跟隨小編一起看看吧
    2019-07-07
  • python: line=f.readlines()消除line中\(zhòng)n的方法

    python: line=f.readlines()消除line中\(zhòng)n的方法

    這篇文章主要介紹了python: line=f.readlines()消除line中\(zhòng)n的方法,需要的朋友可以參考下
    2018-03-03
  • Python+wxPython實現(xiàn)一個簡單的音樂播放器

    Python+wxPython實現(xiàn)一個簡單的音樂播放器

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編程語言和wxPython模塊創(chuàng)建一個簡單的音樂播放器,文中的示例代碼講解詳細(xì),感興趣的可以了解下
    2023-09-09
  • Python Flask入門之模板

    Python Flask入門之模板

    今天小編就為大家分享一篇Python Flask模板的入門教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-11-11

最新評論

南汇区| 汉中市| 龙南县| 富顺县| 务川| 莱阳市| 浪卡子县| 石首市| 独山县| 双江| 阳谷县| 乐山市| 宁陕县| 临澧县| 浦县| 波密县| 长葛市| 苗栗县| 天气| 扎兰屯市| 靖宇县| 拉孜县| 东台市| 克东县| 阿鲁科尔沁旗| 平安县| 甘谷县| 西昌市| 绥宁县| 武城县| 通化县| 鄂州市| 五常市| 广灵县| 金塔县| 锡林郭勒盟| 兖州市| 乃东县| 霍州市| 龙游县| 中宁县|