
Anh Tuan
Data Science Expert

aiohttp là một framework HTTP client/server bất đồng bộ mạnh mẽ cho Python. Nó tận dụng thư viện asyncio của Python để cho phép các hoạt động mạng đồng thời, làm cho nó rất hiệu quả đối với các tác vụ như thu thập dữ liệu web, phát triển web và bất kỳ hoạt động nào liên quan đến mạng.
Tính năng:
asyncio để thực hiện các hoạt động mạng không chặn.Trước khi bạn bắt đầu sử dụng aiohttp, hãy đảm bảo bạn có:
Cài đặt aiohttp bằng pip:
pip install aiohttp
Đây là cách thực hiện một yêu cầu GET đơn giản bằng aiohttp:
import asyncio
import aiohttp
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
status = response.status
text = await response.text()
print(f'Mã trạng thái: {status}')
print('Nội dung phản hồi:', text)
if __name__ == '__main__':
asyncio.run(fetch('https://httpbin.org/get'))
Hãy thu thập dữ liệu từ trang web Quotes to Scrape để trích xuất các câu nói và tác giả của chúng:
import asyncio
import aiohttp
from bs4 import BeautifulSoup
async def fetch_content(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def scrape_quotes():
url = 'http://quotes.toscrape.com/'
html = await fetch_content(url)
soup = BeautifulSoup(html, 'html.parser')
quotes = soup.find_all('div', class_='quote')
for quote in quotes:
text = quote.find('span', class_='text').get_text(strip=True)
author = quote.find('small', class_='author').get_text(strip=True)
print(f'{text} — {author}')
if __name__ == '__main__':
asyncio.run(scrape_quotes())
Kết quả:
“Thế giới mà chúng ta đã tạo ra là một quá trình tư duy của chúng ta. Nó không thể thay đổi nếu không thay đổi tư duy của chúng ta.” — Albert Einstein
“Đó là những lựa chọn của chúng ta, Harry, điều đó cho thấy chúng ta thực sự là ai, hơn nhiều so với khả năng của chúng ta.” — J.K. Rowling
... (các câu nói khác)
Trong phần này, chúng ta sẽ tìm hiểu cách tích hợp CapSolver với aiohttp để bỏ qua captcha. CapSolver là một dịch vụ bên ngoài giúp giải quyết nhiều loại captcha, bao gồm ReCaptcha v2, v3
Chúng ta sẽ trình bày cách giải quyết ReCaptcha V2 bằng CapSolver và sau đó truy cập vào một trang yêu cầu giải quyết captcha.
Đầu tiên, cài đặt gói CapSolver:
pip install capsolver
Bây giờ, đây là cách bạn có thể giải quyết ReCaptcha V2 và sử dụng giải pháp trong yêu cầu của mình:
import asyncio
import os
import aiohttp
import capsolver
# Thiết lập khóa API CapSolver của bạn
capsolver.api_key = os.getenv("CAPSOLVER_API_KEY", "Khóa API CapSolver của bạn")
PAGE_URL = os.getenv("PAGE_URL", "https://example.com") # URL trang có captcha
SITE_KEY = os.getenv("SITE_KEY", "SITE_KEY") # Khóa trang web Captcha
async def solve_recaptcha_v2():
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": PAGE_URL,
"websiteKey": SITE_KEY
})
return solution['solution']['gRecaptchaResponse']
async def access_protected_page():
captcha_response = await solve_recaptcha_v2()
print("Captcha đã được giải quyết!")
async with aiohttp.ClientSession() as session:
data = {
'g-recaptcha-response': captcha_response,
# Bao gồm dữ liệu biểu mẫu khác nếu trang web yêu cầu
}
async with session.post(PAGE_URL, data=data) as response:
content = await response.text()
print('Nội dung trang:', content)
if __name__ == '__main__':
asyncio.run(access_protected_page())
Lưu ý: Thay thế PAGE_URL bằng URL của trang chứa captcha và SITE_KEY bằng khóa trang web của captcha. Khóa trang web thường được tìm thấy trong mã nguồn HTML của trang trong widget captcha.
Để định tuyến các yêu cầu của bạn thông qua proxy, hãy chỉ định tham số proxy:
import asyncio
import aiohttp
async def fetch(url, proxy):
async with aiohttp.ClientSession() as session:
async with session.get(url, proxy=proxy) as response:
return await response.text()
async def main():
proxy = 'http://username:password@proxyserver:port'
url = 'https://httpbin.org/ip'
content = await fetch(url, proxy)
print('Nội dung phản hồi:', content)
if __name__ == '__main__':
asyncio.run(main())
Bạn có thể quản lý cookie bằng CookieJar:
import asyncio
import aiohttp
async def main():
jar = aiohttp.CookieJar()
async with aiohttp.ClientSession(cookie_jar=jar) as session:
await session.get('https://httpbin.org/cookies/set?name=value')
# Hiển thị cookie
for cookie in jar:
print(f'{cookie.key}: {cookie.value}')
if __name__ == '__main__':
asyncio.run(main())
Bạn có thể gửi tiêu đề tùy chỉnh và thực hiện yêu cầu POST với aiohttp:
import asyncio
import aiohttp
async def main():
headers = {
'User-Agent': 'Mozilla/5.0 (compatible)',
'Accept-Language': 'en-US,en;q=0.5',
}
data = {
'username': 'testuser',
'password': 'testpass',
}
async with aiohttp.ClientSession() as session:
async with session.post('https://httpbin.org/post', headers=headers, data=data) as response:
json_response = await response.json()
print('JSON phản hồi:', json_response)
if __name__ == '__main__':
asyncio.run(main())
Nhận mã thưởng của bạn cho các giải pháp captcha hàng đầu tại CapSolver: scrape. Sau khi đổi, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, không giới hạn lần.

Với aiohttp, bạn có thể thực hiện hiệu quả các tác vụ thu thập dữ liệu web bất đồng bộ và xử lý nhiều hoạt động mạng cùng một lúc. Tích hợp nó với CapSolver cho phép bạn giải quyết các captcha như ReCaptcha V2, cho phép truy cập vào nội dung có thể bị hạn chế.
Cảm thấy tự do để mở rộng các ví dụ này cho phù hợp với nhu cầu cụ thể của bạn. Luôn nhớ tôn trọng các điều khoản dịch vụ của các trang web bạn thu thập dữ liệu và tuân thủ các hướng dẫn pháp lý.
Chúc bạn thu thập dữ liệu vui vẻ!
Hãy học cách xác định nguyên nhân gây ra lỗi Cloudflare 1020 Truy cập Bị Từ Chối, cách Tường lửa Ứng dụng Web và phát hiện bot hoạt động, và cách các nhà phát triển giảm thiểu kết quả dương tính giả trong các quy trình tự động hợp lệ.

Học cách sử dụng mẫu CapSolver n8n để theo dõi các trang sản phẩm được bảo vệ bởi AWS WAF, giải quyết các thách thức, trích xuất giá cả, so sánh các thay đổi và kích hoạt cảnh báo tự động.
