Quét Web với MechanicalSoup

Python , Cách thực hiện , Thu thập dữ liệu ,12-09-20245 phút đọc

Web scraping đã trở thành một công cụ thiết yếu trong thời đại kỹ thuật số, đặc biệt là đối với các nhà phát triển web, nhà phân tích dữ liệu và nhà tiếp thị kỹ thuật số. Hãy tưởng tượng bạn có thể trích xuất thông tin có giá trị từ các trang web một cách nhanh chóng và hiệu quả. Đây chính là lúc MechanicalSoup phát huy tác dụng. Hướng dẫn này sẽ khám phá những điều phức tạp khi sử dụng MechanicalSoup để thu thập dữ liệu web, cung cấp những hiểu biết thực tế và mẹo để bạn bắt đầu.

Vai trò của MechanicalSoup trong Web Scraping

MechanicalSoup là một thư viện Python được thiết kế để đơn giản hóa việc thu thập dữ liệu web bằng cách cung cấp một giao diện đơn giản để tự động hóa các tương tác với các trang web. Nó xử lý hiệu quả các biểu mẫu, liên kết và có thể điều hướng các trang web yêu cầu các hành động cơ bản của người dùng như gửi biểu mẫu và điều hướng liên kết. Điều này làm cho nó trở nên lý tưởng để tự động hóa các tác vụ trên các trang web có nội dung tĩnh, nơi không yêu cầu các hành vi phức tạp của người dùng.

Bắt đầu thiết lập MechanicalSoup để thu thập dữ liệu web

Trước khi đi sâu vào chi tiết về web scraping, trước tiên chúng ta hãy thiết lập MechanicalSoup. Quá trình cài đặt rất đơn giản và có thể hoàn tất trong vài bước.

Cài đặt MechanicalSoup

Để cài đặt MechanicalSoup, bạn cần cài đặt Python trên máy của mình. Sau đó, bạn có thể sử dụng pip, trình cài đặt gói của Python, để cài đặt MechanicalSoup. Mở terminal của bạn và nhập lệnh sau:

pip cài đặt mechanicalsoup

Thiết lập môi trường của bạn

Sau khi MechanicalSoup được cài đặt, việc thiết lập môi trường phát triển của bạn là rất quan trọng. Bạn sẽ cần một trình soạn thảo mã, chẳng hạn như Visual Studio Code hoặc PyCharm, để viết và chạy các tập lệnh Python của bạn. Đảm bảo bạn cũng đã cài đặt các thư viện "BeautifulSoup" và "requests".

Những bước đầu tiên với MechanicalSoup

Tạo tập lệnh trích xuất dữ liệu web đầu tiên của bạn bằng MechanicalSoup bao gồm một vài bước cơ bản. Bắt đầu bằng cách nhập các thư viện cần thiết và khởi tạo đối tượng trình duyệt. Sau đây là một ví dụ đơn giản để bạn bắt đầu:

nhập mechanicalsoup trình duyệt = mechanicalsoup.StatefulBrowser() trình duyệt.mở( "https://www.scrapethissite.com/pages/" )

Hiểu những điều cơ bản về Web Scraping với MechanicalSoup

Bây giờ chúng ta đã thiết lập MechanicalSoup, hãy cùng khám phá những điều cơ bản về web scraping. Hiểu được những điều cơ bản này sẽ giúp bạn xây dựng các tập lệnh scraping phức tạp hơn.

Xử lý biểu mẫu

Trong MechanicalSoup, phương thức "select_form()" được sử dụng để định vị và xử lý biểu mẫu.
Lập luận để chọn_biểu_thức() là một bộ chọn CSS. Trong ví dụ mã dưới đây, chúng tôi đang sử dụng trang web này để điền vào một biểu mẫu tìm kiếm một trường đơn giản. Vì trong trường hợp của chúng tôi chỉ có một biểu mẫu trong trang, trình duyệt.select_form() sẽ làm được điều đó. Nếu không, bạn sẽ phải nhập bộ chọn css đến chọn_biểu_thức() phương pháp
Ngoài ra, để xem các trường trên biểu mẫu, bạn có thể sử dụng in_tóm_tắt() phương pháp. Điều này sẽ cung cấp cho bạn thông tin chi tiết về từng trường. Vì biểu mẫu chứa hai loại phần tử—trường văn bản và nút—chúng ta chỉ cần điền vào trường văn bản rồi gửi biểu mẫu:

import mechanicalsoup browser = mechanicalsoup.StatefulBrowser() browser.open ( "https://www.scrapethissite.com/pages/forms/?page_num=1" ) # Chọn biểu mẫu search_form = browser.select_form() print (search_form.print_summary()) search_form.set ( "q" , 'test' ) browser.submit_selected()

Sau đây là kết quả của đoạn mã trên.

<input class="form-control" id="q" name="q" placeholder="Search for Teams" type="text"/>
<input class="btn btn-primary" type="submit" value="Search"/>

Xử lý phân trang

