Quay lại blog

Google Trends với Python: Thu thập Sở thích và Các chủ đề Xu hướng

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

30-Sep-2026

TL;DR:

  • Mức độ quan tâm của Google Trends là một chỉ số điều chỉnh, không phải là số lần tìm kiếm. Bảo tồn địa lý và khoảng thời gian cần thiết để diễn giải mỗi quan sát.
  • RSS Xu hướng hiện tại và mức độ quan tâm lịch sử trả lời các câu hỏi khác nhau. Dữ liệu công khai cung cấp các chủ đề hiện tại; nó không thay thế cho một chuỗi mức độ quan tâm theo thời gian.
  • Scrapeless cung cấp một công cụ google_trends chuyên dụng. Khám phá sơ đồ công cụ đã cài đặt trước khi chọn truy vấn và kiểu dữ liệu của nó.
  • Các nhóm lưu lượng truy cập nên giữ nguyên dạng văn bản. Một nhãn như một ngưỡng không được trở thành một số đếm chính xác trong bảng điều khiển.
  • Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm thời gian chạy Scraping Browser miễn phí — đăng ký tại app.scrapeless.com.

Google Trends có thể cho bạn biết về mức độ quan tâm tìm kiếm tương đối và về các chủ đề thu hút sự chú ý hiện tại. Đó là các sản phẩm dữ liệu khác nhau. Một báo cáo so sánh mức độ quan tâm của một từ khóa theo thời gian không thể thay thế cho một danh sách các chủ đề đang thịnh hành hôm nay, ngay cả khi cả hai đều chứa cùng một cụm từ.

Một quy trình thu thập Python nên chọn bề mặt trước tiên, sau đó giữ lại các cài đặt của nó. Hướng dẫn này kết nối một công cụ Trends chuyên dụng cho dữ liệu mức độ quan tâm và chạy một quy trình RSS công khai riêng biệt cho các chủ đề hiện tại. Nó giữ cho các ranh giới đầu ra rõ ràng thay vì ép buộc các chỉ số không tương thích vào một cột.

Nếu ứng dụng của bạn đã sử dụng quy trình làm việc có cấu trúc, hãy xem xét Trends như là một hợp đồng diễn viên/công cụ riêng của nó. Kết quả tìm kiếm của Google Search API và mức độ quan tâm của Google Trends là các tập dữ liệu riêng biệt.

Các giá trị mức độ quan tâm theo thời gian của Google Trends mô tả mức độ quan tâm tìm kiếm tương đối trong địa lý và khoảng thời gian được chọn. Chuỗi được quy đổi từ 0 đến 100, và các thuật ngữ có khối lượng thấp có thể xuất hiện là không có mà không chứng minh rằng không ai tìm kiếm chúng.

Chuẩn hóa và lấy mẫu Google Trends giải thích tại sao một điểm phụ thuộc vào tỷ lệ tìm kiếm trong các điều kiện đã chọn. Một đỉnh 100 xác định một tối đa tương đối trong chuỗi đó, không phải một số lượng tìm kiếm đã biết.

Thay đổi khoảng thời gian sẽ thay đổi cơ sở so sánh. Một giá trị từ một yêu cầu một tháng không tự động so sánh được với cùng ngày trong một yêu cầu dài hơn. Dữ liệu đã được lấy mẫu và hạn chế khối lượng thấp cũng giới hạn các kết luận bạn có thể rút ra.

Bề mặt Câu hỏi phù hợp Giữ lại với kết quả
Mức độ quan tâm theo thời gian Mức độ quan tâm tương đối đã thay đổi như thế nào? Truy vấn, địa lý, ngày tháng, thể loại và múi giờ
Mức độ quan tâm theo tiểu vùng Mức độ quan tâm tương đối tập trung ở đâu? Phạm vi địa lý và ngữ cảnh chuẩn hóa
Các truy vấn/chủ đề liên quan Các tìm kiếm hoặc chủ đề nào có liên quan? Kiểu dữ liệu và thứ hạng/ý nghĩa chỉ số được trả về
RSS Xu hướng hiện tại Các chủ đề nào đang thịnh hành hiện nay? Địa lý nguồn cấp, văn bản xuất bản và thời gian quan sát

