Tóm tắt
Scrapling cung cấp khả năng bỏ qua chống bot mạnh mẽ thông qua chế độ StealthyFetcher và DynamicFetcher. Sử dụng StealthyFetcher cho các trang web được bảo vệ bởi Cloudflare (tự động giải Turnstile, ngẫu nhiên hóa dấu vân tay canvas, chặn WebRTC) hoặc DynamicFetcher cho các triển khai chống bot nặng JavaScript. Tích hợp với OpenClaw để kiểm soát tất cả các hoạt động thu thập dữ liệu thông qua các lệnh ngôn ngữ tự nhiên.
Giới thiệu
Bạn truy cập một trang web để thu thập dữ liệu. Trang tải. Rồi bạn thấy: "Truy cập bị từ chối" hoặc một thử thách CAPTCHA. Trang web đã phát hiện trình thu thập dữ liệu của bạn và chặn quyền truy cập. Kịch bản này diễn ra liên tục đối với các nhà phát triển, nhà khoa học dữ liệu và nhà nghiên cứu cần dữ liệu web cho các dự án hợp pháp.
Điều này xảy ra vì các trang web ngày càng triển khai các hệ thống chống bot tinh vi. Cloudflare, PerimeterX, Akamai và các dịch vụ tương tự phân tích dấu vân tay trình duyệt, mẫu hành vi và đặc điểm yêu cầu để xác định quyền truy cập tự động. Các trình thu thập dữ liệu truyền thống thất bại ngay lập tức trước các biện pháp bảo vệ này.
Ngành công nghiệp phát hiện bot đã phát triển thành một thị trường trị giá hàng tỷ đô la. Các công ty đầu tư mạnh vào việc bảo vệ tài sản kỹ thuật số của họ khỏi quyền truy cập tự động. Chỉ riêng Cloudflare đã báo cáo chặn hàng tỷ yêu cầu bot mỗi ngày. Điều này tạo ra những thách thức đáng kể cho việc thu thập dữ liệu hợp pháp, dù là để nghiên cứu thị trường, phân tích đối thủ cạnh tranh, giám sát giá hay nghiên cứu học thuật.
Scrapling giải quyết vấn đề này. Thư viện bao gồm nhiều chế độ chống phát hiện được thiết kế đặc biệt để bỏ qua các biện pháp bảo vệ này. Kết hợp với giao diện ngôn ngữ tự nhiên của OpenClaw, bạn có thể hướng dẫn trợ lý AI của mình bỏ qua các kiểm tra chống bot mà không cần viết mã phức tạp.
Tìm hiểu về phát hiện chống bot
Trước khi bỏ qua phát hiện, bạn cần hiểu cách nó hoạt động. Các hệ thống chống bot phân tích một số yếu tố:
Dấu vân tay trình duyệt: Các trang web thu thập thông tin về trình duyệt của bạn, bao gồm độ phân giải màn hình, phông chữ đã cài đặt, trình kết xuất WebGL, đầu ra canvas và hàng trăm tín hiệu khác. Các công cụ tự động thường tự tiết lộ thông qua các dấu vân tay nhất quán khác với trình duyệt thực.
Phân tích hành vi: Người dùng di chuyển chuột khó đoán, cuộn ở các tốc độ khác nhau và gõ với thời gian tự nhiên. Các bot thường thể hiện các mẫu máy móc: tải trang tức thì, tốc độ cuộn đồng nhất, thời gian hoàn hảo giữa các hành động.
Phân tích yêu cầu: Mỗi yêu cầu HTTP bao gồm tiêu đề, dấu vân tay TLS và mẫu kết nối. Các thư viện HTTP tiêu chuẩn như `requests` tạo ra các yêu cầu trông rõ ràng là tự động so với lưu lượng truy cập trình duyệt thực.
Thử thách JavaScript: Các trang web hiện đại thực thi JavaScript để thu thập thông tin trình duyệt. Ví dụ, Turnstile của Cloudflare chạy các kiểm tra ẩn để xác minh tính toàn vẹn của trình duyệt trước khi hiển thị nội dung.
Uy tín IP: Địa chỉ IP bị gắn cờ dựa trên nhà cung cấp dịch vụ lưu trữ, lịch sử hoạt động đáng ngờ và vị trí địa lý. IP trung tâm dữ liệu gây nghi ngờ ngay lập tức.
Scrapling giải quyết từng vector phát hiện này thông qua các trình tìm nạp chuyên dụng của nó.
Khả năng chống bot của Scrapling
Scrapling cung cấp hai trình tìm nạp chính để bỏ qua các hệ thống chống bot:

