Cạo các trang web tĩnh & động bằng Python và ProxyScrape API

Hướng dẫn, Python, Sự khác biệt, May-10-20245 phút đọc

Trong một thế giới ngày càng phụ thuộc vào dữ liệu, khả năng thu thập và phân tích lượng thông tin khổng lồ có thể mang lại cho các doanh nghiệp và chuyên gia một lợi thế cạnh tranh đáng kể. Web scraping, quá trình trích xuất dữ liệu từ các trang web, là một công cụ mạnh mẽ trong kho vũ khí của các nhà phân tích dữ liệu, nhà phát triển web, nhà tiếp thị kỹ thuật số và lập trình viên Python. Hướng dẫn này sẽ đưa bạn qua các kỹ thuật quét web cơ bản và nâng cao, nêu bật các phương pháp hay nhất và giới thiệu ProxyScrape API Web Scraping của là một giải pháp linh hoạt cho cả trang web tĩnh và động.

Xác định xem một trang web là tĩnh hay động

Để xác định xem một trang web là tĩnh hay động:

  • Kiểm tra nguồn trang: Nhấp chuột phải và chọn "Xem nguồn trang". Nếu tất cả nội dung đều hiển thị và khớp với những gì được hiển thị trên trang, nội dung đó có khả năng tĩnh.
  • Sử dụng Công cụ dành cho nhà phát triển trình duyệt: Mở công cụ dành cho nhà phát triển bằng cách nhấp chuột phải vào trang và chọn "Kiểm tra", sau đó xem tab "Mạng" khi bạn tương tác với trang. Nếu các yêu cầu mạng mới được thực hiện để đáp ứng các tương tác, đó có thể là một trang web động.
  • Tắt JavaScript: Thử tắt JavaScript trong cài đặt trình duyệt của bạn và tải lại trang. Nếu trang ngừng hoạt động chính xác hoặc hiển thị rất ít nội dung, nó có thể dựa vào JavaScript để tìm nạp và hiển thị dữ liệu, cho thấy bản chất động.

Các phương pháp này chỉ đại diện cho một vài cách để xác định xem một trang web là tĩnh hay động. Mặc dù có các chiến lược bổ sung, chúng tôi đã phân tích và xác định các kỹ thuật này, mà chúng tôi tin rằng được sử dụng rộng rãi và hiệu quả.

Scraping các trang web tĩnh với các yêu cầu và BeautifulSoup

Để cạo nội dung tĩnh, Python cung cấp các thư viện mạnh mẽ như 'yêu cầu' để thực hiện các yêu cầu HTTP và 'BeautifulSoup' để phân tích cú pháp các tài liệu HTML và XML. Đây là một ví dụ đơn giản:

  • Tạo yêu cầu: Sử dụng 'yêu cầu' để truy xuất nội dung HTML của trang.
  • Phân tích cú pháp với BeautifulSoup: Khi bạn có nội dung trang, 'BeautifulSoup' có thể phân tích cú pháp và trích xuất thông tin cụ thể.
Yêu cầu nhập khẩu
từ bs4 nhập khẩu BeautifulSoup

response = requests.get('http://example.com')

súp = BeautifulSoup (response.text, 'html.parser')

# Trích xuất dữ liệu mong muốn
dữ liệu = soup.find_all('p')

Phương pháp này là hoàn hảo cho những người mới bắt đầu hành trình quét web của họ. Nó hiệu quả cho các trang web có nội dung tĩnh, yêu cầu thiết lập tối thiểu.

Cạo các trang web động

Các trang web động đưa ra một thách thức khác. Các trang web này tải nội dung của chúng không đồng bộ với JavaScript, có nghĩa là việc quét HTML đơn giản sẽ không hoạt động vì dữ liệu không có trong lần tải trang ban đầu.

Có hai cách để tiếp cận việc quét trang web động:

  • Cách tiếp cận đầu tiên là sử dụng thư viện tự động hóa trình duyệt như Playwright / Selenium để lấy nội dung và sau đó phân tích cú pháp bằng Beautifulsoup.
  • Cách tiếp cận thứ hai giống như chơi thám tử với tab mạng để phát hiện điểm cuối mà trang web sử dụng để lấy dữ liệu của nó. Sau đó, bạn chỉ cần sử dụng mô-đun 'yêu cầu' của Python để tự lấy dữ liệu đó.

Điều hướng các trang web động với nhà viết kịch

