🥳Hãy tham gia Cộng đồng ScrapelessYêu cầu dùng thử miễn phí để truy cập Bộ công cụ quét web mạnh mẽ của chúng tôi!
Quay lại Blog

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

James Thompson
James Thompson

Scraping and Proxy Management Expert

18-Sep-2024

Đ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 Copy
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 Copy
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 Copy
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 Copy
# ...
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 Copy
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 Copy
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 Copy
# ...
    # 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 Copy
# ...
    # 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 Copy
# ...
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 Copy
# ...
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 Copy
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 Copy
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.

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

Danh mục