Công cụ google_trends chuyên dụng cung cấp các tham số truy vấn cụ thể cho Trends thay vì các tham số kết quả tìm kiếm thông thường. Nó có sẵn thông qua kết nối Scrapeless MCP và thuộc về bề mặt Scraping API rộng hơn.

Sơ đồ được phát hiện địa phương bao gồm q, data_type, date, geo, hl, tz và cat. Ví dụ về data_type là interest_over_time, interest_by_subregion, related_queries và related_topics. Chọn loại yêu cầu bởi báo cáo trước khi ánh xạ các trường vào kho dữ liệu.

Một công cụ được quản lý không thay đổi ý nghĩa của các chỉ số của Google. Đầu ra vẫn cần địa lý, ngữ cảnh lấy mẫu và sự phân biệt giữa dữ liệu bị thiếu và các giá trị bằng không. Kiểm tra giá của Scrapeless để biết các điều khoản kế hoạch hiện tại; không có chi phí hoặc tiêu chuẩn độ tươi trong hướng dẫn này.

Điều kiện tiên quyết và thiết lập gói

Sử dụng Python 3.12, Node.js, MCP 2.2.0, Requests 2.34.2 và scrapeless-mcp-server 0.6.3. Đường dẫn RSS chỉ cần Requests và thư viện XML/CSV của Python. Việc thu thập dữ liệu mức độ quan tâm thêm cần có một SCRAPELESS_KEY thực sự với quyền truy cập công cụ.

Việc thu thập Trends đã xác thực vẫn chờ kiểm tra trực tiếp nếu không có chứng chỉ đó. Việc phát hiện công cụ cục bộ và đường dẫn RSS công khai chạy độc lập; không cái nào được mô tả như là một việc thu thập chuỗi mức độ quan tâm đã xác thực hoàn thành.
Cài đặt các khách hàng và máy chủ đã ghim trong một dự án dùng một lần:

bash Copy
python -m pip install mcp==2.2.0 requests==2.34.2
pnpm add scrapeless-mcp-server@0.6.3

Khám phá hợp đồng dữ liệu quan tâm trước khi thu thập

Khám phá công cụ cung cấp cho khách hàng sơ đồ chính xác được công khai bởi máy chủ MCP đã cài đặt. Giá trị khởi động cục bộ của metadata-discovery-only chỉ có thể được sử dụng để kiểm tra sơ đồ; nó không bao giờ được sử dụng để khởi động thu thập từ xa.

Lưu kịch bản này dưới tên trends_mcp.py. Chạy chế độ mặc định của nó với giá trị khám phá rõ ràng đó, hoặc với khóa thực đã cấu hình của bạn. Quá trình khởi động ẩn các nhật ký bảng điều khiển không theo giao thức để stdout vẫn có thể sử dụng cho các tin nhắn stdio. Khách hàng Python sử dụng input_schema và is_error thuộc tính của MCP 2.2.0.

python Copy
import argparse
import asyncio
import json
import os
from pathlib import Path
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

async def main(capture):
    key = os.environ['SCRAPELESS_KEY']
    server = StdioServerParameters(
        command='node',
        args=['--input-type=module', '-e',
              'console.log = () => {}; await import(process.argv[1]);',
              str(Path('node_modules/scrapeless-mcp-server/build/index.js').resolve())],
        env={**os.environ, 'SCRAPELESS_KEY': key})
    async with stdio_client(server) as streams:
        async with ClientSession(*streams) as session:
            await session.initialize()
            listed = await session.list_tools()
            tool = next(t for t in listed.tools if t.name == 'google_trends')
            Path('trends-tool-schema.json').write_text(
                json.dumps(tool.input_schema, indent=2))
            print(json.dumps({'discovered_tools': len(listed.tools),
                              'selected_tool': tool.name}))
            if capture:
                if key == 'metadata-discovery-only':
                    raise ValueError('A real key is required for remote capture')
                args = {'q': 'coffee', 'data_type': 'interest_over_time',
                        'date': 'today 12-m', 'geo': 'US',
                        'hl': 'en', 'tz': '0', 'cat': '0'}
                result = await session.call_tool(tool.name, args)
                Path('trends-result.json').write_text(json.dumps({
                    'request': args, 'result': result.model_dump(mode='json')
                }, indent=2))
                if result.is_error:
                    raise ValueError('Tool error; inspect saved result')
                print('Raw result saved; inspect its actual fields before mapping a series.')

parser = argparse.ArgumentParser()
parser.add_argument('--capture', action='store_true')
asyncio.run(main(parser.parse_args().capture))

Việc bắt tay cục bộ đã phát hiện 25 công cụ và chọn google_trends. Số đếm đó mô tả máy chủ đã cài đặt, không phải giới hạn nền tảng vĩnh cửu. trends-tool-schema.json đã lưu là bằng chứng để kiểm tra khi gói máy chủ thay đổi.

Với một khóa thực được cấu hình, python trends_mcp.py --capture yêu cầu quan tâm theo thời gian cho cà phê ở Mỹ trong suốt năm qua. Ghi chú: nhánh thu thập yêu cầu thông tin xác thực và vẫn đang chờ xác minh trực tiếp đã xác thực. Kịch bản này bảo tồn phong bì kết quả MCP trước khi đưa ra giả định về các trường bên trong của nó. Nó không tạo ra một khóa dòng thời gian hoặc chế tạo một chuỗi thời gian.

Bắt đầu thu thập dữ liệu với Scrapeless

Tăng cường quy trình thu thập dữ liệu web và tự động hóa của bạn với Scrapeless!
Đăng ký ngay hôm nay và nhận $5 tín dụng miễn phí — không yêu cầu thẻ tín dụng.

Nhận tín dụng miễn phí của bạn ngay bây giờ trong Bảng điều khiển Scrapeless.

Thu thập các chủ đề hiện tại từ nguồn cấp RSS công khai

Trending Now RSS là một nguồn cấp chủ đề hiện tại công khai có thể được thu thập mà không cần trình duyệt hoặc thông tin xác thực API Scrapeless. Thời gian xuất bản và nhãn lưu lượng của nó mô tả các quan sát chủ đề của nguồn cấp, không phải là quan tâm được chuẩn hóa lịch sử.

Kịch bản hoàn chỉnh sau đây thực hiện một yêu cầu nguồn cấp và lưu tối đa năm mục. Nó lưu XML gốc, bản ghi JSON và CSV trong một thư mục quan sát. Đây là đường dẫn dữ liệu công khai có thể thực thi độc lập.

python Copy
import csv
import hashlib
import json
from datetime import datetime, timezone
from pathlib import Path
from xml.etree import ElementTree as ET
import requests

url = 'https://trends.google.com/trending/rss?geo=US'
response = requests.get(url, timeout=30)
response.raise_for_status()
root = ET.fromstring(response.content)
channel = root.find('channel')
if channel is None:
    raise ValueError('Expected RSS channel, received another document')
observed = datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%SZ')
folder = Path('trending-rss') / observed
folder.mkdir(parents=True, exist_ok=True)
(folder / 'source.xml').write_bytes(response.content)
ns = {'ht': 'https://trends.google.com/trending/rss'}
rows = []
for item in channel.findall('item')[:5]:
    title = (item.findtext('title') or '').strip()
    link = (item.findtext('link') or '').strip()
    if not title or not link:
        raise ValueError('RSS item missing title or link')
    rows.append({'title': title, 'link': link,
                 'published': item.findtext('pubDate'),
                 'traffic_bucket': item.findtext('ht:approx_traffic', namespaces=ns),
                 'geo': 'US', 'observed_at': observed})