Web scraping thường liên quan đến việc xử lý nhiều trang dữ liệu. MechanicalSoup không trực tiếp cung cấp tính năng phân trang qua các trang bằng liên kết phân trang.
Trong trang web mẫu mà chúng tôi đang sử dụng, phân trang trông như thế này:

Cấu trúc HTML trông như thế này:

 
So what we will do is first select the list that holds the pagination links with "browser.page.select_one('ul.pagination')".
Then with ".select('li')[1::]" we select all "<li>" elements inside 'pagination' list starting from the second element. This will return a list of "<li>" elements and then we paginate each one of them in a "for loop" starting from the second element and for each "<li>" element we extract the "<a>" tag and then use it in "follow_link()" method to navigate to that page.
Here is the full example:  

import mechanicalsoup browser = mechanicalsoup .StatefulBrowser () browser .open ( "https://www.scrapethissite.com/pages/forms/?page_num=1" ) cho liên kết trong trình duyệt .page .select_one ( 'ul.pagination' ) .select ( 'li' ) [1::] : next_page_link = liên kết .select_one ( 'a' ) browser .follow_link (next_page_link) print (browser.url)

Thiết lập Proxy

Khi thu thập dữ liệu trang web hoặc tự động hóa tương tác web, việc sử dụng proxy có thể rất quan trọng để bỏ qua các hạn chế về địa lý, quản lý giới hạn tốc độ hoặc ngăn chặn lệnh cấm IP. Sử dụng MechanicalSoup kết hợp với thư viện "requests", chúng tôi có thể tích hợp liền mạch các cấu hình proxy, cho phép bạn tận dụng các lợi ích này một cách hiệu quả. Sau đây là cách bạn có thể thiết lập proxy trong MechanicalSoup cho các tác vụ thu thập dữ liệu web của mình:

import mechanicalsoup
import requests

def create_proxy_browser():
    # Define your proxy configuration (example values)
    proxies = {
        "http": "rp.proxyscrape.com:6060:username:password",
        "https": "rp.proxyscrape.com:6060:username:password",
    }

    # Create a session object with proxy settings
    session = requests.Session()
    session.proxies.update(proxies)

    # Optionally, you can add headers or other session settings here
    session.headers.update({
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    })

    # Create a MechanicalSoup StatefulBrowser using the configured session
    browser = mechanicalsoup.StatefulBrowser(session=session)
    return browser

# Usage
browser = create_proxy_browser()
response = browser.open("https://www.scrapethissite.com/pages/forms/?page_num=1")
print(response.text)  # Outputs the content of the page

Những cân nhắc về mặt đạo đức và pháp lý trong việc thu thập dữ liệu web

Việc trích xuất dữ liệu web có thể gây ra những lo ngại về mặt đạo đức và pháp lý. Điều cần thiết là phải hiểu những cân nhắc này để tránh các vấn đề tiềm ẩn.

Tôn trọng Chính sách của Trang web

Luôn kiểm tra các điều khoản dịch vụ của trang web trước khi thu thập dữ liệu. Một số trang web cấm thu thập dữ liệu rõ ràng, trong khi những trang web khác có thể có các hướng dẫn cụ thể. Việc bỏ qua các chính sách này có thể dẫn đến hậu quả pháp lý.

Tránh tình trạng quá tải máy chủ

Các yêu cầu thường xuyên đến một trang web có thể làm quá tải máy chủ của trang web đó, gây ra sự gián đoạn. Sử dụng độ trễ giữa các yêu cầu và tôn trọng tệp `robots.txt` của trang web để ngăn chặn điều này. Sau đây là cách bạn có thể thêm độ trễ:

nhập thời gian thời gian .sleep( 2 ) # Trì hoãn trong 2 giây

Quyền riêng tư dữ liệu

Đảm bảo rằng dữ liệu bạn thu thập không vi phạm các quy định về quyền riêng tư, chẳng hạn như GDPR. Thông tin cá nhân phải được xử lý cẩn thận và chỉ được thu thập khi cần thiết.

Phần kết luận

Web scraping với MechanicalSoup cung cấp giải pháp mạnh mẽ và linh hoạt cho các nhà phát triển web, nhà phân tích dữ liệu và nhà tiếp thị kỹ thuật số. Bằng cách làm theo các bước được nêu trong hướng dẫn này, bạn có thể trích xuất dữ liệu có giá trị từ các trang web một cách hiệu quả, tự động hóa các tác vụ lặp đi lặp lại và đạt được lợi thế cạnh tranh trong lĩnh vực của mình.

Cho dù bạn là một chuyên gia dày dạn kinh nghiệm hay chỉ mới bắt đầu, MechanicalSoup cung cấp các công cụ bạn cần để thành công. Hãy nhớ luôn cân nhắc các khía cạnh đạo đức và pháp lý, tuân thủ các thông lệ tốt nhất và liên tục cải thiện kỹ năng của bạn.

Sẵn sàng nâng cao kỹ năng trích xuất dữ liệu web của bạn lên một tầm cao mới? Hãy bắt đầu thử nghiệm với MechanicalSoup ngay hôm nay và khai thác toàn bộ tiềm năng của việc trích xuất dữ liệu web. Trích xuất dữ liệu vui vẻ!