StealthyFetcher xử lý hầu hết các biện pháp bảo vệ của Cloudflare và các biện pháp tương tự. Nó sử dụng Chrome không giao diện người dùng với các kỹ thuật né tránh tích hợp tự động vá các vector phát hiện phổ biến.
DynamicFetcher cung cấp tự động hóa trình duyệt đầy đủ thông qua Playwright. Sử dụng nó khi StealthyFetcher thất bại hoặc khi trang web sử dụng phát hiện dựa trên JavaScript nâng cao.
Đây là cách chọn:
| Tình huống | Trình tìm nạp được đề xuất |
|---|---|
| Bảo vệ của Cloudflare | StealthyFetcher |
| CAPTCHA Turnstile | StealthyFetcher |
| Phát hiện bot cơ bản | StealthyFetcher |
| Thử thách JavaScript phức tạp | DynamicFetcher |
| Cuộn vô hạn với chống bot | DynamicFetcher |
| Giải pháp chống bot tùy chỉnh | DynamicFetcher |
Đi sâu vào StealthyFetcher
StealthyFetcher là công cụ chính của Scrapling để bỏ qua các hệ thống chống bot. Nó tự động xử lý hầu hết các cơ chế bảo vệ phổ biến.
Cách sử dụng cơ bản
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
page = fetcher.get('https://protected-site.com')
print(page.text)
Trình tìm nạp tự động cố gắng bỏ qua các biện pháp bảo vệ của Cloudflare, PerimeterX và các biện pháp tương tự.
Bỏ qua Cloudflare Turnstile
Cloudflare Turnstile là một trong những thử thách chống bot phổ biến nhất. StealthyFetcher tự động giải quyết nó:
page = StealthyFetcher.fetch(
'https://cloudflare-protected-site.com',
solve_cloudflare=True
)
Tham số solve_cloudflare=True kích hoạt tự động giải quyết thử thách. Điều này hoạt động cho cả thử thách chuyển tiếp (trang "Đang kiểm tra trình duyệt của bạn trước khi truy cập") và các tiện ích Turnstile.
Ngẫu nhiên hóa dấu vân tay Canvas
Dấu vân tay canvas tạo ra các mã định danh duy nhất dựa trên cách trình duyệt của bạn kết xuất đồ họa. StealthyFetcher thêm nhiễu ngẫu nhiên vào các hoạt động canvas:
page = StealthyFetcher.fetch(
'https://site.com',
hide_canvas=True
)
Mỗi yêu cầu tạo ra đầu ra canvas khác nhau, làm cho việc theo dõi dấu vân tay không hiệu quả.
Ngăn chặn rò rỉ WebRTC
WebRTC có thể tiết lộ địa chỉ IP thực của bạn ngay cả khi sử dụng proxy. StealthyFetcher chặn các yêu cầu WebRTC:
page = StealthyFetcher.fetch(
'https://site.com',
block_webrtc=True
)
Điều này ngăn chặn rò rỉ IP cục bộ có thể tiết lộ danh tính hoặc vị trí của bạn.
Giả mạo Referer của Google Search
Nhiều trang web cho phép truy cập khi họ nghĩ rằng lưu lượng truy cập đến từ tìm kiếm của Google. StealthyFetcher giả mạo referer này:
page = StealthyFetcher.fetch(
'https://site.com',
google_search=True
)
Điều này làm cho yêu cầu xuất hiện như đến từ trang kết quả tìm kiếm của Google.
Sử dụng Chrome đã cài đặt
Để né tránh tối đa, hãy sử dụng trình duyệt Chrome đã cài đặt của bạn thay vì Chromium của Playwright:
page = StealthyFetcher.fetch(
'https://site.com',
real_chrome=True
)
Điều này sử dụng cài đặt Chrome thực tế của bạn, có dấu vân tay trình duyệt hợp lệ.
Giả mạo địa lý
Ghép yêu cầu của bạn với một vị trí cụ thể:
page = StealthyFetcher.fetch(
'https://site.com',
locale='en-US',
timezone_id='America/New_York'
)
Điều này đặt cài đặt múi giờ và ngôn ngữ trình duyệt để khớp với vị trí mong muốn của bạn.
DynamicFetcher để bảo vệ nâng cao
Một số trang web sử dụng các hệ thống chống bot tinh vi mà StealthyFetcher không thể bỏ qua. DynamicFetcher cung cấp tự động hóa trình duyệt đầy đủ với Playwright:
from scrapling.fetchers import DynamicFetcher
fetcher = DynamicFetcher()
page = fetcher.get('https://highly-protected-site.com')
print(page.text)
Xử lý cuộn vô hạn
Các trang web có cuộn vô hạn và bảo vệ chống bot yêu cầu tự động hóa trình duyệt:
from scrapling.fetchers import DynamicFetcher
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
fetcher = DynamicFetcher(playwright=p)
page = fetcher.get('https://site.com/infinite-scroll')
# Wait for content to load
page.wait_for_selector('.content-item')
# Scroll to load more
for _ in range(5):
page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
page.wait_for_timeout(1000)
Chờ thực thi JavaScript
Một số nội dung tải thông qua JavaScript sau khi tải trang ban đầu:
page = DynamicFetcher.get('https://site.com')
page.wait_for_load_state('networkidle')
content = page.content()
Điều này đảm bảo tất cả JavaScript đã được thực thi trước khi trích xuất nội dung.
Xử lý CAPTCHA thủ công
Đối với các CAPTCHA không thể giải quyết tự động:
page = DynamicFetcher.get('https://site.com')
# Check if CAPTCHA is present
if page.is_visible('.captcha-container'):
# Take screenshot for manual solving
page.screenshot(path='captcha.png')
# After manual solve, continue
page.click('.captcha-submit')
Bạn có thể tạm dừng để can thiệp thủ công, tự giải CAPTCHA và tiếp tục thu thập dữ liệu.
Sử dụng với OpenClaw
OpenClaw cho phép bạn kiểm soát khả năng chống bot của Scrapling thông qua ngôn ngữ tự nhiên (nếu bạn muốn kiểm tra cách thiết lập Scrapling bên trong OpenClaw, hãy xem bài đăng này):
Bỏ qua Cloudflare trên một trang web:
"Lấy dữ liệu sản phẩm từ https://shop.example.com, trang web này có bảo vệ của Cloudflare"
OpenClaw tự động sử dụng StealthyFetcher với `solve_cloudflare` được bật.
Xử lý một trang web có bảo vệ nâng cao:
"Thu thập danh sách việc làm từ https://careers.example.com, sử dụng chế độ trình duyệt không giao diện người dùng vì họ có bảo vệ chống bot mạnh"
OpenClaw chuyển sang DynamicFetcher để tự động hóa trình duyệt đầy đủ.
Sử dụng xoay vòng proxy:
"Trích xuất dữ liệu từ 100 URL này, xoay vòng qua các proxy này: proxy1.com:8080, proxy2.com:8080, proxy3.com:8080"
OpenClaw phân phối các yêu cầu trên nhiều proxy.
Giả mạo vị trí địa lý:
"Lấy dữ liệu giá từ https://site.com, sử dụng cài đặt Bờ Đông Hoa Kỳ"
OpenClaw cấu hình múi giờ và ngôn ngữ địa phương để khớp.
Giải thích các kỹ thuật chống bot
Hiểu các kỹ thuật cơ bản giúp bạn chọn cách tiếp cận đúng đắn:
Giả mạo dấu vân tay TLS
Khi trình duyệt của bạn kết nối với một trang web, nó thực hiện một bắt tay TLS. Thông báo ClientHello bao gồm các đặc điểm nhận dạng thư viện client của bạn. Các yêu cầu Python tiêu chuẩn có dấu vân tay đặc biệt mà các hệ thống chống bot nhận ra.
Scrapling giả mạo dấu vân tay TLS để xuất hiện như các trình duyệt hợp lệ. Điều này xảy ra tự động với StealthyFetcher và DynamicFetcher.
Xoay vòng User-Agent
Gửi yêu cầu với cùng một chuỗi User-Agent sẽ kích hoạt phát hiện. Scrapling tự động xoay vòng User-Agent:
# User-Agent được tự động xoay vòng
page = StealthyFetcher.get('https://site.com')
Mỗi yêu cầu xuất hiện như đến từ một phiên bản trình duyệt khác nhau.
Giả mạo tiêu đề
Các trình duyệt thực gửi các tiêu đề cụ thể theo thứ tự cụ thể. Scrapling đảm bảo các tiêu đề khớp với hành vi trình duyệt hợp lệ một cách tự động.
Ngẫu nhiên hóa Canvas
Khi một trang web yêu cầu trình duyệt của bạn vẽ một cái gì đó, các pixel chính xác sẽ tiết lộ trình duyệt và GPU của bạn. Scrapling thêm nhiễu không thể nhận thấy vào các hoạt động canvas, làm cho mỗi dấu vân tay là duy nhất.
Độ phân giải màn hình và kích thước cửa sổ
Các trình duyệt không giao diện người dùng thường báo cáo kích thước màn hình mặc định. Scrapling ngẫu nhiên hóa kích thước khung nhìn để khớp với màn hình người dùng thực.
Mô phỏng chuyển động chuột
DynamicFetcher có thể mô phỏng chuyển động chuột giống con người:
page.mouse.move_to_element('.button')
page.mouse.move_by_offset(50, 20)
page.click('.submit')
Điều này bổ sung các mẫu chuyển động chân thực vượt qua phân tích hành vi.
Tích hợp Proxy
Sử dụng proxy giúp tránh chặn dựa trên IP và cho phép thu thập dữ liệu theo địa lý:
Cách sử dụng Proxy cơ bản
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
page = fetcher.get(
'https://site.com',
proxy='http://username:password@proxy.example.com:8080'
)
Xoay vòng Proxy
Đối với thu thập dữ liệu quy mô lớn, xoay vòng qua nhiều proxy:
import random
from scrapling.fetchers import StealthyFetcher
proxies = [
'http://proxy1.com:8080',
'http://proxy2.com:8080',
'http://proxy3.com:8080'
]
fetcher = StealthyFetcher()
for url in urls:
proxy = random.choice(proxies)
page = fetcher.get(url, proxy=proxy)
# Xử lý trang
Proxy dân cư
Proxy dân cư sử dụng địa chỉ IP từ các nhà cung cấp dịch vụ internet thực. Chúng khó phát hiện hơn so với IP trung tâm dữ liệu:
page = StealthyFetcher.get(
'https://site.com',
proxy='http://residential-proxy-provider:port'
)
Proxy dân cư tốn kém hơn nhưng mang lại tỷ lệ thành công cao hơn đáng kể trên các trang web được bảo vệ.
Các kịch bản chống bot phổ biến
Bảo vệ của Cloudflare
Cloudflare là giải pháp chống bot phổ biến nhất. Hầu hết các trang web hoạt động với StealthyFetcher cơ bản:
page = StealthyFetcher.fetch('https://cloudflare-site.com', solve_cloudflare=True)
Nếu Cloudflare hiển thị trang thử thách, trình tìm nạp sẽ tự động giải quyết nó và thử lại.
PerimeterX (nay là Ownl)
PerimeterX (nay là một phần của Ownl) sử dụng phân tích hành vi:
# Sử dụng DynamicFetcher cho PerimeterX
page = DynamicFetcher.get('https://perimeterx-site.com')
Tự động hóa trình duyệt đầy đủ xử lý các thử thách hành vi tốt hơn.
Akamai
Akamai cung cấp quản lý bot cấp doanh nghiệp:
# Akamai thường yêu cầu proxy dân cư
page = StealthyFetcher.get(
'https://akamai-protected.com',
proxy='http://residential-proxy:port',
solve_cloudflare=True
)
Các trang web được bảo vệ bởi Akamai thường yêu cầu kết hợp nhiều kỹ thuật né tránh.
Giải pháp chống bot tùy chỉnh
Một số trang web xây dựng hệ thống phát hiện riêng của họ:
# Sử dụng cài đặt ẩn tối đa
page = StealthyFetcher.fetch(
'https://custom-protected.com',
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
google_search=True,
real_chrome=True
)
Nếu điều này thất bại, hãy chuyển sang DynamicFetcher với tự động hóa trình duyệt đầy đủ.
Các phương pháp hay nhất
Bắt đầu đơn giản
Bắt đầu với StealthyFetcher cơ bản. Chỉ thêm phức tạp nếu bạn gặp chặn:
# Thử cơ bản trước
page = StealthyFetcher.get('https://site.com')
# Thêm né tránh nếu cần
if 'blocked' in page.text.lower():
page = StealthyFetcher.fetch('https://site.com', solve_cloudflare=True)
Tôn trọng giới hạn tỷ lệ
Ngay cả với khả năng chống bot, gửi quá nhiều yêu cầu sẽ kích hoạt bảo vệ:
import time
for url in urls:
page = StealthyFetcher.get(url)
time.sleep(2) # Chờ giữa các yêu cầu
Sử dụng Proxy dân cư cho sản xuất
Proxy miễn phí hoặc giá rẻ thường có danh tiếng kém. Đầu tư vào proxy dân cư chất lượng để thu thập dữ liệu đáng tin cậy:
# Proxy dân cư chất lượng
page = StealthyFetcher.get(
'https://site.com',
proxy='http://premium-residential-proxy:port'
)
Kiểm tra robots.txt
Luôn kiểm tra xem trang web có cho phép thu thập dữ liệu không:
# Kiểm tra robots.txt trước khi thu thập dữ liệu
from urllib.parse import urlparse
domain = urlparse('https://site.com').netloc
robots_url = f'https://{domain}/robots.txt'
Xử lý lỗi một cách duyên dáng
Xây dựng xử lý lỗi vào trình thu thập dữ liệu của bạn:
from scrapling.fetchers import StealthyFetcher
fetcher = StealthyFetcher()
try:
page = fetcher.get('https://site.com')
except Exception as e:
print(f'Lỗi: {e}')
# Quay lại DynamicFetcher
from scrapling.fetchers import DynamicFetcher
fetcher = DynamicFetcher()
page = fetcher.get('https://site.com')
Khắc phục sự cố
Vẫn bị chặn
Nếu bạn gặp chặn mặc dù đã sử dụng StealthyFetcher:
- Bật tất cả các tùy chọn né tránh:
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
block_webrtc=True,
hide_canvas=True,
google_search=True,
real_chrome=True
)
- Chuyển sang DynamicFetcher:
from scrapling.fetchers import DynamicFetcher
page = DynamicFetcher.get('https://site.com')
- Thêm xoay vòng proxy:
page = StealthyFetcher.get(
'https://site.com',
proxy='http://residential-proxy:port'
)
Vòng lặp thử thách Cloudflare
Đôi khi StealthyFetcher bị kẹt trong vòng lặp thử thách:
- Tăng thời gian chờ:
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
timeout=120
)
- Sử dụng Chrome thật:
page = StealthyFetcher.fetch(
'https://site.com',
solve_cloudflare=True,
real_chrome=True
)
CAPTCHA không giải được
Một số CAPTCHA yêu cầu can thiệp thủ công:
page = DynamicFetcher.get('https://site.com')
if page.is_visible('[class*="captcha"]'):
page.screenshot(path='manual_captcha.png')
# Giải thủ công, sau đó tiếp tục
input('Nhấn Enter sau khi giải CAPTCHA...')
page.click('.submit-button')
Hiệu suất chậm
Né tránh chống bot làm tăng chi phí. Để thu thập dữ liệu nhanh hơn:
- Sử dụng StealthyFetcher thay vì DynamicFetcher khi có thể
- Thêm gộp kết nối
- Sử dụng proxy nhanh hơn
- Giảm các tùy chọn né tránh không cần thiết
Kết luận
Bỏ qua các kiểm tra chống bot yêu cầu hiểu cách phát hiện hoạt động và sử dụng các công cụ phù hợp cho từng tình huống. Scrapling cung cấp các giải pháp toàn diện thông qua StealthyFetcher cho hầu hết các hệ thống bảo vệ và DynamicFetcher cho các kịch bản nâng cao.
Những điểm chính cần nhớ:
- Sử dụng StealthyFetcher cho Cloudflare, Turnstile và bảo vệ bot cơ bản
- Bật `solve_cloudflare=True` để tự động giải quyết thử thách
- Chuyển sang DynamicFetcher khi StealthyFetcher thất bại
- Thêm xoay vòng proxy cho thu thập dữ liệu quy mô lớn
- Kết hợp nhiều kỹ thuật né tránh cho các trang web cứng đầu
Với tích hợp OpenClaw, bạn kiểm soát tất cả các khả năng này thông qua ngôn ngữ tự nhiên. Yêu cầu trợ lý AI của bạn những gì bạn cần, và nó sẽ tự động chọn cách tiếp cận chống bot phù hợp. Khi bạn đã thu thập dữ liệu, bạn có thể sử dụng Apidog để kiểm tra và xác thực API, tạo bộ kiểm thử tự động và tạo tài liệu cho các điểm cuối bạn khám phá.
Câu hỏi thường gặp
Sự khác biệt giữa StealthyFetcher và DynamicFetcher là gì?
StealthyFetcher sử dụng Chrome không giao diện người dùng đã được sửa đổi với các bản vá né tránh tích hợp sẵn. DynamicFetcher sử dụng tự động hóa Playwright đầy đủ. StealthyFetcher nhanh hơn nhưng có thể thất bại trước các phát hiện nâng cao. DynamicFetcher đáng tin cậy hơn nhưng chậm hơn.
Scrapling có hoạt động chống lại tất cả các hệ thống chống bot không?
Không có giải pháp chống bot nào hoạt động 100% thời gian. Scrapling xử lý hầu hết các hệ thống phổ biến (Cloudflare, PerimeterX, Akamai) một cách đáng tin cậy. Các giải pháp tùy chỉnh hoặc cấp doanh nghiệp có thể yêu cầu các kỹ thuật bổ sung hoặc can thiệp thủ công.
Bỏ qua chống bot có hợp pháp không?
Luật pháp khác nhau tùy theo khu vực tài phán và phụ thuộc vào điều khoản dịch vụ của trang web. Nói chung, thu thập dữ liệu công khai là chấp nhận được. Bỏ qua xác thực hoặc truy cập dữ liệu riêng tư mà không được phép là vi phạm pháp luật.
Tại sao việc thu thập dữ liệu của tôi vẫn bị chặn?
Kiểm tra các vấn đề phổ biến này: uy tín IP (sử dụng proxy dân cư), giới hạn tỷ lệ (thêm độ trễ), né tránh không đủ (bật nhiều tùy chọn hơn), hoặc thử thách JavaScript (sử dụng DynamicFetcher).
Tôi xử lý CAPTCHA như thế nào?
StealthyFetcher tự động giải Cloudflare Turnstile. Đối với các CAPTCHA khác, sử dụng DynamicFetcher và tạm dừng để giải thủ công, hoặc tích hợp các dịch vụ giải CAPTCHA của bên thứ ba.
Tôi có thể sử dụng trình duyệt Chrome của riêng mình không?
Có. Đặt real_chrome=True trong StealthyFetcher để sử dụng Chrome đã cài đặt của bạn thay vì Chromium của Playwright. Điều này cung cấp dấu vân tay trình duyệt hợp lệ hơn.
Tôi có cần proxy không?
Đối với thu thập dữ liệu quy mô nhỏ, không. Đối với hoạt động sản xuất hoặc quy mô lớn, proxy dân cư cải thiện đáng kể tỷ lệ thành công bằng cách tránh chặn dựa trên IP.
Tôi xoay vòng User-Agents như thế nào?
StealthyFetcher tự động xoay vòng User-Agents. Để kiểm soát thủ công:
fetcher = StealthyFetcher(headers={'User-Agent': 'User-Agent Tùy chỉnh Của Bạn'})
Tỷ lệ thành công chống lại Cloudflare là bao nhiêu?
Với cấu hình phù hợp, tỷ lệ thành công vượt quá 90% đối với hầu hết các trang web được bảo vệ bởi Cloudflare. Các thử thách Turnstile được giải quyết tự động.
Tôi có thể thu thập dữ liệu từ nhiều vị trí địa lý không?
Có. Sử dụng các tham số timezone_id và locale:
page = StealthyFetcher.fetch(
'https://site.com',
timezone_id='Europe/London',
locale='en-GB'
)
