<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Yahoo搜尋 on IT 空間</title><link>https://blog.jiatool.com/tags/Yahoo%E6%90%9C%E5%B0%8B/</link><description>Recent content in Yahoo搜尋 on IT 空間</description><generator>Hugo -- gohugo.io</generator><language>zh</language><managingEditor>jia@jiatool.com (Jia)</managingEditor><webMaster>jia@jiatool.com (Jia)</webMaster><copyright>&amp;copy;{year}, Jia All Rights Reserved</copyright><lastBuildDate>Sat, 23 Dec 2023 21:00:00 +0800</lastBuildDate><atom:link href="https://blog.jiatool.com/tags/Yahoo%E6%90%9C%E5%B0%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>Bright Data 手把手教學 — 輕鬆取得 Google、Yahoo 搜尋引擎結果 API</title><link>https://blog.jiatool.com/posts/brightdata_serp_api/</link><pubDate>Sat, 23 Dec 2023 21:00:00 +0800</pubDate><author>jia@jiatool.com (Jia)</author><atom:modified>Sat, 23 Dec 2023 21:00:00 +0800</atom:modified><guid>https://blog.jiatool.com/posts/brightdata_serp_api/</guid><description>此篇為商業合作文章 前言 Bright Data 跟我之前介紹過的 DataForSEO 、Aves API 一樣，都有提供抓取搜尋引擎結果的服務，因此照理說穩定度應該會比較好，不過 Bright Data 是專注於</description><content:encoded>&lt;div class="alert alert-info" role="alert" data-dir="ltr">此篇為商業合作文章&lt;/div>
&lt;h2 id="前言">前言&lt;/h2>
&lt;p>&lt;a href="https://brightdata.com/" target="_blank" rel="noopener">
Bright Data
&lt;/a> 跟我之前介紹過的 &lt;a href="https://blog.jiatool.com/posts/dataforseo" target="_blank" rel="noopener">
DataForSEO
&lt;/a>、&lt;a href="https://blog.jiatool.com/posts/aves_api" target="_blank" rel="noopener">
Aves API
&lt;/a> 一樣，都有提供抓取搜尋引擎結果的服務，因此照理說穩定度應該會比較好，不過 Bright Data 是專注於商務客戶，所以要提醒目前個人是無法使用的 (不支持個人用途，如打遊戲之類的)。&lt;/p>
&lt;p>Bright Data 的 SERP API 目前支援 Google、Bing、DuckDuckGo、Yandex、Yahoo、百度 和 Naver 搜尋引擎，你可以用來做關鍵字追蹤、比較價格、市場研究、偵測版權侵權、廣告情報等等用途。&lt;/p>
&lt;br/>
&lt;p>底下我會以最多人使用的「Google 搜尋 API」來當範例，一起從註冊、設定、測試到最後程式碼帶大家認識。&lt;/p>
&lt;br/>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/brightdata_home.jpg" alt="Bright Data 官網" data-caption="Bright Data 官網" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
Bright Data 官網
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;br/>
&lt;h2 id="註冊-bright-data">註冊 Bright Data&lt;/h2>
&lt;p>首先，需要有一組 Bright Data 帳號。&lt;/p>
&lt;div class="notices info" data-title="註冊 bright data">
&lt;p>如果願意透過此連結註冊，我可以獲得一絲絲分潤，就當支持我寫作吧~🫡&lt;/p>
&lt;p>註冊 Bright Data 帳號：&lt;a href="https://get.brightdata.com/fabjye">https://get.brightdata.com/fabjye&lt;/a>&lt;/p>
&lt;p>官方還提供我的讀者優惠~&lt;br />
透過上述連結註冊的新用戶，首次儲值 25 美元再&lt;strong>送 25 美元&lt;/strong>，直接省一半!!&lt;/p>
&lt;/div>
&lt;br/>
&lt;p>需要填寫姓名、工作用 Email、公司規模，就像文章一開始說的，它是面向商務的服務。&lt;br />
(不支持個人用途)&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/signup.jpg" alt="註冊 Bright Data" data-caption="註冊 Bright Data" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='400px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:400px;height:;"/>
&lt;figcaption style="text-align: center;">
註冊 Bright Data
&lt;/figcaption>
&lt;/figure>
&lt;p>註冊後，在添加付款方式時，將收到 5 美元的額度可以讓你試用。或者可以聯絡你的客戶經理，會贈送一些額度可以讓你 &lt;a href="https://help.brightdata.com/hc/en-us/articles/4425821434769" target="_blank" rel="noopener">
免費試用
&lt;/a>。&lt;/p>
&lt;br/>
&lt;h2 id="serp-api">SERP API&lt;/h2>
&lt;p>&lt;a href="https://get.brightdata.com/fabjye" target="_blank" rel="noopener">
SERP API
&lt;/a> 目前支援以下幾種搜尋，可以看出來涵蓋蠻多的：&lt;/p>
&lt;ul>
&lt;li>Google Search&lt;/li>
&lt;li>Google Images&lt;/li>
&lt;li>Google Videos&lt;/li>
&lt;li>Google Maps&lt;/li>
&lt;li>Google Trends&lt;/li>
&lt;li>Google Reviews&lt;/li>
&lt;li>Google News&lt;/li>
&lt;li>Google Jobs&lt;/li>
&lt;li>Google Shopping&lt;/li>
&lt;li>Google Hotels&lt;/li>
&lt;li>Bing Search&lt;/li>
&lt;li>DuckDuckGo Search&lt;/li>
&lt;li>Yandex Search&lt;/li>
&lt;li>Yahoo Search&lt;/li>
&lt;li>百度 Search&lt;/li>
&lt;li>Naver Search&lt;/li>
&lt;/ul>
&lt;br/>
&lt;h3 id="serp-api-價格">SERP API 價格&lt;/h3>
&lt;p>SERP API 價格官方有詳細說明在 &lt;a href="https://brightdata.com/pricing/serp" target="_blank" rel="noopener">
這個網頁
&lt;/a>，&lt;/p>
&lt;p>依照方案分為四種：PAY AS YOU GO、GROWTH、BUSINESS、ENTERPRISE。&lt;/p>
&lt;p>CPM 指的是每一千次請求 API 的價格。&lt;br />
以方案 GROWTH 為例，$2.30/CPM 就是每一千個請求要 2.3 美金，等同於每個請求 0.0023 美金 (約 0.072 新台幣)。&lt;/p>
&lt;p>GROWTH 和 BUSINESS 方案會有每月最低消費金額 (分別為 500 和 1000 美金)，但它們使用 API 的價格就會再便宜一些些。&lt;/p>
&lt;p>* 以上價格為美金💵&lt;br />
* 針對費用、週期計算有疑慮的讀者，建議可以直接諮詢客戶經理。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/serp_api_pricing.jpg" alt="SERP API 價格" data-caption="SERP API 價格" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='700px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:700px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API 價格
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;h3 id="建立新的-serp-api-zone">建立新的 SERP API Zone&lt;/h3>
&lt;p>第一次使用可以先參考 &lt;a href="https://help.brightdata.com/hc/en-us/articles/16063653689489" target="_blank" rel="noopener">
這篇官方文章
&lt;/a> 去設定，或直接跟著我底下的教學來實作。&lt;/p>
&lt;br/>
&lt;p>進到 &amp;quot;&lt;a href="https://brightdata.com/cp/zones" target="_blank" rel="noopener">
My Proxies
&lt;/a>&amp;quot; 頁面，找到 「SERP API」點 &amp;quot;Get started&amp;quot; 來新增一個 Solution。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/get_started.jpg" alt="My Proxies &amp;gt; SERP API &amp;gt; Get started" data-caption="My Proxies &amp;gt; SERP API &amp;gt; Get started" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
My Proxies &amp;gt; SERP API &amp;gt; Get started
&lt;/figcaption>
&lt;/figure>
&lt;p>接下來，設定一個 Solution 名稱 (在 Bright Data 內也等同 zone 名稱)，注意這個設定後就無法更改 (就只能把它刪除，再建一個新的)，其餘設定都可以之後再更改。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/add_new_proxy.jpg" alt="設定一個 Solution" data-caption="設定一個 Solution" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='500px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:500px;height:;"/>
&lt;figcaption style="text-align: center;">
設定一個 Solution
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;p>SERP API Zone 上方可以看到有三個頁籤，可以自己隨意點點看看：&lt;/p>
&lt;ul>
&lt;li>Access parameters (存取參數)&lt;/li>
&lt;li>Configuration (配置)&lt;/li>
&lt;li>Statistics (統計數據)&lt;/li>
&lt;/ul>
&lt;p>* 有幾個資訊後續 call API 時會用到，我也在這邊先標出來：&amp;quot;host&amp;quot;、&amp;quot;account id&amp;quot;、&amp;quot;password&amp;quot;、&amp;quot;zone&amp;quot;。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/api_setting.jpg" alt="SERP API Zone 設定" data-caption="SERP API Zone 設定" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API Zone 設定
&lt;/figcaption>
&lt;/figure>
&lt;p>* Access parameters (存取參數)分頁底下有個 Limit 欄位，可以設定請求量限制，當到達限制後要關閉還是通知你，可以避免不小心意外耗費太多額度。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/api_limit.jpg" alt="可限制 API 使用，避免超額" data-caption="可限制 API 使用，避免超額" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='500px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:500px;height:;"/>
&lt;figcaption style="text-align: center;">
可限制 API 使用，避免超額
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;h3 id="測試與範例頁面">測試與範例頁面&lt;/h3>
&lt;p>Bright Data 也同樣提供 SERP API 相關測試與參數介紹頁面，在開始撰寫程式前，可以先來這邊透過網頁 UI 的方式嘗試、熟悉各參數與如何使用。&lt;/p>
&lt;p>* 官方介紹中有看到支援 Google、Bing、DuckDuckGo、Yandex、Yahoo、百度 和 Naver 搜尋，不過在這個頁面缺少 百度、Yahoo、Naver，經過我向官方詢問，使用方式與參數都是一樣的，所以如果需要，稍微改一下應該就能使用了。&lt;/p>
&lt;br/>
&lt;h4 id="playground---測試頁面">Playground - 測試頁面&lt;/h4>
&lt;p>在 &lt;a href="https://brightdata.com/cp/zones/serp_playground" target="_blank" rel="noopener">
SERP API Playground
&lt;/a> 測試頁面，透過 UI 介面選擇瀏覽器、設定關鍵字與參數 (下圖橘框處)，並實際查看它查詢後回傳的資料 (網頁與 JSON)，&lt;/p>
&lt;p>而且使用 Playground 是 &amp;quot;免費&amp;quot; 的！！👍&lt;br />
你可以先在這邊先用不同關鍵字、參數去測試，沒問題後再整合進程式裡面。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/playground.jpg" alt="SERP API Playground 測試頁面" data-caption="SERP API Playground 測試頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API Playground 測試頁面
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;p>下方有個 &amp;quot;Generate API code&amp;quot; 按鈕 (上圖藍框處)，可以查看假如依照你目前的參數設定，該如何下查詢指令(或程式碼)。&lt;br />
要注意你 proxy 設定 &amp;quot;同步&amp;quot; 或 &amp;quot;非同步&amp;quot; 請求 (下一個章節會說明)，這邊的範例也會跟著改變。&lt;/p>
&lt;p>但有點可惜的是，&amp;quot;非同步請求&amp;quot; 的程式碼範例只有 Shell 跟 Node.js，而&amp;quot;同步請求&amp;quot; 雖然有 Python 範例，但不是使用我習慣的 Requests 套件，因此我花了一些時間研究與嘗試，後面章節我有將程式碼列出來供大家參考，&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/generate_api_code.jpg" alt="Generate API code 範例程式" data-caption="Generate API code 範例程式" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
Generate API code 範例程式
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;br/>
&lt;p>* 如果你還沒註冊就等不及的話，可以到 SERP API 介紹網頁中的 &lt;a href="https://brightdata.com/products/serp-api" target="_blank" rel="noopener">
SERP API Live Demo
&lt;/a> 先嘗試，不過就只有讓你測試 Google 搜尋就是了。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/serp_api_live_demo.jpg" alt="SERP API Live Demo" data-caption="SERP API Live Demo" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='650px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:650px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API Live Demo
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;h4 id="api-guide---參數介紹與指令">API Guide - 參數介紹與指令&lt;/h4>
&lt;p>這個 &lt;a href="https://brightdata.com/cp/serp_api/api/google/search" target="_blank" rel="noopener">
API Guide
&lt;/a> 頁面是介紹 SERP API 支援那些參數，以及該如何下這些參數。對於參數不了解的話，也可以先到這邊來看看。&lt;/p>
&lt;p>同樣這頁也會因為你 proxy 設定 &amp;quot;同步&amp;quot; 或 &amp;quot;非同步&amp;quot; 請求，而有所對應改變。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/api_guide.jpg" alt="SERP API Guide - 參數介紹與指令" data-caption="SERP API Guide - 參數介紹與指令" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API Guide - 參數介紹與指令
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;h3 id="發送請求">發送請求&lt;/h3>
&lt;p>它的 SERP API 也有分成「同步請求」、「非同步請求」兩種請求方法。&lt;/p>
&lt;p>預設是使用同步請求，使用上最簡單，只需要發送一個請求即可。但對於有大量請求需求的使用者，還是建議使用非同步請求，因為它有比較好的穩定性。&lt;/p>
&lt;br/>
&lt;p>如果想切換 同步/非同步 請求，則在 SERP API Zone &amp;gt; Configuration 的最下面，有個「Asynchronous requests」開關&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/async_requests_setting.jpg" alt="SERP API 切換 同步/非同步 請求" data-caption="SERP API 切換 同步/非同步 請求" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='550px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:550px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API 切換 同步/非同步 請求
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;p>官方範例是使用我不熟悉的套件，但我比較習慣使用 requests 套件，因此底下範例程式是我自己改寫的~✍️&lt;/p>
&lt;br/>
&lt;h4 id="同步請求">同步請求&lt;/h4>
&lt;p>只要發送一個 GET 請求即可取得結果。&lt;/p>
&lt;p>它是透過 proxy 將請求轉給他們，proxy 設定為：&lt;br />
&lt;code>http://brd-customer-{ACCOUNT_ID}-zone-{ZONE}:{PASSWORD}@{HOST}&lt;/code>&lt;br />
完整樣子會像是：&lt;br />
&lt;code>http://brd-customer-oooooooo-zone-serp_api:xxxxxxxx@brd.superproxy.io:22225&lt;/code>&lt;/p>
&lt;br/>
&lt;p>另外，出於資訊安全的考量，進行 HTTPS 連線時 Python 會檢查伺服器的 SSL 憑證是否有效，因此還需要安裝 SSL 憑證，否則會出現像下圖那樣的錯誤，可以參考官方文章：&lt;a href="https://help.brightdata.com/hc/en-us/articles/4413322250001" target="_blank" rel="noopener">
如何安裝 SSL 憑證
&lt;/a>&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/disabling_ssl_verification.png" alt="遇到 SSL 憑證問題" data-caption="遇到 SSL 憑證問題" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
遇到 SSL 憑證問題
&lt;/figcaption>
&lt;/figure>
&lt;p>那假如只是要測試，我們可以 &amp;ldquo;忽略憑證&amp;rdquo; (&lt;code>verify=False&lt;/code>，參考 &lt;a href="https://stackoverflow.com/questions/51925384" target="_blank" rel="noopener">
這篇文章
&lt;/a>)，如同下方範例程式馬。&lt;/p>
&lt;br/>
&lt;p>參數說明可以 &lt;a href="https://help.brightdata.com/hc/en-us/articles/16063645923473-API" target="_blank" rel="noopener">
參考這篇
&lt;/a>，或者如果已經登入，可以在後台的 &lt;a href="https://brightdata.com/cp/serp_api/api/google/search" target="_blank" rel="noopener">
API Guide 頁面
&lt;/a> 去查看各種查詢與參數該如何下。&lt;/p>
&lt;br/>
&lt;br/>
&lt;p>Python 程式碼範例：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;https://www.google.com.tw/search&amp;#39;&lt;/span>
&lt;span class="n">params&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s2">&amp;#34;q&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Google Gemini&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 搜尋關鍵字&lt;/span>
&lt;span class="s2">&amp;#34;gl&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;tw&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;num&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;100&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;brd_json&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;1&amp;#34;&lt;/span> &lt;span class="c1"># 回傳 JSON 格式，預設是 html&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="n">proxy_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;http://brd-customer-{ACCOUNT_ID}-zone-{ZONE}:{PASSWORD}@{HOST}&amp;#34;&lt;/span>
&lt;span class="n">proxies&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;http&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">proxy_url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;https&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">proxy_url&lt;/span>&lt;span class="p">}&lt;/span>
&lt;span class="c1"># 使用 verify=False 忽略 SSL 憑證&lt;/span>
&lt;span class="c1"># 為了安全，建議還是安裝 SSL 憑證：https://help.brightdata.com/hc/en-us/articles/4413322250001&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">params&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">params&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">proxies&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">proxies&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">verify&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">False&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;p>* 各個狀 SERP API 錯誤訊息意思如&lt;a href="https://help.brightdata.com/hc/en-us/articles/4413230015505" target="_blank" rel="noopener">
這個官方清單
&lt;/a>。&lt;/p>
&lt;br/>
&lt;h4 id="非同步請求">非同步請求&lt;/h4>
&lt;p>在說明用法之前，我們要先去產生一組 API Token (&lt;a href="https://help.brightdata.com/hc/en-us/articles/4413411462417" target="_blank" rel="noopener">
官方說明文章
&lt;/a>)。&lt;/p>
&lt;p>到後台的 &lt;a href="https://brightdata.com/cp/setting/users" target="_blank" rel="noopener">
Account Settings &amp;gt; User access
&lt;/a> 頁面，點擊最下方 API tokens 的右邊 &amp;quot;Add token&amp;quot; 按鈕。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/account_add_token.jpg" alt="Account Setting &amp;gt; Add token" data-caption="Account Setting &amp;gt; Add token" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
Account Setting &amp;gt; Add token
&lt;/figcaption>
&lt;/figure>
&lt;p>並指定要給哪一位 User 使用，Permission 就選擇 &amp;quot;User&amp;quot; 即可，期限可以指定日期或勾選下方的&amp;quot;Unlimited (無期限)&amp;quot;。&lt;/p>
&lt;p>* 因為這關係到權限，可能會需要去信箱收驗證信。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/add_api_token.jpg" alt="Add API token" data-caption="Add API token" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='500px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:500px;height:;"/>
&lt;figcaption style="text-align: center;">
Add API token
&lt;/figcaption>
&lt;/figure>
&lt;p>它產生的 API Token 要複製起來，不然之後忘記就要重新產生了。&lt;/p>
&lt;br/>
&lt;br/>
&lt;p>再來到你的 SERP API Zone 中 Configuration 分頁，最下方將「Asynchronous requests」開關打開。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/brightdata_serp_api/async_requests_setting.jpg" alt="SERP API 切換 同步/非同步 請求" data-caption="SERP API 切換 同步/非同步 請求" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='550px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:550px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API 切換 同步/非同步 請求
&lt;/figcaption>
&lt;/figure>
&lt;p>這邊的 &amp;quot;Web Hook URL&amp;quot; 和 &amp;quot;Web Hook Request Method&amp;quot; 你可以設定，讓任務完成後會主動來呼叫你，或者像我下面將要說明的 — 由我們自己去取得結果，那就不需要填這兩個欄位了。&lt;/p>
&lt;p>記得要 Save。&lt;/p>
&lt;br/>
&lt;br/>
&lt;p>好了，終於要來講 &amp;quot;非同步請求&amp;quot; 該怎麼使用了。&lt;/p>
&lt;p>它與 &amp;quot;同步請求&amp;quot; 使用方式有所不同，&amp;quot;非同步請求&amp;quot; 使用上分為兩個請求：&lt;/p>
&lt;ol>
&lt;li>設定任務&lt;/li>
&lt;li>取得任務的查詢結果&lt;/li>
&lt;/ol>
&lt;br/>
&lt;p>先使用 POST 請求「設定任務」，指定查詢參數、回傳格式。&lt;br />
如果成功的話，會在收到回覆的 Header 看到一個 &amp;quot;&lt;code>x-response-id&lt;/code>&amp;quot;，這個代表 Response ID，也就是下一步要使用的。&lt;/p>
&lt;p>第二步，送出 GET 請求「取得任務的查詢結果」，帶上第一步取得的 &lt;code>x-response-id&lt;/code>。&lt;br />
如果查詢任務已完成，會收到 &lt;code>Status Code = 200&lt;/code>，Body 內容即是查詢結果資料；如果查詢任務還沒完成，收到 &lt;code>Status Code = 404&lt;/code> (Not Found)，那就要等個幾秒再試一次。&lt;/p>
&lt;p>可以直接參考下方範例程式碼，或參考 &lt;a href="https://help.brightdata.com/hc/en-us/articles/18191740593169" target="_blank" rel="noopener">
這篇官方說明
&lt;/a>。&lt;/p>
&lt;p>* 當然只有 &amp;quot;設定任務&amp;quot; 請求會收費 (如果成功的話)。&lt;br />
* 查詢結果最多會存在伺服器 24 小時，這段時間你還是可以使用 Response ID 去取得查詢結果。&lt;/p>
&lt;br/>
&lt;br/>
&lt;p>Python 程式碼範例：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="c1"># 記得要先去後台開啟 Asynchronous requests&lt;/span>
&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;https://api.brightdata.com/serp/req?customer={ACCOUNT_ID}&amp;amp;zone={ZONE}&amp;#39;&lt;/span>
&lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s1">&amp;#39;Content-Type&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;application/json&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;Authorization&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;Bearer {API_TOKEN}&amp;#39;&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s2">&amp;#34;country&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;tw&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;query&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s2">&amp;#34;q&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Google Gemini&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 搜尋關鍵字&lt;/span>
&lt;span class="s2">&amp;#34;gl&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;tw&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;num&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;100&amp;#34;&lt;/span>
&lt;span class="p">},&lt;/span>
&lt;span class="s2">&amp;#34;brd_json&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;json&amp;#34;&lt;/span> &lt;span class="c1"># 回傳 JSON 格式，預設是 html&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">json&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">response_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;x-response-id&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;response id: {response_id}&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">time&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># 等待它完成查詢&lt;/span>
&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;https://api.brightdata.com/serp/get_result?customer={ACCOUNT_ID}&amp;amp;zone={ZONE}&amp;amp;response_id={response_id}&amp;#39;&lt;/span>
&lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;Authorization&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;Bearer {API_TOKEN}&amp;#39;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;p>* 各個狀 SERP API 錯誤訊息意思如&lt;a href="https://help.brightdata.com/hc/en-us/articles/4413230015505" target="_blank" rel="noopener">
這個官方清單
&lt;/a>。&lt;/p>
&lt;br/>
&lt;h3 id="查詢結果說明">查詢結果說明&lt;/h3>
&lt;p>SERP API 回傳的查詢結果我以 JSON 格式來說明，以下直接貼出範例結果給大家參考，大部分欄位應該很容易就看出來意思。&lt;/p>
&lt;p>其他說明可以直接參考官方說明：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://help.brightdata.com/hc/en-us/articles/14597847891217" target="_blank" rel="noopener">
SERP API 輸出 JSON 欄位說明
&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://help.brightdata.com/hc/en-us/articles/8699149516177" target="_blank" rel="noopener">
SERP API 的回應 JSON 中的排名欄位是什麼？
&lt;/a>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;general&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;search_engine&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;google&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;results_cnt&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2030000000&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;search_time&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">0.31&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;language&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;zh-TW&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;mobile&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;basic_view&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;search_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;page_title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Google Pixel - Google 搜尋&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;timestamp&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;2023-12-03T14:27:44.026Z&amp;#34;&lt;/span>
&lt;span class="p">},&lt;/span>
&lt;span class="nt">&amp;#34;input&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;original_url&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://www.google.com.tw/search?q=Google+Pixel&amp;amp;gl=tw&amp;amp;lang=zh-TW&amp;amp;location=Kaohsiung+City%2CTaiwan&amp;amp;brd_json=1&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;request_id&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;xxxxxxxx&amp;#34;&lt;/span>
&lt;span class="p">},&lt;/span>
&lt;span class="nt">&amp;#34;organic&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://store.google.com/tw/category/phones?hl=zh-TW&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;display_link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://store.google.com › category › phones&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Google Pixel 手機- Google 商店&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Google 5G smartphones feature the latest technology so you always have that new phone feeling. Find out which Pixel is right for you.&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;global_rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;span class="p">},&lt;/span>
&lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://store.google.com/tw/?hl=zh-TW&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;display_link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://store.google.com › ...&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Google 商店官網，專售Google 製造的裝置和配件&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;全新Pixel 手機內建Google AI 技術，搭載最令人驚艷的Pixel 相機。 ... 支援大多數搭載Android 9.0 以上版本的手機，須有Google 帳戶、Google Pixel Watch 應用程式和網路連 ...&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;global_rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;span class="p">},&lt;/span>
&lt;span class="err">......&lt;/span>
&lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://guidebooks.google.com/pixel?hl=zh-Hant&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;display_link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://guidebooks.google.com › pixel&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;title&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;瞭解「Google Pixel」&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;description&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;設定新的Pixel 手機. 瞭解如何從你的舊Android 手機或iPhone® 轉移資料。 接下來，你可以學習如何自訂各項設定、取得日常事務協助以及 因應緊急狀況等等。&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;global_rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">10&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="p">],&lt;/span>
&lt;span class="nt">&amp;#34;pagination&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;current_page&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;next_page_link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://www.google.com.tw/search?q=Google+Pixel&amp;amp;sca_esv=587474982&amp;amp;gl=tw&amp;amp;hl=zh-TW&amp;amp;ei=XZBsZxxxxxxxx4HIDg&amp;amp;start=10&amp;amp;sa=N&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;next_page_start&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;next_page&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;span class="p">},&lt;/span>
&lt;span class="nt">&amp;#34;related&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;list_group&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://www.google.com.tw/search?sca_esv=587474982&amp;amp;gl=tw&amp;amp;hl=zh-TW&amp;amp;q=google+pixel%E8%A9%95%E5%83%B9&amp;amp;sa=X&amp;amp;ved=2ahUKEwiS9uLuvPOCAxXYBogKHdNVAOkQ1QJ6BAgjEAE&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;google pixel評價&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;global_rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">11&lt;/span>
&lt;span class="p">},&lt;/span>
&lt;span class="err">......&lt;/span>
&lt;span class="p">{&lt;/span>
&lt;span class="nt">&amp;#34;list_group&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">false&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;link&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;https://www.google.com.tw/search?sca_esv=587474982&amp;amp;gl=tw&amp;amp;hl=zh-TW&amp;amp;q=google%E6%89%8B%E6%A9%9Fpixel+7&amp;amp;sa=X&amp;amp;ved=2ahUKEwiS9uLuvPOCAxXYBogKHdNVAOkQ1QJ6BAgeEAE&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;text&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;google手機pixel 7&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="nt">&amp;#34;global_rank&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">18&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="p">]&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;h3 id="完整-python-範例">完整 Python 範例&lt;/h3>
&lt;p>首先要確認有安裝 Requests 套件：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Shell" data-lang="Shell">pip install requests
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>完整 Python 程式碼：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt"> 10
&lt;/span>&lt;span class="lnt"> 11
&lt;/span>&lt;span class="lnt"> 12
&lt;/span>&lt;span class="lnt"> 13
&lt;/span>&lt;span class="lnt"> 14
&lt;/span>&lt;span class="lnt"> 15
&lt;/span>&lt;span class="lnt"> 16
&lt;/span>&lt;span class="lnt"> 17
&lt;/span>&lt;span class="lnt"> 18
&lt;/span>&lt;span class="lnt"> 19
&lt;/span>&lt;span class="lnt"> 20
&lt;/span>&lt;span class="lnt"> 21
&lt;/span>&lt;span class="lnt"> 22
&lt;/span>&lt;span class="lnt"> 23
&lt;/span>&lt;span class="lnt"> 24
&lt;/span>&lt;span class="lnt"> 25
&lt;/span>&lt;span class="lnt"> 26
&lt;/span>&lt;span class="lnt"> 27
&lt;/span>&lt;span class="lnt"> 28
&lt;/span>&lt;span class="lnt"> 29
&lt;/span>&lt;span class="lnt"> 30
&lt;/span>&lt;span class="lnt"> 31
&lt;/span>&lt;span class="lnt"> 32
&lt;/span>&lt;span class="lnt"> 33
&lt;/span>&lt;span class="lnt"> 34
&lt;/span>&lt;span class="lnt"> 35
&lt;/span>&lt;span class="lnt"> 36
&lt;/span>&lt;span class="lnt"> 37
&lt;/span>&lt;span class="lnt"> 38
&lt;/span>&lt;span class="lnt"> 39
&lt;/span>&lt;span class="lnt"> 40
&lt;/span>&lt;span class="lnt"> 41
&lt;/span>&lt;span class="lnt"> 42
&lt;/span>&lt;span class="lnt"> 43
&lt;/span>&lt;span class="lnt"> 44
&lt;/span>&lt;span class="lnt"> 45
&lt;/span>&lt;span class="lnt"> 46
&lt;/span>&lt;span class="lnt"> 47
&lt;/span>&lt;span class="lnt"> 48
&lt;/span>&lt;span class="lnt"> 49
&lt;/span>&lt;span class="lnt"> 50
&lt;/span>&lt;span class="lnt"> 51
&lt;/span>&lt;span class="lnt"> 52
&lt;/span>&lt;span class="lnt"> 53
&lt;/span>&lt;span class="lnt"> 54
&lt;/span>&lt;span class="lnt"> 55
&lt;/span>&lt;span class="lnt"> 56
&lt;/span>&lt;span class="lnt"> 57
&lt;/span>&lt;span class="lnt"> 58
&lt;/span>&lt;span class="lnt"> 59
&lt;/span>&lt;span class="lnt"> 60
&lt;/span>&lt;span class="lnt"> 61
&lt;/span>&lt;span class="lnt"> 62
&lt;/span>&lt;span class="lnt"> 63
&lt;/span>&lt;span class="lnt"> 64
&lt;/span>&lt;span class="lnt"> 65
&lt;/span>&lt;span class="lnt"> 66
&lt;/span>&lt;span class="lnt"> 67
&lt;/span>&lt;span class="lnt"> 68
&lt;/span>&lt;span class="lnt"> 69
&lt;/span>&lt;span class="lnt"> 70
&lt;/span>&lt;span class="lnt"> 71
&lt;/span>&lt;span class="lnt"> 72
&lt;/span>&lt;span class="lnt"> 73
&lt;/span>&lt;span class="lnt"> 74
&lt;/span>&lt;span class="lnt"> 75
&lt;/span>&lt;span class="lnt"> 76
&lt;/span>&lt;span class="lnt"> 77
&lt;/span>&lt;span class="lnt"> 78
&lt;/span>&lt;span class="lnt"> 79
&lt;/span>&lt;span class="lnt"> 80
&lt;/span>&lt;span class="lnt"> 81
&lt;/span>&lt;span class="lnt"> 82
&lt;/span>&lt;span class="lnt"> 83
&lt;/span>&lt;span class="lnt"> 84
&lt;/span>&lt;span class="lnt"> 85
&lt;/span>&lt;span class="lnt"> 86
&lt;/span>&lt;span class="lnt"> 87
&lt;/span>&lt;span class="lnt"> 88
&lt;/span>&lt;span class="lnt"> 89
&lt;/span>&lt;span class="lnt"> 90
&lt;/span>&lt;span class="lnt"> 91
&lt;/span>&lt;span class="lnt"> 92
&lt;/span>&lt;span class="lnt"> 93
&lt;/span>&lt;span class="lnt"> 94
&lt;/span>&lt;span class="lnt"> 95
&lt;/span>&lt;span class="lnt"> 96
&lt;/span>&lt;span class="lnt"> 97
&lt;/span>&lt;span class="lnt"> 98
&lt;/span>&lt;span class="lnt"> 99
&lt;/span>&lt;span class="lnt">100
&lt;/span>&lt;span class="lnt">101
&lt;/span>&lt;span class="lnt">102
&lt;/span>&lt;span class="lnt">103
&lt;/span>&lt;span class="lnt">104
&lt;/span>&lt;span class="lnt">105
&lt;/span>&lt;span class="lnt">106
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="kn">import&lt;/span> &lt;span class="nn">time&lt;/span>
&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;span class="n">ZONE&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;your_zone&amp;gt;&amp;#34;&lt;/span>
&lt;span class="n">ACCOUNT_ID&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;your_account_id&amp;gt;&amp;#34;&lt;/span>
&lt;span class="n">PASSWORD&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;your_password&amp;gt;&amp;#34;&lt;/span>
&lt;span class="n">HOST&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;your_host&amp;gt;&amp;#34;&lt;/span>
&lt;span class="n">API_TOKEN&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;your_api_token&amp;gt;&amp;#34;&lt;/span>
&lt;span class="k">class&lt;/span> &lt;span class="nc">Brightdata&lt;/span>&lt;span class="p">():&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">zone&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">account_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">password&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">host&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">api_token&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">zone&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">zone&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">account_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">account_id&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">password&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">password&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">host&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">host&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">api_token&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">api_token&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">username&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;brd-customer-{self.account_id}-zone-{self.zone}&amp;#34;&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">proxy_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;http://{self.username}:{self.password}@{self.host}&amp;#34;&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="nf">sync_get_search_result&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">keyword&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34; SERP API 同步請求 - 取得搜尋結果&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">proxies&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s1">&amp;#39;http&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">proxy_url&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;https&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">proxy_url&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;https://www.google.com.tw/search&amp;#39;&lt;/span>
&lt;span class="n">params&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s2">&amp;#34;q&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">keyword&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 搜尋關鍵字&lt;/span>
&lt;span class="s2">&amp;#34;gl&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;tw&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;lang&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;zh-TW&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;location&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Kaohsiung City,Taiwan&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;num&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;100&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;brd_json&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;1&amp;#34;&lt;/span> &lt;span class="c1"># 回傳 JSON 格式，預設是 html&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="c1"># 使用 verify=False 忽略 SSL 憑證&lt;/span>
&lt;span class="c1"># 為了安全，建議還是安裝 SSL 憑證：https://help.brightdata.com/hc/en-us/articles/4413322250001&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">params&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">params&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">proxies&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">proxies&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">verify&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">False&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status_code&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;Error: {response.status_code} - {response.reason}&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="nf">async_set_search_job&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">keyword&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34; SERP API 非同步請求 - 設定搜尋任務
&lt;/span>&lt;span class="s2">
&lt;/span>&lt;span class="s2"> * 記得要先去後台開啟 Asynchronous requests
&lt;/span>&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;https://api.brightdata.com/serp/req?customer={self.account_id}&amp;amp;zone={self.zone}&amp;#39;&lt;/span>
&lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s1">&amp;#39;Content-Type&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;application/json&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;Authorization&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;Bearer {self.api_token}&amp;#39;&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s2">&amp;#34;country&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;tw&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;query&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s2">&amp;#34;q&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">keyword&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="c1"># 搜尋關鍵字&lt;/span>
&lt;span class="s2">&amp;#34;gl&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;tw&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;lang&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;zh-TW&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;location&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;Kaohsiung City,Taiwan&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;num&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;100&amp;#34;&lt;/span>
&lt;span class="p">},&lt;/span>
&lt;span class="s2">&amp;#34;brd_json&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;json&amp;#34;&lt;/span> &lt;span class="c1"># 回傳 JSON 格式，預設是 html&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">json&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">response_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status_code&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">response_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;x-response-id&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;response id: {response_id}&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;Error: {response.status_code} - {response.reason}&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">response_id&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="nf">async_get_search_result&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">response_id&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34; SERP API 非同步請求 - 取得搜尋結果
&lt;/span>&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;https://api.brightdata.com/serp/get_result?customer={self.account_id}&amp;amp;zone={self.zone}&amp;amp;response_id={response_id}&amp;#39;&lt;/span>
&lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;Authorization&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;Bearer {self.api_token}&amp;#39;&lt;/span>&lt;span class="p">}&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status_code&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">200&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;Error: {response.status_code} - {response.reason}&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">brightdata&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Brightdata&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ZONE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ACCOUNT_ID&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">PASSWORD&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">HOST&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">API_TOKEN&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># SERP API 同步請求&lt;/span>
&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">brightdata&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sync_get_search_result&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Google Pixel&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="c1"># SERP API 非同步請求&lt;/span>
&lt;span class="c1"># response_id = brightdata.async_set_search_job(&amp;#34;Google Pixel&amp;#34;)&lt;/span>
&lt;span class="c1"># time.sleep(10) # 等待它完成查詢&lt;/span>
&lt;span class="c1"># result = brightdata.async_get_search_result(response_id)&lt;/span>
&lt;span class="c1"># print(json.dumps(result))&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;br/>
&lt;p>* 官方還有更多的說明文件，有需要都可以進去看看：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://help.brightdata.com/hc/en-us/sections/16062473940113" target="_blank" rel="noopener">
PROXIES &amp;amp; SCRAPING INFRA &amp;gt; SERP API
&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://help.brightdata.com/hc/en-us/sections/4413189032977" target="_blank" rel="noopener">
API DOCUMENTATION &amp;gt; SERP-API
&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://help.brightdata.com/hc/en-us/articles/16593685131153" target="_blank" rel="noopener">
SERP-API 常見 Q&amp;amp;A
&lt;/a>&lt;/li>
&lt;/ul>
&lt;br/>
&lt;br/>
&lt;div class="notices info" data-title="註冊 bright data">
&lt;p>如果願意透過此連結註冊，我可以獲得一絲絲分潤，就當支持我寫作吧~🫡&lt;/p>
&lt;p>註冊 Bright Data 帳號：&lt;a href="https://get.brightdata.com/fabjye">https://get.brightdata.com/fabjye&lt;/a>&lt;/p>
&lt;p>官方還提供我的讀者優惠~&lt;br />
透過上述連結註冊的新用戶，首次儲值 25 美元再&lt;strong>送 25 美元&lt;/strong>，直接省一半!!&lt;/p>
&lt;/div>
&lt;br/>
&lt;br/>
&lt;h2 id="結語">結語&lt;/h2>
&lt;p>如果你有爬取(抓取)搜尋結果資料的需求，我覺得花點小錢還是蠻值得的，總比自己在那邊 搞爬蟲、驗證碼(CAPTCHA)、換 IP、Proxy、被Ban帳號 好太多了&amp;hellip; (&amp;lt;- 過來人😭😭😭&lt;/p>
&lt;p>Bright Data 除了這次介紹的 SERP API 工具外，他還有其他很多的服務，像是 Proxy、Scraping Browser API、Web Scraper IDE、Web Unlocker 等等，如果有這方面的需求，也可以跟他們詢問 (反正問又不用錢XD)。&lt;/p>
&lt;br/>
&lt;br/>
&lt;hr />
&lt;p>參考：&lt;br />
&lt;a href="https://brightdata.com/" target="_blank" rel="noopener">
BrightData 官方網站
&lt;/a>&lt;br />
&lt;a href="https://help.brightdata.com/hc/en-us/sections/16062473940113" target="_blank" rel="noopener">
BrightData SERP-API 官方文檔1
&lt;/a>&lt;br />
&lt;a href="https://help.brightdata.com/hc/en-us/sections/4413189032977" target="_blank" rel="noopener">
BrightData SERP-API 官方文檔2
&lt;/a>&lt;br />
&lt;a href="https://help.brightdata.com/hc/en-us/articles/16593685131153" target="_blank" rel="noopener">
BrightData SERP-API 常見 Q&amp;amp;A
&lt;/a>&lt;br />
&lt;a href="https://brightdata.com/cp/zones" target="_blank" rel="noopener">
BrightData 使用者後台
&lt;/a>&lt;/p>
&lt;br/>
&lt;blockquote>
&lt;p>只做能力範圍的事，就永遠無法進步。&lt;/p>
&lt;/blockquote></content:encoded><dc:creator>Jia</dc:creator><media:content url="https://blog.jiatool.comimages/cover/brightdata_serp_api.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><media:content url="https://blog.jiatool.comimages/posts/brightdata_serp_api_meta.jpg" medium="image"><media:title type="html">meta image</media:title></media:content><category>Google搜尋</category><category>Yahoo搜尋</category><category>SEO</category><category>API</category><category>Python</category><category>分享</category></item><item><title>DataForSEO 教學 — Google、Yahoo 搜尋結果 SERP API</title><link>https://blog.jiatool.com/posts/dataforseo/</link><pubDate>Sat, 18 Nov 2023 21:50:00 +0800</pubDate><author>jia@jiatool.com (Jia)</author><atom:modified>Sat, 18 Nov 2023 21:50:00 +0800</atom:modified><guid>https://blog.jiatool.com/posts/dataforseo/</guid><description>(先澄清，以下非業配，純粹依個人使用過程描述。) 前言 在很久之前，我有寫一篇關於第三方 Google 搜尋結果的 API (Aves API) 。而最近又在因緣際會下，被迫(?)接觸</description><content:encoded>&lt;p>(先澄清，以下非業配，純粹依個人使用過程描述。)&lt;/p>
&lt;h2 id="前言">前言&lt;/h2>
&lt;p>在很久之前，我有寫一篇關於第三方 &lt;a href="https://blog.jiatool.com/posts/aves_api" target="_blank" rel="noopener">
Google 搜尋結果的 API (Aves API)
&lt;/a>。而最近又在因緣際會下，被迫(?)接觸了另一個類似的服務平台 — DataForSEO。&lt;/p>
&lt;p>&lt;a href="https://dataforseo.com/" target="_blank" rel="noopener">
DataForSEO
&lt;/a> 提供了更多的服務，包括 Google Search、Google Maps、Google News、Google Images、YouTube、Yahoo Search、Bing Search、百度 Search、Google Play 和 Apple App，還有一些其他商業應用的服務。可以看的出來還蠻多樣的，如果有這方面的需求或許可以參考。&lt;/p>
&lt;p>這次就改以「Yahoo 搜尋 API」當範例，來跟著我一起嘗試這個 API 服務吧，這篇也算把我自己的使用經驗記錄下來。&lt;/p>
&lt;br/>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/dataforseo_home.jpg" alt="DataForSEO 官網" data-caption="DataForSEO 官網" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
DataForSEO 官網
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;!--adsense-->
&lt;h2 id="serp-api">SERP API&lt;/h2>
&lt;p>官方的 &lt;a href="https://dataforseo.com/apis/serp-api" target="_blank" rel="noopener">
SERP API 頁面
&lt;/a> 有一些簡單的介紹，SERP API 目前支援以下幾種搜尋：&lt;/p>
&lt;ul>
&lt;li>Google SERP&lt;/li>
&lt;li>Google 圖片&lt;/li>
&lt;li>Google 新聞&lt;/li>
&lt;li>Google 地圖&lt;/li>
&lt;li>Yahoo SERP&lt;/li>
&lt;li>Bing SERP&lt;/li>
&lt;li>百度 SERP&lt;/li>
&lt;li>YouTube SERP&lt;/li>
&lt;/ul>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/serp_api.jpg" alt="SERP API 支援的搜尋引擎" data-caption="SERP API 支援的搜尋引擎" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='500px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:500px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API 支援的搜尋引擎
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;h3 id="搜尋測試頁面">搜尋測試頁面&lt;/h3>
&lt;p>在 DataForSEO 官網上有提供一個 &lt;a href="https://dataforseo.com/apis/serp-api#playground" target="_blank" rel="noopener">
Google SERP 搜尋測試頁面
&lt;/a>，可以實際輸入關鍵字，並查看它回傳的資料，只可惜好像沒有提供台灣的選項。&lt;/p>
&lt;p>但它在使用者後台(需註冊)也有提供一個 API Explorer (就是 Playground) 的 GUI 介面，會完整許多，各種支援的搜尋引擎都可以選，地區也有台灣(並細分到縣市)，也有許多參數可以設定，但這邊就會直接花到錢的 (新帳戶有送 1 美元的額度可供試用)。&lt;/p>
&lt;p>關於使用者後台頁面，我文章後續章節會再介紹。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/playground.jpg" alt="Google SERP 搜尋測試頁面" data-caption="Google SERP 搜尋測試頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='700px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:700px;height:;"/>
&lt;figcaption style="text-align: center;">
Google SERP 搜尋測試頁面
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;h3 id="serp-api-價格">SERP API 價格&lt;/h3>
&lt;p>搜尋 API 價格官方有詳細說明在&lt;a href="https://dataforseo.com/pricing/serp/serp-api" target="_blank" rel="noopener">
這個網頁
&lt;/a>，依照你使用的模式它分為三種價格：STANDARD QUEUE、PRIORITY QUEUE、LIVE MODE。&lt;/p>
&lt;ul>
&lt;li>STANDARD QUEUE：每一次查詢 $0.0006，平均等 5 分鐘。&lt;/li>
&lt;li>PRIORITY QUEUE：每一次查詢 $0.0012，平均等 1 分鐘。&lt;/li>
&lt;li>LIVE MODE：每一次查詢 $0.002，平均等 6 秒。&lt;/li>
&lt;/ul>
&lt;p>* 以上價格為美金&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/serp_pricing.jpg" alt="SERP API 價格" data-caption="SERP API 價格" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API 價格
&lt;/figcaption>
&lt;/figure>
&lt;p>LIVE MODE 使用上最簡單，只要單一請求就會回傳結果，速度也最快，但價格當然也最貴。&lt;br />
STANDARD QUEUE 和 PRIORITY QUEUE 則是要先發送查詢任務請求，再來定時去問問它查好了沒，最後再取得查詢結果，要分成三段，在程式上寫起來比較麻煩，但它比較便宜(窮人的悲哀QQ)，而 STANDARD QUEUE 和 PRIORITY QUEUE 兩者看起來只差在等待時間及價格。&lt;/p>
&lt;br/>
&lt;p>以下文章我會以 STANDARD QUEUE 和 PRIORITY QUEUE 模式來示範。&lt;/p>
&lt;br/>
&lt;h3 id="api-使用">API 使用&lt;/h3>
&lt;p>SERP API 使用上分為三個請求：&lt;/p>
&lt;ol>
&lt;li>&lt;a href="https://docs.dataforseo.com/v3/serp/yahoo/organic/task_post/" target="_blank" rel="noopener">
Task POST
&lt;/a> (&lt;code>task_post&lt;/code>)：設定任務&lt;/li>
&lt;li>&lt;a href="https://docs.dataforseo.com/v3/serp/yahoo/organic/tasks_ready/" target="_blank" rel="noopener">
Tasks Ready
&lt;/a> (&lt;code>tasks_ready&lt;/code>)：取得已完成任務&lt;/li>
&lt;li>&lt;a href="https://docs.dataforseo.com/v3/serp/yahoo/organic/task_get/regular/" target="_blank" rel="noopener">
Task GET
&lt;/a> (&lt;code>task_get&lt;/code>)：取得任務的結果&lt;/li>
&lt;/ol>
&lt;p>* STANDARD QUEUE、PRIORITY QUEUE 模式的區分是在送出 task_post 請求時，帶上 &lt;code>priority&lt;/code> 參數來指定，&lt;code>1&lt;/code> (預設)代表 STANDARD、&lt;code>2&lt;/code> 代表 PRIORITY。&lt;/p>
&lt;br/>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/serp_api_flow.jpg" alt="SERP API 流程" data-caption="SERP API 流程" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='650px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:650px;height:;"/>
&lt;figcaption style="text-align: center;">
SERP API 流程
&lt;/figcaption>
&lt;/figure>
&lt;ol>
&lt;li>
&lt;p>首先使用 &amp;quot;Task POST&amp;quot; 設定查詢任務，指定關鍵字以及其餘參數，讓它開始去抓我們想要的搜尋結果，這邊最多可以一次給 100 組關鍵字，不過稍微注意有限制每分鐘最多只能發送 2000 個 API 請求。&lt;/p>
&lt;p>* 你也可以指定 &lt;code>pingback_url&lt;/code>，當任務完成時它會主動通知你；&lt;br />
* 或指定 &lt;code>postback_url&lt;/code>，當任務完成時它會主動將結果傳送給你。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>再來使用 &amp;quot;Tasks Ready&amp;quot; 查詢它執行完哪些任務，可以每 10 秒檢查一次，或一分鐘檢查一次，它只有限制每分鐘最多進行 20 次 API 請求。另外，已經被收集的任務(我猜是指已使用 &lt;code>task_get&lt;/code> 取得的任務)和放超過三天未收集的任務會被移除不會在裡面。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>最後，使用 &amp;quot;Task GET&amp;quot; 帶上任務 ID 取得任務的查詢結果，它有分三種 Regular、Advanced、HTML，Regular 就是以 JSON 格式整理好的結果；Advanced 跟 Regular 一樣，只是好像還有多一些特定資訊，我也不是很清楚；HTML 就是回傳搜尋結果的 HTML 格式。&lt;/p>
&lt;p>* 而且任務結果在 30 天內都會保留，用 ID 都可以取得結果。&lt;br />
* 關於搜尋結果不同類別(type)各自代表甚麼，在這邊有官方的圖文說明：&lt;a href="https://dataforseo.com/serp-features">https://dataforseo.com/serp-features&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>* 以上三種請求，只有 &amp;quot;Task POST&amp;quot; 會收費，其餘兩個並不會產生費用。&lt;/p>
&lt;br/>
&lt;br/>
&lt;p>送出的請求 Header 皆需要帶上憑證，確認是哪個帳號發出的，其格式如下：&lt;/p>
&lt;pre>&lt;code>Authorization: Basic ${credentials}
&lt;/code>&lt;/pre>&lt;p>其中 &lt;code>credentials&lt;/code> 是將你的 &amp;quot;API login&amp;quot; 與 &amp;quot;API password&amp;quot; 組的字串 &lt;code>{login}:{password}&lt;/code> 經過 Base64 編碼的結果。&lt;/p>
&lt;p>例如帳號是 &lt;code>jia@gmail.com&lt;/code>、密碼是 &lt;code>abc123&lt;/code>，組成 &lt;code>jia@gmail.com:abc123&lt;/code>，再經過 Base64 變成 &lt;code>amlhQGdtYWlsLmNvbTphYmMxMjM=&lt;/code>。&lt;/p>
&lt;p>* &amp;quot;API login&amp;quot; 與 &amp;quot;API password&amp;quot; 可以在 &lt;a href="https://app.dataforseo.com/api-dashboard" target="_blank" rel="noopener">
使用者後台 API Dashboard
&lt;/a> 網頁找到。&lt;/p>
&lt;br/>
&lt;br/>
&lt;p>對了，&lt;br />
它們 API 還有提供 📦 沙盒模式(Sandbox)，讓我們可以在撰寫程式時做測試，不會花費到費用，但當然回傳的資料就是它們的範例資料，但可以讓我們確認 API 回傳的資料格式、測試程式有沒有問題。&lt;/p>
&lt;p>官方文件：&lt;a href="https://docs.dataforseo.com/v3/appendix/sandbox/">https://docs.dataforseo.com/v3/appendix/sandbox/&lt;/a>&lt;/p>
&lt;br/>
&lt;br/>
&lt;p>* 官方文件有更完整的說明：&lt;a href="https://docs.dataforseo.com/v3/serp/yahoo/overview/">https://docs.dataforseo.com/v3/serp/yahoo/overview/&lt;/a>&lt;/p>
&lt;p>* 其他常見的 Q&amp;amp;A：&lt;a href="https://dataforseo.com/help-center/category/serp-api">https://dataforseo.com/help-center/category/serp-api&lt;/a>&lt;/p>
&lt;br/>
&lt;h3 id="python-範例">Python 範例&lt;/h3>
&lt;p>首先要確認有安裝 Requests 套件：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Shell" data-lang="Shell">pip install requests
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>完整 Python 程式碼：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;span class="lnt">68
&lt;/span>&lt;span class="lnt">69
&lt;/span>&lt;span class="lnt">70
&lt;/span>&lt;span class="lnt">71
&lt;/span>&lt;span class="lnt">72
&lt;/span>&lt;span class="lnt">73
&lt;/span>&lt;span class="lnt">74
&lt;/span>&lt;span class="lnt">75
&lt;/span>&lt;span class="lnt">76
&lt;/span>&lt;span class="lnt">77
&lt;/span>&lt;span class="lnt">78
&lt;/span>&lt;span class="lnt">79
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;span class="kn">import&lt;/span> &lt;span class="nn">requests&lt;/span>
&lt;span class="k">class&lt;/span> &lt;span class="nc">DataforseoSerp&lt;/span>&lt;span class="p">():&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="fm">__init__&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">credentials&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">open_sandbox&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">False&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">base_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;https://api.dataforseo.com/v3/serp&amp;#39;&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">open_sandbox&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">base_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;https://sandbox.dataforseo.com/v3/serp&amp;#39;&lt;/span> &lt;span class="c1"># 沙盒模式&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">search_engine&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;yahoo&amp;#39;&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s1">&amp;#39;Authorization&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;Basic ${credentials}&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;Content-Type&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;application/json&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">location_code&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1012825&lt;/span> &lt;span class="c1"># New Taipei City,Taiwan&lt;/span>
&lt;span class="c1"># https://docs.dataforseo.com/v3/serp/yahoo/locations/&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">language_code&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;zh-TW&amp;#39;&lt;/span>
&lt;span class="c1"># https://docs.dataforseo.com/v3/serp/yahoo/languages/&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">device&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;desktop&amp;#34;&lt;/span> &lt;span class="c1"># mobile&lt;/span>
&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">os&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;windows&amp;#34;&lt;/span> &lt;span class="c1"># macos android ios&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="nf">task_post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">keywords&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">depth&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;span class="s2"> 設定查詢任務，keywords 最多一次可以 100 個，每分鐘最多可以發送 2000 個 API 呼叫
&lt;/span>&lt;span class="s2"> https://docs.dataforseo.com/v3/serp/yahoo/organic/task_post/
&lt;/span>&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">keywords&lt;/span> &lt;span class="ow">is&lt;/span> &lt;span class="bp">None&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">keywords&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="bp">None&lt;/span>
&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;{self.base_url}/{self.search_engine}/organic/task_post&amp;#39;&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;span class="k">for&lt;/span> &lt;span class="n">keyword&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">keywords&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">({&lt;/span>
&lt;span class="s2">&amp;#34;keyword&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">keyword&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;location_code&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">location_code&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;language_code&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">language_code&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;device&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">device&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;os&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">os&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s2">&amp;#34;depth&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">depth&lt;/span>
&lt;span class="p">})&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">post&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">json&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">data&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="nf">tasks_ready&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;span class="s2"> 取得已完成的查詢任務
&lt;/span>&lt;span class="s2"> https://docs.dataforseo.com/v3/serp/yahoo/organic/tasks_ready/
&lt;/span>&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;{self.base_url}/{self.search_engine}/organic/tasks_ready&amp;#39;&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="nf">task_get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">task_id&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;span class="s2"> 取得查詢任務的結果
&lt;/span>&lt;span class="s2"> https://docs.dataforseo.com/v3/serp/yahoo/organic/task_get/regular/
&lt;/span>&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">task_id&lt;/span> &lt;span class="ow">is&lt;/span> &lt;span class="bp">None&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="bp">None&lt;/span>
&lt;span class="n">url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;{self.base_url}/{self.search_engine}/organic/task_get/regular/{task_id}&amp;#39;&lt;/span>
&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">headers&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">headers&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">dataforseo_serp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">DataforseoSerp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;xxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">open_sandbox&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">True&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dataforseo_serp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">task_post&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="s2">&amp;#34;飲料&amp;#34;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dataforseo_serp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">tasks_ready&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dataforseo_serp&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">task_get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;11171539-6790-0066-2000-fa82270464a2&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dataforseo_serp_result.json&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;w&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">json&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dump&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>當然比較好的做法，是還要判斷它回傳結果的 &lt;code>status_code&lt;/code> 欄位和 &lt;code>tasks&lt;/code> 底下的 &lt;code>status_code&lt;/code> 欄位，確保任務執行 OK 才去取資料，如果有錯誤，程式內要做相對應處理。&lt;/p>
&lt;p>這邊只是為了示範，我就沒有寫出來了。&lt;/p>
&lt;p>* 各個狀態代碼意思如&lt;a href="https://docs.dataforseo.com/v3/appendix/errors/" target="_blank" rel="noopener">
這個官方清單
&lt;/a>。&lt;/p>
&lt;br/>
&lt;h2 id="使用者後台">使用者後台&lt;/h2>
&lt;p>當註冊後登入，即可進入 &lt;a href="https://app.dataforseo.com/api-dashboard" target="_blank" rel="noopener">
使用者後台頁面
&lt;/a> 去查看更多相關資訊。&lt;/p>
&lt;p>其中有幾個重要的頁面：&lt;/p>
&lt;ul>
&lt;li>API Dashboard (儀錶板)&lt;/li>
&lt;li>API Usage (使用紀錄)&lt;/li>
&lt;li>API Errors (錯誤紀錄)&lt;/li>
&lt;li>API Explorer (API Playground)&lt;/li>
&lt;li>API Settings (設定 API 限制)&lt;/li>
&lt;/ul>
&lt;h3 id="api-dashboard-儀錶板">API Dashboard (儀錶板)&lt;/h3>
&lt;p>有顯示你的 &amp;quot;API login&amp;quot; 與 &amp;quot;API password&amp;quot;，以及圖表化顯示每天的花費。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/api_dashboard.jpg" alt="API Dashboard (儀錶板) 頁面" data-caption="API Dashboard (儀錶板) 頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='850px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:850px;height:;"/>
&lt;figcaption style="text-align: center;">
API Dashboard (儀錶板) 頁面
&lt;/figcaption>
&lt;/figure>
&lt;h3 id="api-usage-使用紀錄">API Usage (使用紀錄)&lt;/h3>
&lt;p>就是你 API 的呼叫紀錄，它有將不同種類的 API 區分開來，方便我們查找。&lt;br />
有紀錄任務 ID、執行時間、執行狀態、花費、送出的參數，甚至可以從這邊看到查詢結果(等同於 &amp;quot;Task GET&amp;quot; 請求)。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/api_usage.jpg" alt="API Usage (使用紀錄) 頁面" data-caption="API Usage (使用紀錄) 頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='850px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:850px;height:;"/>
&lt;figcaption style="text-align: center;">
API Usage (使用紀錄) 頁面
&lt;/figcaption>
&lt;/figure>
&lt;h3 id="api-errors-錯誤紀錄">API Errors (錯誤紀錄)&lt;/h3>
&lt;p>發生錯誤的 API 請求會在這頁列出來。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/api_errors.jpg" alt="API Errors (錯誤紀錄) 頁面" data-caption="API Errors (錯誤紀錄) 頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='850px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:850px;height:;"/>
&lt;figcaption style="text-align: center;">
API Errors (錯誤紀錄) 頁面
&lt;/figcaption>
&lt;/figure>
&lt;h3 id="api-explorer-api-playground">API Explorer (API Playground)&lt;/h3>
&lt;p>以圖形化的操作頁面，讓你實際測試 API 的結果是否符合你的預期，有輸入框讓你設定 API 不同參數，像是用哪個搜尋引擎、地區(有細分到縣市)、語言、電腦版或手機版、作業系統、關鍵字。&lt;/p>
&lt;p>但要稍微注意，這邊是會直接花到錢的 (新帳戶有送 1 美元的額度可供試用)。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/api_explorer.jpg" alt="API Explorer (API Playground) 頁面" data-caption="API Explorer (API Playground) 頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='850px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:850px;height:;"/>
&lt;figcaption style="text-align: center;">
API Explorer (API Playground) 頁面
&lt;/figcaption>
&lt;/figure>
&lt;h3 id="api-settings-設定-api-限制">API Settings (設定 API 限制)&lt;/h3>
&lt;p>能設定可以呼叫 API 的 IP 白名單、限制每日最大花費額度(總共額度，或也可以細到 by 不同 API 去限制)。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/dataforseo/api_settings.jpg" alt="API Settings (設定 API 限制) 頁面" data-caption="API Settings (設定 API 限制) 頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='850px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:850px;height:;"/>
&lt;figcaption style="text-align: center;">
API Settings (設定 API 限制) 頁面
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;h2 id="注意事項">注意事項&lt;/h2>
&lt;p>我在使用 Yahoo 搜尋 API 時發現，我明明設定要 100 筆結果(&lt;code>depth=100&lt;/code>)，結果回傳只有 70 筆、甚至 40 幾筆而已的，我也有透過 API 回傳的 &lt;code>check_url&lt;/code> 網址去確認，經過詢問與確認，官方是這樣答覆我：&lt;/p>
&lt;blockquote>
&lt;p>Today, you contacted our Support Team and provided us with ID of your task sent to the Yahoo Serp API that returned fewer results than expected.&lt;br />
Our developers have carefully checked the situation and explained that such a search engine has some limitations. To avoid timeouts, we have a restriction that allows us to crawl up to 6 pages of the ordinary SERP (the one you can see in a browser). Taking into account that each page contains 7-8 results. In total, the API does not return more than 50 results.&lt;br />
If we remove such a restriction globally, this API will return 500 errors, and since we will have to send numerous requests to this search engine, it may harm it due to high traffic coming from us. I hope it makes sense.&lt;br />
Hope for your understanding!&lt;/p>
&lt;/blockquote>
&lt;p>也就是可能他們的 Yahoo 搜尋 API 很可能沒辦法抓到我們指定的筆數，除非你只需要第一頁，或前三頁之類的，不然這也是很困擾，要特別注意。&lt;/p>
&lt;br/>
&lt;!--adsense-->
&lt;h2 id="結語">結語&lt;/h2>
&lt;p>相比上次使用的 Aves API 來說，DataForSEO 真的多了非常多的服務，而且價格貌似也比較便宜。官方同樣有線上客服，有相關需求都可以直接詢問，回應速度還蠻快的。&lt;/p>
&lt;p>當然我目前只是短暫的嘗試，還不確定它長久、大量地使用下來穩定性如何，這部分有需求的人可以自行比較看看。&lt;/p>
&lt;br/>
&lt;br/>
&lt;hr />
&lt;p>參考：&lt;br />
&lt;a href="https://dataforseo.com/" target="_blank" rel="noopener">
DataForSEO 官方網站
&lt;/a>&lt;br />
&lt;a href="https://docs.dataforseo.com/v3/" target="_blank" rel="noopener">
DataForSEO 官方文檔
&lt;/a>&lt;br />
&lt;a href="https://app.dataforseo.com/api-dashboard" target="_blank" rel="noopener">
DataForSEO Dashboard 後台
&lt;/a>&lt;/p>
&lt;br/>
&lt;blockquote>
&lt;p>「失敗很正常，如果沒有經歷失敗，表示你還不夠創新。」&lt;br />
Failure is an option here. If things are not failing, you are not innovating enough.&lt;/p>
&lt;p align="right">—— Elon Musk 伊隆·馬斯克 (著名企業家)&lt;/p>
&lt;/blockquote></content:encoded><dc:creator>Jia</dc:creator><media:content url="https://blog.jiatool.comimages/cover/dataforseo.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><media:content url="https://blog.jiatool.comimages/posts/dataforseo_meta.jpg" medium="image"><media:title type="html">meta image</media:title></media:content><category>Google搜尋</category><category>Yahoo搜尋</category><category>SEO</category><category>API</category><category>Python</category><category>分享</category></item></channel></rss>