Quét các trang web tĩnh và động bằng Python và ProxyScrape Giao diện lập trình ứng dụng (API)

Hướng dẫn , Python , Sự khác biệt ,Ngày 10 tháng 5 năm 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 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ẽ hướng dẫn bạn các kỹ thuật web scraping 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 thu thập dữ liệu web của 's là giải pháp linh hoạt cho cả trang web tĩnh và động.

Xác định 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 toàn bộ nội dung đều hiển thị và khớp với nội dung hiển thị trên trang, thì có khả năng đó là nội dung 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 để phản hồi các tương tác, thì có khả năng đó là một trang web động.
  • Tắt JavaScript: Hãy 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 bình thường hoặc hiển thị rất ít nội dung, có khả năng là trang đang dựa vào JavaScript để lấy và hiển thị dữ liệu, cho thấy bản chất động.

Các phương pháp này chỉ là 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 là được sử dụng rộng rãi và hiệu quả.

Quét các trang web tĩnh bằng Requests và BeautifulSoup

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

  • Đưa ra yêu cầu: Sử dụng `requests` để lấy nội dung HTML của trang.
  • Phân tích cú pháp với BeautifulSoup: Sau khi 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ể.
nhập yêu cầu từ bs4 nhập BeautifulSoup response = requests.get( 'http://example.com' ) soup = BeautifulSoup(response.text, 'html.parser' ) # Trích xuất dữ liệu mong muốn data = soup.find_all( 'p' )

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

Thu thập dữ liệu trang web động

Các trang web động đặt 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, nghĩa là việc trích xuất HTML trực tiếp sẽ không hiệu quả 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 thu thập dữ liệu 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 trò 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. 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 Playwright

Để thu thập nội dung động, các công cụ như Playwright mô phỏng tương tác của người dùng thực với trình duyệt, cho phép bạn thu thập dữ liệu được tải động. Sau đây là thông tin chi tiết ngắn gọn về cách 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.
    - "pip cài đặt nhà viết kịch"
    - "cài đặt nhà viết kịch"
  • Sử dụng Playwright để mô phỏng 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 trang web khi cần thiết để kích hoạt việc tải nội dung động
từ playwright.sync_api nhập sync_playwright nếu __name__ == '__main__' : với sync_playwright() là p: browser = p.chromium.launch(headless= True ) page = browser.new_page() page . goto ( 'https://www.scrapethissite.com/pages/ajax-javascript/' ) # Mô phỏng các tương tác tại đây page .click( '//*[@id="2014"]' ) # Trích xuất nội dung động content = page .inner_text( '//*[@id="oscars"]/div/div[5]/div/table' ) print (nội dung) browser.close()

Phân tích Network Panel để có được điểm cuối API:

  • Mở Công cụ dành cho nhà phát triển
    a. Mở trang web bạn quan tâm bằng trình duyệt của bạn.
    b. Nhấp 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
    a. 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 ghi lại lưu lượng truy cập ngay từ đầu.
  • Lọc và xác định các yêu cầu AJAX
    a. Bạn có thể lọc các yêu cầu theo 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ư nhấp vào 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 truy xuất dữ liệu mà bạn quan tâm.
  • Phân tích yêu cầu
    a. Nhấp vào 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
    a. Sử dụng thông tin từ tab Headers để sao chép yêu cầu bằng thư viện requests của Python. Sau đây là một ví dụ cơ bản về cách bạn có thể thực hiện:
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 Web Scraping cho cả hai tình huống

Trong khi 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ể mang lại nhiều phần thưởng, chúng đòi hỏi thời gian và công sức để xử lý đúng cách. Một cách tiếp cận thay thế là tận dụng API Web Scraping để tóm tắt sự phức tạp của các tác vụ thu thập dữ liệu. API này 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ề các kỹ thuật chống cấm để tránh bị chặn bởi một số trang web nhất định.

Giới thiệu ProxyScrape API thu thập dữ liệu web của 's

ProxyScrape cung cấp API thu thập dữ liệu web 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 của 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 nhiều loại hoạt động thu thập dữ liệu web khác nhau.
  • Nhóm địa chỉ IP rộng lớn
  • 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à khai thác 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 có độ khó thu thập dữ liệu cao.
  • 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ờ yêu cầu URL cụ thể, dự đoán sự xuất hiện của một thành phần trên trang web, các hoạt động sau khi cuộn và nhiều hơn nữa. Sử dụng

ProxyScrape API thu thập dữ liệu web với trang web tĩnh:

Đây là hình ảnh minh họa về cách bạn có thể kết hợp API thu thập dữ liệu web của chúng tôi vào các 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 thu thập dữ liệu web với trang web động:

Đây là ví dụ chúng ta đợi favicon bắt đầu tải. Đây thường là yêu cầu cuối cùng để khởi động trên trang web thử nghiệm mà chúng ta đ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

Thực hành tốt nhất trong Web Scraping

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

Phần kết luận

  • Cho dù bạn đang chọn web scraping 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, việc hiểu được sự khác biệt giữa các trang web tĩnh và động và biết cách scraping hiệu quả cả hai là điều cần thiết. Bằng cách kết hợp các thư viện Python như Requests và Playwright/Selenium với Beautifulsoup, bạn sẽ được trang bị để xử lý các thách thức về web scraping của mình.
  • Nếu tập lệnh thu thập dữ liệu web của bạn 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 cân nhắc khám phá API thu thập dữ liệu web của chúng tôi. API này được thiết kế để quản lý các vấn đề này một cách hiệu quả thay mặt bạn.
  • Hãy nhớ rằng, tương lai của công nghệ thu thập dữ liệu 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 cả 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 thu thập dữ liệu web của bạn? Đăng ký ProxyScrape ngay hôm nay và khám phá những khả năng vô tận của web với các proxy chuyên dụng, proxy dân dụng và API thu thập dữ liệu web toàn diện của chúng tôi.