Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa trích xuất dữ liệu từ web về Excel bằng Python

Từ Hồng Tiên 25/03/2026 22:58 569 lượt xem 3 trả lời

Chào mọi người, dạo này mình có làm việc nhiều với dữ liệu trên các trang web và nhận thấy việc copy-paste thủ công rất tốn thời gian. Vì vậy, mình đã tìm hiểu và áp dụng Python để tự động hóa việc này. Hôm nay mình muốn chia sẻ lại với mọi người cách mình đã làm, hy vọng sẽ giúp ích cho các bạn.

Chúng ta sẽ sử dụng thư viện BeautifulSouprequests để lấy dữ liệu HTML từ một trang web, sau đó trích xuất các bảng hoặc thông tin cần thiết và lưu vào file Excel.

Các bước thực hiện:

  • Cài đặt thư viện: Nếu chưa có, bạn cần cài đặt BeautifulSouppandas (để làm việc với Excel). Mở Command Prompt hoặc Terminal và gõ:
    pip install beautifulsoup4 pandas openpyxl requests
  • Lấy nội dung HTML: Sử dụng thư viện requests để tải về nội dung của trang web.
  • Phân tích HTML: Dùng BeautifulSoup để phân tích cấu trúc HTML, tìm đến các thẻ chứa dữ liệu bạn cần (ví dụ: thẻ <table>).
  • Trích xuất dữ liệu: Lấy nội dung từ các thẻ đã tìm được.
  • Lưu vào Excel: Dùng pandas để tạo DataFrame từ dữ liệu đã trích xuất và lưu vào file .xlsx.

Ví dụ đơn giản:

Giả sử chúng ta muốn lấy bảng số liệu từ một trang web có cấu trúc HTML như sau:

<table id="data-table">
  <thead>
    <tr>
      <th>Tên</th>
      <th>Tuổi</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>An</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Bình</td>
      <td>30</td>
    </tr>
  </tbody>
</table>

Đoạn code Python có thể trông như thế này:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'YOUR_WEBSITE_URL'
response = requests.get(url)

if response.status_code == 200:
    soup = BeautifulSoup(response.content, 'html.parser')
    table = soup.find('table', id='data-table')

    if table:
        data = []
        # Trích xuất header
        headers = [th.text.strip() for th in table.find('thead').find_all('th')]
        data.append(headers)

        # Trích xuất rows
        for row in table.find('tbody').find_all('tr'):
            cols = [td.text.strip() for td in row.find_all('td')]
            data.append(cols)

        df = pd.DataFrame(data[1:], columns=data[0])
        df.to_excel('output_data.xlsx', index=False)
        print("Dữ liệu đã được trích xuất và lưu vào output_data.xlsx")
    else:
        print("Không tìm thấy bảng dữ liệu.")
else:
    print(f"Lỗi khi truy cập trang web: {response.status_code}")

Tất nhiên, mỗi trang web có cấu trúc HTML khác nhau nên bạn sẽ cần điều chỉnh cách tìm kiếm các thẻ cho phù hợp. Đây chỉ là một ví dụ cơ bản để các bạn hình dung. Hy vọng bài chia sẻ này hữu ích cho công việc của mọi người!

2

Hay quá bạn ơi! Mình cũng đang đau đầu với việc lấy dữ liệu từ web về Excel đây. Cách dùng Python này nghe có vẻ hiệu quả thật. Bạn có thể chia sẻ thêm về phần cài đặt thư viện và các đoạn code chính không? Mình tò mò muốn xem cụ thể cách bạn trích xuất bảng dữ liệu.

1

Phần chia sẻ của bạn thực sự rất hữu ích! Mình cũng đang tìm cách tối ưu hóa quy trình xử lý dữ liệu web. Ngoài BeautifulSouprequests, bạn có kinh nghiệm nào với các thư viện khác như Scrapy không? Mình thấy nó cũng khá mạnh mẽ cho việc crawl dữ liệu phức tạp.

3

Tuyệt vời! Việc tự động hóa trích xuất dữ liệu web về Excel bằng Python là một hướng đi rất hay, đặc biệt là với khối lượng dữ liệu lớn. Mình thấy bạn đã đề cập đến BeautifulSoup và requests, đây là hai thư viện rất mạnh mẽ cho việc này.

Để mọi người dễ hình dung hơn, bạn có thể chia sẻ thêm một ví dụ cụ thể về một trang web mà bạn đã áp dụng không? Ví dụ, đó là trang tin tức, trang bán hàng hay trang dữ liệu nào đó? Việc này sẽ giúp các bạn mới tiếp cận dễ dàng theo dõi và áp dụng thử. Cảm ơn bạn đã chia sẻ nhé!

2

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký