Cách sử dụng Pyppeteer với Proxy vào năm 2024

Scraping and Proxy Management Expert
Điều quan trọng là phải định tuyến các yêu cầu HTTP qua nhiều địa chỉ IP để tránh bị cấm trong khi thu thập dữ liệu web. Đó là lý do tại sao trong hướng dẫn này, chúng ta sẽ tìm hiểu cách xây dựng proxy Pyppeteer!
Điều kiện tiên quyết
Hãy đảm bảo hệ thống cục bộ của bạn đang chạy Python 3.6 trở lên.
Tiếp theo, sử dụng pip để cài đặt Pyppeteer từ PyPI bằng cách thực thi dòng lệnh bên dưới.
language
pip install pyppeteer
Bạn có mệt mỏi vì liên tục bị chặn khi thu thập dữ liệu web?
Scrapeless: giải pháp thu thập dữ liệu trực tuyến tốt nhất tất cả trong một!
Giữ ẩn danh và tránh bị cấm dựa trên IP với dịch vụ luân phiên proxy thông minh, hiệu năng cao của chúng tôi:
Hãy thử miễn phí!
Cách sử dụng Pyppeteer làm proxy
Để bắt đầu, hãy viết tập lệnh scraper.py
để yêu cầu địa chỉ IP hiện tại của bạn từ ident.me
.
language
import asyncio
from pyppeteer import launch
async def main():
# Tạo một thể hiện trình duyệt ẩn danh mới
browser = await launch()
# Tạo một trang mới
page = await browser.newPage()
# Điều hướng đến trang web mục tiêu
await page.goto('https://ident.me')
# Chọn phần tử body
body = await page.querySelector('body')
# Lấy nội dung văn bản của phần tử được chọn
content = await page.evaluate('(element) => element.textContent', body)
# Xuất kết quả
print(content)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
Để lấy nội dung body của trang mục tiêu, hãy chạy tập lệnh.
language
python scraper.py
Đã đến lúc cập nhật tập lệnh của bạn để bao gồm một proxy Pyppeteer. Để làm điều đó, hãy lấy một proxy miễn phí từ FreeProxyList (bạn có thể không thể sử dụng cái chúng tôi đã sử dụng).
Tập lệnh scraper.py
sử dụng hàm launch()
, hàm này mở một thể hiện trình duyệt mới và cho phép bạn truyền vào một số tham số nhất định. Đặt tham số --proxy-server
để thông báo cho trình duyệt định tuyến các yêu cầu Pyppeteer thông qua một proxy. Một trong những lựa chọn là args
, đây là một danh sách các đối số bổ sung để gửi đến tiến trình trình duyệt.
language
# ...
async def main():
# Tạo một thể hiện trình duyệt ẩn danh mới
browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
# Tạo một trang mới
page = await browser.newPage()
# ...
Đây là toàn bộ mã:
language
import asyncio
from pyppeteer import launch
async def main():
# Tạo một thể hiện trình duyệt ẩn danh mới
browser = await launch(args=['--proxy-server=http://20.219.108.109:8080'])
# Tạo một trang mới
page = await browser.newPage()
# Điều hướng đến trang web mục tiêu
await page.goto('https://ident.me')
# Chọn phần tử body
body = await page.querySelector('body')
# Lấy nội dung văn bản của phần tử được chọn
content = await page.evaluate('(element) => element.textContent', body)
# Xuất kết quả
print(content)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
Lần này, khi bạn chạy lại tập lệnh với tùy chọn dòng lệnh python scraper.py, địa chỉ IP của proxy của bạn sẽ xuất hiện trên màn hình.
language
20.219.108.109
Xác thực Pyppeteer qua proxy
Bạn sẽ cần một tên người dùng và mật khẩu để xác thực nếu bạn sử dụng proxy trả phí. Sử dụng tham số --proxy-auth cho việc đó.
language
# ...
# Tạo một thể hiện trình duyệt ẩn danh mới
browser = await launch(args=[
'--proxy-server=http://20.219.108.109:8080'
'--proxy-auth=<YOUR_USERNAME>:<YOUR_PASSWORD>'
])
# ...
Hoặc, bạn có thể xác thực bằng cách sử dụng API trang như được thấy bên dưới:
language
# ...
# Tạo một trang mới
page = await browser.newPage()
await page.authenticate({ 'username': '<YOUR_USERNAME>', 'password': '<YOUR_PASSWORD>' })
# ...
Sử dụng Pyppeteer để cấu hình proxy động
Để tránh bị liệt kê đen, bạn phải sử dụng proxy động để thu thập dữ liệu web thay vì proxy tĩnh mà bạn đã sử dụng trước đây. Sử dụng Pyppeteer, bạn có thể tạo nhiều thể hiện trình duyệt, mỗi thể hiện có cấu hình proxy độc đáo.
Để bắt đầu, hãy lấy thêm proxy miễn phí và biên soạn một danh sách chúng:
language
# ...
import random
proxies = [
'http://20.219.108.109:8080',
'http://210.22.77.94:9002',
'http://103.150.18.218:80',
]
# ...
Tiếp theo, hãy viết một hàm đồng bộ thực hiện yêu cầu Pyppeteer đến ident.me
bằng cách sử dụng một hàm đồng bộ chấp nhận một proxy làm đối số:
language
# ...
async def init_pyppeteer_proxy_request(url):
# Tạo một thể hiện trình duyệt ẩn danh mới
browser = await launch(args=[
f'--proxy-server={url}',
])
# Tạo một trang mới
page = await browser.newPage()
# Điều hướng đến trang web mục tiêu
await page.goto('https://ident.me')
# Chọn phần tử body
body = await page.querySelector('body')
# Lấy nội dung văn bản của phần tử được chọn
content = await page.evaluate('(element) => element.textContent', body)
# Xuất kết quả
print(content)
```python
Bây giờ, thay đổi hàm `main()` sao cho nó gọi hàm mới được tạo thông qua một proxy được chọn ngẫu nhiên:
```python
# ...
async def main():
for i in range(3):
await init_pyppeteer_proxy_request(random.choice(proxies))
# ...
Đây là cách mã của bạn nên xuất hiện hiện tại:
python
import asyncio
from pyppeteer import launch
import random
proxies = [
'http://20.219.108.109:8080',
'http://210.22.77.94:9002',
'http://103.150.18.218:80',
]
async def init_pyppeteer_proxy_request(url):
# Tạo một phiên bản trình duyệt ẩn mới
browser = await launch(args=[
f'--proxy-server={url}',
])
# Tạo một trang mới
page = await browser.newPage()
# Điều hướng đến trang web đích
await page.goto('https://ident.me')
# Chọn phần tử body
body = await page.querySelector('body')
# Lấy nội dung văn bản của phần tử đã chọn
content = await page.evaluate('(element) => element.textContent', body)
# Xuất kết quả
print(content)
await browser.close()
async def main():
for i in range(3):
await init_pyppeteer_proxy_request(random.choice(proxies))
asyncio.get_event_loop().run_until_complete(main())
Cài đặt Python Requests (hoặc bất kỳ thư viện yêu cầu HTTP nào khác) sau khi đặt mã trình trích xuất Python mà trình tạo yêu cầu đã tạo vào một tệp mới:
python
pip install requests
Bây giờ trình trích xuất của bạn đang chạy, trang HTML cho OpenSea sẽ được trích xuất và hiển thị trên bảng điều khiển.
Kết luận
Thành công trong việc trích xuất web của bạn có thể được tăng cường đáng kể bằng cách sử dụng proxy với Pyppeteer, và bây giờ bạn đã biết cách gửi yêu cầu bằng cả proxy tĩnh và động.
Bạn cũng đã phát hiện ra rằng một công cụ khác có thể hoàn thành nhiệm vụ nhanh hơn và chính xác hơn. Công cụ trích xuất web từ Scrapeless có thể là đồng minh của bạn nếu bạn cần trích xuất trên quy mô lớn mà không phải lo lắng về cơ sở hạ tầng và có sự đảm bảo lớn hơn rằng bạn sẽ có được dữ liệu mình cần.
Tại Scrapeless, 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 hiện hành và chính sách bảo mật của trang web. 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 pháp lý đố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 thu thập dữ liệu nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem lại 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.