Để cạo nội dung động, các công cụ như Playwright bắt chước tương tác của người dùng thực với trình duyệt, cho phép bạn cạo dữ liệu được tải động. Dưới đây là thông tin chi tiết ngắn gọn về việc sử dụng Playwright với Python:

  • Cài đặt Playwright: Cài đặt gói Playwright và công cụ dòng lệnh.
    - "Nhà viết kịch cài đặt pip"
    - "Cài đặt nhà viết kịch"
  • Sử dụng Playwright để mô phỏng các tương tác: Viết một tập lệnh điều hướng trang web và tương tác với nó khi cần thiết để kích hoạt tải nội dung động
từ playwright.sync_api nhập khẩu sync_playwright

Nếu __name__ == '__main__':

với sync_playwright() là p:

trình duyệt = p.chromium.launch (headless = True)

page = browser.new_page()

trang. goto ('https://www.scrapethissite.com/pages/ajax-javascript/')

# Mô phỏng tương tác ở đây

       page.click('//*[@id="2014"]')

# Trích xuất nội dung động

content = page.inner_text('//*[@id="Oscar"]/div/div[5]/div/table')

in (nội dung)

browser.close()

Phân tích Network Panel để lấy điểm cuối API:

  • Mở Công cụ dành cho nhà phát triển
    một.  Mở trang web bạn quan tâm đến trình duyệt của mình.
    b.  Bấm chuột phải vào bất kỳ đâu trên trang và chọn Kiểm tra hoặc nhấn Ctrl+Shift+I (Cmd+Option+I trên máy Mac) để mở công cụ dành cho nhà phát triển.
  • Kiểm tra tab mạng
    một.  Nhấp vào tab Mạng trong công cụ dành cho nhà phát triển. Tab này là nơi bạn sẽ thấy mọi yêu cầu mạng mà trang web thực hiện.
    b.  Làm mới trang để bắt đầu nắm bắt lưu lượng truy cập ngay từ đầu.
  • Lọc và xác định các yêu cầu AJAX
    một.  Bạn có thể lọc các yêu cầu theo các loại như XHR (XMLHttpRequest), thường được sử dụng cho các yêu cầu AJAX.
    b.  Tương tác với trang—như bấm nút, điền biểu mẫu hoặc cuộn—để kích hoạt tải nội dung động.
    c. Quan sát các yêu cầu mạng xuất hiện khi bạn thực hiện các hành động này. Tìm kiếm các yêu cầu tìm nạp dữ liệu bạn quan tâm.
  • Phân tích yêu cầu
    một.  Nhấp vào một yêu cầu trong tab Mạng có vẻ như đang truy xuất dữ liệu bạn cần.
    b.  Kiểm tra phần Tiêu đề để xem phương thức yêu cầu (GET, POST, v.v.), URL và các tiêu đề khác.
  • Sao chép yêu cầu bằng Python
    một.  Sử dụng thông tin từ tab Tiêu đề để sao chép yêu cầu bằng thư viện yêu cầu của Python. Dưới đây là một ví dụ cơ bản về cách bạn có thể làm điều đó:
import requests

# URL from the AJAX request
url = 'https://example.com/api/data'

# Any headers you observed that are necessary, like user-agent, authorization tokens, etc.
headers = {
    'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36,gzip(gfe)',
    'Authorization': 'Bearer token_if_needed'
}

# If it's a POST request, you might also need to send data
data = {
    'example_key': 'example_value'
}

# Replace 'get' with 'post' if the request type is POST
response = requests.get(url, headers=headers, data=data if 'post' in locals() else None)

# To view the response
print(response.json()) 

Sử dụng API quét web cho cả hai trường hợp

Mặc dù việc nắm vững các yêu cầu và Playwright hoặc bất kỳ thư viện máy khách Http nào khác có thể bổ ích, nhưng chúng đòi hỏi thời gian và nỗ lực để xử lý chính xác. Một cách tiếp cận khác là tận dụng API Web Scraping trừu tượng hóa sự phức tạp của các tác vụ cạo. Nó không chỉ xử lý việc gửi các yêu cầu HTTP cho bạn mà còn cung cấp hỗ trợ với các kỹ thuật chống cấm để ngăn chặn bị chặn bởi một số trang web nhất định.

Giới thiệu ProxyScrapeAPI quét web của

ProxyScrape cung cấp API Web Scraping giúp đơn giản hóa việc trích xuất dữ liệu từ cả trang web tĩnh và động.

