Cách sử dụng aiohttp để Scrape Web

Anh Tuan
Data Science Expert
23-Sep-2024
aiohttp là gì?

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:
- I/O bất đồng bộ: Được xây dựng trên
asyncio
để thực hiện các hoạt động mạng không chặn. - Hỗ trợ Client và Server: Cung cấp cả triển khai HTTP client và server.
- Hỗ trợ WebSockets: Hỗ trợ tích hợp các giao thức WebSockets.
- Hiệu suất cao: Xử lý hiệu quả nhiều kết nối cùng một lúc.
- Khả năng mở rộng: Hỗ trợ middleware, tín hiệu và plugin để tùy chỉnh nâng cao.
Điều kiện tiên quyết
Trước khi bạn bắt đầu sử dụng aiohttp
, hãy đảm bảo bạn có:
- Python 3.7 trở lên
- pip để cài đặt các gói Python
Bắt đầu với aiohttp
Cài đặt
Cài đặt aiohttp
bằng pip
:
bash
pip install aiohttp
Ví dụ cơ bản: Thực hiện yêu cầu GET
Đây là cách thực hiện một yêu cầu GET đơn giản bằng aiohttp
:
python
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'))
Ví dụ thu thập dữ liệu web: Thu thập trích dẫn từ một trang web
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:
python
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)
Xử lý Captcha với CapSolver và aiohttp
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.
Ví dụ: Giải quyết ReCaptcha V2 với CapSolver và aiohttp
Đầu tiên, cài đặt gói CapSolver:
bash
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:
python
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.
Xử lý Proxy với aiohttp
Để định tuyến các yêu cầu của bạn thông qua proxy, hãy chỉ định tham số proxy
:
python
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())
Xử lý Cookie với aiohttp
Bạn có thể quản lý cookie bằng CookieJar
:
python
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())
Sử dụng nâng cao: Tiêu đề tùy chỉnh và yêu cầu POST
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
:
python
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())
Mã thưởng
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.
Kết luậ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ẻ!
Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.
Thêm

Nhận dạng ảnh bằng AI: Kiến thức cơ bản và cách giải quyết
Tạm biệt những khó khăn với CAPTCHA hình ảnh – CapSolver Vision Engine giải quyết chúng nhanh chóng, thông minh và dễ dàng!

Anh Tuan
25-Apr-2025

Các User Agent Tốt Nhất để Scrape Web & Cách Sử Dụng Chúng
Hướng dẫn về các user agent tốt nhất để scrape web và cách sử dụng hiệu quả để tránh bị phát hiện. Khám phá tầm quan trọng của user agent, các loại và cách triển khai chúng để scrape web liền mạch và không bị phát hiện.

Anh Tuan
07-Mar-2025

Cách giải quyết thử thách Cloudflare JS để thu thập dữ liệu web và tự động hóa
Tìm hiểu cách giải quyết thử thách JavaScript của Cloudflare để thu thập dữ liệu web và tự động hóa liền mạch. Khám phá các chiến lược hiệu quả, bao gồm sử dụng trình duyệt không đầu, luân phiên proxy, và tận dụng khả năng giải quyết CAPTCHA nâng cao của CapSolver.

Anh Tuan
05-Mar-2025

Dấu vân tay TLS của Cloudflare: Nó là gì và cách giải quyết
Tìm hiểu về việc Cloudflare sử dụng dấu vân tay TLS để bảo mật, cách nó phát hiện và chặn bot, và khám phá các phương pháp hiệu quả để giải quyết vấn đề này cho các tác vụ thu thập dữ liệu web và duyệt web tự động.

Anh Tuan
28-Feb-2025

Tại sao tôi cứ bị yêu cầu xác minh rằng tôi không phải là người máy?
Tìm hiểu lý do tại sao Google yêu cầu bạn xác minh rằng bạn không phải là robot và khám phá các giải pháp như sử dụng API của CapSolver để giải quyết các thử thách CAPTCHA một cách hiệu quả.

Anh Tuan
27-Feb-2025

Cách trích xuất dữ liệu từ trang web được bảo vệ bởi Cloudflare
Trong hướng dẫn này, chúng ta sẽ khám phá các kỹ thuật đạo đức và hiệu quả để trích xuất dữ liệu từ các trang web được bảo vệ bởi Cloudflare.

Anh Tuan
20-Feb-2025