if not rows:
    raise ValueError('No items; inspect source before treating this as valid empty data')
(folder / 'records.json').write_text(json.dumps(rows, ensure_ascii=False, indent=2))
with (folder / 'records.csv').open('w', newline='', encoding='utf-8') as out:
    writer = csv.DictWriter(out, fieldnames=list(rows[0]))
    writer.writeheader()
    writer.writerows(rows)
print(json.dumps({'source': response.url, 'items_saved': len(rows),
                  'source_sha256': hashlib.sha256(response.content).hexdigest()}))

Việc chạy nguồn cấp công khai đã lưu năm mục thực tế và hash nguồn gốc của chúng. Các chủ đề thay đổi, vì vậy bài viết không đóng băng các tên thành một mẫu đầu ra phổ quát giả định. Các trường bản ghi là title, link, published, traffic_bucket, geo và observed_at.

Không gian tên ht xác định trường lưu lượng tùy chọn của nguồn cấp. Giữ giá trị của nó như văn bản được trả về, bao gồm bất kỳ ký hiệu ngưỡng nào. Một nhãn lưu lượng bị thiếu là một trường bị thiếu, không phải là ước tính tìm kiếm bằng không. Trình viết CSV tuân theo các quy tắc trích dẫn và bản ghi được mô tả bởi định dạng trao đổi CSV, vì vậy các tiêu đề chủ đề chứa dấu câu vẫn được giữ nguyên.

Một bảng lưu trữ Trends nên giữ bề mặt thu thập cũng như dữ liệu. Đưa các chủ đề RSS và các điểm chuỗi quan tâm tên chỉ số riêng biệt và các quy tắc chấp nhận riêng biệt.

Đối với một chuỗi quan tâm, giữ nguyên các tham số yêu cầu đầy đủ với kết quả thô. Một khi đầu ra đã xác thực đã được kiểm tra, thêm một bộ điều hợp sơ đồ kiểm tra các loại điểm, nhãn truy vấn và khoảng thời gian đã báo cáo. Không chuyển đổi một chuỗi bị thiếu thành một biểu đồ thành công rỗng chỉ vì giao dịch HTTP hoặc MCP đã hoàn tất.

Đối với RSS, giữ nguyên các byte nguồn cấp gốc, địa lý nguồn cấp và thư mục quan sát. Văn bản xuất bản được cung cấp từ nguồn; thời gian quan sát là khi khách hàng của bạn thu thập nó. Đây là những đồng hồ khác nhau. Hash nguồn kết nối từng xuất khẩu với nguồn cấp từ đó nó được lấy ra, một cách sử dụng thực tế của mối quan hệ nguồn gốc.

Bảng điều khiển nên hiển thị khoảng thời gian đã chọn bên cạnh biểu đồ. Xuất khoảng thời gian đó với các điểm thay vì chỉ giữ nó trong bộ lọc UI. Nếu không, người nhận bảng tính có thể diễn giải một đỉnh được chuẩn hóa như là một thống kê khối lượng mà dữ liệu không bao giờ cung cấp.

Những sai lầm phổ biến trong việc diễn giải

Một bộ sưu tập thành công vẫn có thể sản xuất một phân tích không chính xác nếu chỉ số bị gán nhãn sai. Các kiểm tra sau đây thuộc về điểm mà dữ liệu đã thu thập trở thành một báo cáo.

Sai lầm Xử lý đúng
Đối xử với quan tâm 100 như 100 tìm kiếm Gán nhãn trường là quan tâm đã được chuẩn hóa
So sánh các khoảng thời gian ngày được quy mô độc lập Giữ cho các yêu cầu thống nhất hoặc tiết lộ cơ sở khác nhau
Đối phó với một thùng lưu lượng RSS như một số đếm chính xác Bảo tồn văn bản ngưỡng gốc
Chuyển các giá trị bị thiếu thành không Bảo tồn ngữ nghĩa trạng thái bị thiếu và kiểm tra nguồn
Trộn lẫn yêu cầu trên toàn cầu và quốc gia Nhóm bản ghi theo địa lý rõ ràng
Gọi tìm kiếm chung cho lịch sử Trends Sử dụng hợp đồng Trends dành riêng