Các tính năng API bao gồm:

  • Dễ dàng tích hợp với các trang web động và tĩnh.
  • Hỗ trợ toàn diện cho các loại hoạt động quét web khác nhau.
  • Nhóm địa chỉ IP phong phú
  • Cung cấp tới 100.000 yêu cầu miễn phí, cho phép người dùng khám phá và nhận ra toàn bộ tiềm năng của API mà không cần đầu tư ngay lập tức.
  • Công nghệ chống cấm tinh vi, được thiết kế riêng cho các trang web nổi tiếng với những khó khăn trong việc cạo.
  • Các hành động cho phép kiểm soát chính xác thời gian nhận đầu ra của trang web. Điều này bao gồm chờ đợi một yêu cầu URL cụ thể, dự đoán sự xuất hiện của một phần tử trên trang web, các hoạt động sau khi cuộn và hơn thế nữa. Sử dụng

ProxyScrape API Scraping web với một trang web tĩnh:

Đây là minh họa về cách bạn có thể kết hợp API quét web của chúng tôi vào tập lệnh Python cho các trang web tĩnh hoặc để gọi điểm cuối API mà bạn đã trích xuất từ bảng kiểm tra trên trình duyệt của mình:

import requests
import base64
import json

data = {
    "url": "https://books.toscrape.com/",
    "httpResponseBody": True
}

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': 'YOUR_API_KEY'
}

response = requests.post('https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request', headers=headers, json=data)

if response.status_code == 200:
    json_response = response.json()
    if 'browserHtml' in json_response['data']:
        print(json_response['data']['browserHtml'])
    else:
        print(base64.b64decode(json_response['data']['httpResponseBody']).decode())
else:
    print("Error:", response.status_code)

ProxyScrape API Scraping web với một trang web động:

Dưới đây là một ví dụ trong đó chúng tôi đợi biểu tượng yêu thích bắt đầu tải. Đó thường là yêu cầu cuối cùng để khởi động trên trang web thử nghiệm mà chúng tôi đang sử dụng.

import requests
import json

url = 'https://api.proxyscrape.com/v3/accounts/freebies/scraperapi/request'

headers = {
    'Content-Type': 'application/json',
    'X-Api-Key': '<your api key>'  # Make sure to replace <your api key> with your actual API key
}

payload = {
    "url": "https://books.toscrape.com/",
    "browserHtml": True,
    "actions": [
        {
            "action": "waitForRequest",
            "urlPattern": "https://books.toscrape.com/static/oscar/favicon.ico",
            "urlMatchingOptions": "exact"
        }
    ]
}

response = requests.post(url, headers=headers, json=payload)

# Print the response from the server
print(response.text)  # Prints the response body as text

Các phương pháp hay nhất trong quét web

Bất kể bạn chọn công cụ hoặc API nào, việc tôn trọng điều khoản sử dụng trang web, giới hạn tỷ lệ yêu cầu để tránh bị cấm IP và sử dụng proxy để quét ẩn danh là những phương pháp hay nhất quan trọng. ProxyScrape Không chỉ cung cấp proxy cao cấp, dân cư, di động và chuyên dụng cho các nhu cầu như vậy mà còn khuyến khích việc quét web có đạo đức.

Kết thúc

  • Cho dù bạn đang chọn quét web như một sở thích hay tích hợp nó vào bộ công cụ chuyên nghiệp của mình, hiểu được sự khác biệt giữa các trang web tĩnh và động và biết cách quét cả hai một cách hiệu quả là điều cần thiết. Bằng cách kết hợp các thư viện Python như Yêu cầu và Nhà viết kịch / Selenium với Beautifulsoup, bạn được trang bị để xử lý các thách thức quét web của mình.
  • Nếu các tập lệnh quét web của bạn đang bị phát hiện là bot và sau đó bị chặn hoặc nếu bạn muốn tối ưu hóa và đơn giản hóa quy trình gửi yêu cầu của mình, hãy xem xét khám phá API quét web của chúng tôi. Nó được thiết kế để thay mặt bạn quản lý những vấn đề này một cách hiệu quả.
  • Hãy nhớ rằng, tương lai của việc quét web rất tươi sáng và bằng cách tuân thủ các phương pháp hay nhất và tận dụng các công cụ tiên tiến, bạn có thể mở khóa một thế giới dữ liệu đang chờ được khám phá.

Sẵn sàng để bắt đầu cuộc phiêu lưu quét web của bạn? Đăng ký ProxyScrape ngay hôm nay và khám phá khả năng vô tận của web với proxy chuyên dụng, proxy dân dụng và API quét web toàn diện của chúng tôi.