Kết luận: lưu câu hỏi với chỉ số

Google Trends với Python hữu ích nhất khi con đường thu thập phù hợp với câu hỏi được đặt ra. Sở thích lịch sử thuộc về một hợp đồng cụ thể theo Trends; việc thu thập chủ đề hiện tại có một đường dẫn RSS công cộng đơn giản.

Bắt đầu với việc xuất RSS để thiết lập xử lý bằng chứng, sau đó kiểm tra kết quả sở thích xác thực đầu tiên trước khi xây dựng bộ điều hợp của nó. Giữ lại địa lý, khoảng thời gian và danh tính chỉ số gắn liền với mọi biểu đồ hạ nguồn.


Sẵn sàng xây dựng đường ống dữ liệu AI của bạn?

Tham gia cộng đồng của chúng tôi để nhận kế hoạch miễn phí và kết nối với các nhà phát triển xây dựng đường ống dữ liệu web: Discord · Telegram.

Đăng ký tại app.scrapeless.com để nhận thời gian chạy Trình Duyệt Lập trình Scraping miễn phí và điều chỉnh các mẫu ở trên cho quy trình dữ liệu công cộng của riêng bạn.


Câu hỏi thường gặp

Q: Google Trends có báo cáo chính xác số lượng tìm kiếm không?

Không. Các giá trị sở thích của Google Trends là các đo lường chuẩn hóa của sở thích tương đối. Chúng không thể được chuyển đổi thành số lượng tìm kiếm chính xác chỉ từ chỉ số.

Q: Python có thể thu thập Trending Now mà không cần khóa API không?

Có. Ví dụ RSS công cộng thu thập các chủ đề hiện tại bằng Requests và các bộ phân tích thư viện chuẩn. Nó không thu hồi một chuỗi sở thích lịch sử theo thời gian.

Q: Google Search API có giống như công cụ Trends không?

Không. Việc thu thập kết quả tìm kiếm và thu thập Google Trends có các tham số yêu cầu và ý nghĩa đầu ra khác nhau. Sử dụng google_trends cho quy trình làm việc đặc thù của Trends được trình bày ở đây.

Q: Có hợp pháp để thu thập dữ liệu Google Trends công cộng không?

Phạm vi chấp nhận phụ thuộc vào các điều khoản, điều kiện truy cập, quyền sử dụng và quyền tài phán. Xem xét các ràng buộc đó cho việc thu thập và tái sử dụng dự kiến; một nguồn cấp công cộng không phải là quyền cho mọi ứng dụng.

Q: Quy trình RSS có cần proxy hoặc trình duyệt không?

Không có proxy hoặc trình duyệt nào được sử dụng bởi ví dụ RSS này. Nếu phản hồi không phải là tài liệu RSS như mong đợi, hãy dừng xuất và kiểm tra phản hồi đã được ghi lại thay vì chấp nhận một trang thách thức như dữ liệu chủ đề.

Q: Các giá trị Trends có thể khác nhau giữa các bộ sưu tập không?

Có. Việc lấy mẫu, diễn giải truy vấn, địa lý và các lựa chọn khoảng thời gian ảnh hưởng đến chuỗi. Ghi lại những lựa chọn đó để một sự khác biệt có thể được điều tra thay vì tự động coi đó là sự thay đổi yêu cầu.

Q: Quy trình này có thể chạy mà không cần tác nhân AI không?

Có. Cả khách hàng MCP Python trực tiếp và bộ phân tích RSS đều là các kịch bản thông thường. Một tác nhân AI là tùy chọn; nó không cung cấp thông tin xác thực API bị thiếu hoặc thay thế việc xác thực chỉ số.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục