Ảnh giới thiệu Series Học Python từ A đến Z

Học Python cơ bản từ A đến Z cho người mới bắt đầu (Bài 15)

Module 7: Python Ứng Dụng Cơ Bản & Hướng Đi Tiếp Theo

Bài 15: Trích xuất Dữ liệu Từ Web (Web Scraping): Thám Hiểm ‘Đại Dương Thông Tin’ Internet.

Trích xuất Dữ liệu Từ Web (Web Scraping), học Python cơ bản từ A đến Z cho người mới bắt đầu
Mục tiêu:

Sau khi đã nắm vững cách xử lý lỗi và tương tác với tệp, đã đến lúc chúng ta mở rộng tầm nhìn ra ngoài phạm vi máy tính cá nhân. Bài học này sẽ giới thiệu bạn đến một kỹ năng mạnh mẽ: Web Scraping (Thu thập dữ liệu từ website). Bạn sẽ học cách sử dụng Python để “đọc” và “trích xuất” thông tin từ các trang web, biến Internet thành một “kho dữ liệu” khổng lồ phục vụ cho mục đích của bạn.

1. Mở Đầu:

Tưởng tượng bạn đang xây dựng một AI có thể đọc và tổng hợp thông tin từ mọi ngóc ngách của Internet để phục vụ cho nhiệm vụ khám phá vũ trụ. Để đưa ra quyết định tối ưu, AI cần phải có khả năng “tiêu hóa” vô số bài báo khoa học, báo cáo nhiệm vụ, và thậm chí cả các diễn đàn thảo luận từ khắp các hành tinh mạng. Nhưng làm thế nào để AI có thể tự động thu thập những thông tin này mà không cần bạn phải sao chép và dán thủ công?

Chào mừng bạn đến với Web Scraping (Thu thập dữ liệu từ website)! Đây là nghệ thuật và khoa học của việc tự động trích xuất thông tin từ các trang web bằng cách sử dụng các công cụ phần mềm.

Trong bài học này, chúng ta sẽ khám phá:

• Web Scraping là gì và tại sao nó lại quan trọng trong thời đại thông tin.

• Các công cụ Python cơ bản để tải nội dung trang web (như urllib hoặc requests).

• Cách phân tích cấu trúc HTML của một trang web để tìm kiếm và trích xuất dữ liệu mong muốn (với BeautifulSoup).

• Một ví dụ thực tế về việc trích xuất thông tin từ một trang web.

Sau bài học này, bạn sẽ có khả năng “điều khiển” chương trình của mình “khám phá” và “thu thập” thông tin từ “Đại Dương Thông Tin” Internet, biến nó thành nguồn dữ liệu dồi dào cho các dự án AI và khoa học dữ liệu của bạn!

2. Lý Thuyết & Khái Niệm (HaivanStory’s Voice):

Trong các bộ phim khoa học viễn tưởng, không gian mạng thường được hình dung như một “tấm lưới” thông tin khổng lồ. Các AI thông minh có thể lướt qua tấm lưới đó, tìm kiếm và tổng hợp những dữ liệu quan trọng để đưa ra dự đoán hoặc phát hiện. Web Scraping chính là việc tạo ra “giác quan thứ sáu” cho chương trình của bạn để cảm nhận và thu thập thông tin từ tấm lưới Internet đó.

Web Scraping là gì?

Web Scraping là một kỹ thuật tự động thu thập thông tin từ các trang web. Thay vì sao chép và dán thủ công, bạn viết code để chương trình của bạn tự động truy cập trang web, đọc nội dung (thường là HTML), và “lọc” ra những dữ liệu mà bạn cần.

Quy trình cơ bản của Web Scraping:

1 Gửi yêu cầu HTTP: Gửi một yêu cầu đến máy chủ web để tải nội dung của trang web (giống như việc trình duyệt của bạn gửi yêu cầu khi bạn gõ URL).

2 Nhận phản hồi: Máy chủ trả về nội dung của trang web (thường là HTML, CSS, JavaScript).

3 Phân tích cú pháp (Parsing): Phân tích cấu trúc của HTML để tìm kiếm các phần tử chứa dữ liệu bạn muốn.

4 Trích xuất dữ liệu: Lấy ra các dữ liệu cụ thể từ các phần tử HTML đã tìm thấy.

5 Lưu trữ/Xử lý dữ liệu: Lưu dữ liệu vào tệp, cơ sở dữ liệu, hoặc tiếp tục xử lý.

Các Thư Viện Python Phổ Biến cho Web Scraping:

1 urllib (Standard Library):

• Là một module tích hợp sẵn của Python, không cần cài đặt thêm.

• Cung cấp các chức năng cơ bản để làm việc với URL (mở URL, đọc dữ liệu từ URL).

• Phù hợp cho các tác vụ đơn giản.

Ví dụ với urllib.request:

import urllib.request

try:
    url = "https://www.example.com"
    # Mở URL và đọc nội dung
    with urllib.request.urlopen(url) as response:
        html = response.read().decode('utf-8') # Đọc nội dung và giải mã UTF-8
        print(f"Đã tải thành công nội dung từ {url}")
        # print(html[:500]) # In ra 500 ký tự đầu tiên
except Exception as e:
    print(f"Lỗi khi tải trang: {e}")
Lưu ý: urllib thường được dùng cho các tác vụ cơ bản. Trong thực tế, thư viện requests (bên thứ ba) thường được ưu tiên vì cú pháp đơn giản và nhiều tính năng hơn.

2 BeautifulSoup (Thư viện bên thứ ba):

• Đây là một thư viện tuyệt vời để phân tích cú pháp HTML và XML.

• Nó giúp bạn dễ dàng tìm kiếm các thẻ (tags), thuộc tính (attributes), và nội dung bên trong các thẻ.

• Để sử dụng BeautifulSoup, bạn cần cài đặt nó trước: pip install beautifulsoup4 (cũng có thể cần lxml hoặc html5lib làm parser).

Ví dụ với BeautifulSoup:from bs4 import BeautifulSoup


import urllib.request # Vẫn dùng urllib để tải HTML

try:
    url = "https://www.example.com"
    with urllib.request.urlopen(url) as response:
        html = response.read()
        soup = BeautifulSoup(html, 'html.parser') # Tạo đối tượng BeautifulSoup

        # Trích xuất tiêu đề của trang
        title_tag = soup.title
        if title_tag:
            print(f"\nTiêu đề trang: {title_tag.string}")

        # Trích xuất tất cả các thẻ paragraph
        print("\nCác đoạn văn (p) trong trang:")
        paragraphs = soup.find_all('p')
        for p in paragraphs:
            print(p.get_text()) # Lấy nội dung văn bản của thẻ
except Exception as e:
    print(f"Lỗi: {e}")
Các Bước Trích Xuất Dữ Liệu Từ Một Bảng HTML (theo yêu cầu bài Lab):

1 Tải nội dung trang web: Sử dụng urllib.request.urlopen() để mở URL và .read() để đọc nội dung HTML.

2 Phân tích HTML: Truyền nội dung HTML cho BeautifulSoup(html_content, ‘html.parser’) để tạo đối tượng soup.

3 Tìm thẻ bảng: Sử dụng soup.find(‘table’) để định vị thẻ <table> chứa dữ liệu.

4 Tìm các hàng (rows) và cột (columns):

• Trong đối tượng bảng, sử dụng table.find_all(‘tr’) để tìm tất cả các hàng (<tr>).

• Trong mỗi hàng, sử dụng row.find_all(‘td’) để tìm tất cả các ô dữ liệu (<td>).

5 Trích xuất dữ liệu và tính toán: Lấy nội dung văn bản từ các thẻ <td> (ví dụ: .get_text()) và chuyển đổi sang số nếu cần để tính tổng.

Coursera Videos (Tích hợp):

Để hình dung rõ hơn về cách Python tương tác với web và xử lý dữ liệu web, hãy xem các video sau:

12.3 Unicode Characters and Strings:

• Hiểu về Unicode rất quan trọng khi làm việc với dữ liệu từ web vì nó liên quan đến cách văn bản được mã hóa.

12.4 Retrieving Web Pages:

• Video này sẽ hướng dẫn cách sử dụng urllib để tải nội dung của một trang web.

Worked Example: Using urllib Chapter 12:

• Một ví dụ thực hành chi tiết về urllib.

12.5 Parsing Web Pages:

• Giới thiệu về việc phân tích HTML sau khi đã tải về.

Worked Example: BeautifulSoup Chapter 12:

• Đây là video quan trọng để hiểu cách sử dụng BeautifulSoup để trích xuất dữ liệu.

Tài liệu tham khảo:

• urllib Documentation

• Beautiful Soup Documentation

• Python Web Scraping Tutorial – GeeksforGeeks (bản dịch)

• Trích xuất dữ liệu từ web trong Python.docx (file đính kèm)

3. Thực Hành & Vận Dụng (Hands-on & Interactive):

Hãy biến chương trình của bạn thành một “đặc vụ” thu thập thông tin trên Internet!

Google Colab (Thực hành cốt lõi):

[Link Google Colab Bài 15 (Tự tạo)]

Notebook sẽ bao gồm:

• Các đoạn code mẫu (Code Examples) minh họa:

• Sử dụng urllib để tải một trang web đơn giản.

• Sử dụng BeautifulSoup để phân tích nội dung HTML.

• Tìm kiếm các thẻ HTML theo tên thẻ (soup.find_all(‘a’), soup.find(‘h1’)).

• Trích xuất thuộc tính (.get(‘href’)) và nội dung văn bản (.get_text()) từ các thẻ.

• Hướng dẫn cài đặt BeautifulSoup trong Colab (!pip install beautifulsoup4).

• Các bài tập nhỏ, có hướng dẫn (Guided Exercises):

• Nhiệm vụ: Trích xuất Tiêu Đề Bài Viết:

• Tải nội dung của một trang web tin tức (ví dụ: VnExpress hoặc Dân Trí).

• Sử dụng BeautifulSoup để tìm và in ra tất cả các tiêu đề bài viết (thường nằm trong các thẻ h3, h2 với các class cụ thể).

• (Gợi ý: Kiểm tra “Inspect Element” trên trình duyệt để xác định cấu trúc HTML).

• Thử thách: Đếm Liên Kết Ngoài:

• Tải nội dung của một trang web bất kỳ.

• Tìm tất cả các thẻ liên kết (<a>).

• Đếm số lượng liên kết dẫn ra ngoài website đó (liên kết không bắt đầu bằng tên miền của trang đó).

SoloLearn Quiz (Kiểm tra nhanh):

Sau khi thực hành trên Colab, hãy kiểm tra nhanh kiến thức của bạn với các bài quiz trên SoloLearn. Tìm kiếm các bài về “File Handling” (vì việc đọc web cũng giống đọc file từ xa) và “Regular Expressions” (sẽ học sau, nhưng liên quan đến xử lý chuỗi): [Link Quiz SoloLearn (SoloLearn Python Intermediate course, tìm kiếm các bài liên quan đến Network Programming hoặc File Handling)]

CodeLearn Lab (Thử thách nâng cao):

Lab 15: Trích xuất dữ liệu từ web với Python [Link Lab CodeLearn – Bài 15 (Sử dụng bài lab đã cho)]

Hướng dẫn cách tiếp cận bài Lab 15:

1 Hiểu mục tiêu: Bạn cần trích xuất dữ liệu từ một bảng HTML trên một trang web cụ thể (mà bạn sẽ được cung cấp URL trong môi trường lab) để tính:

• Tổng số hàng trong bảng.

• Tổng các giá trị số từ cột “Comments”.

2 Tải trang:

• Sử dụng urllib.request.urlopen() hoặc requests.get() (nếu được phép cài đặt requests trong môi trường lab) để tải nội dung HTML của URL mục tiêu.

3 Phân tích HTML với BeautifulSoup:

• Tạo đối tượng BeautifulSoup từ nội dung HTML đã tải.

• Tìm thẻ <table> chính trong trang.

• Từ thẻ <table> đó, tìm tất cả các hàng (<tr>).

• Bỏ qua hàng tiêu đề nếu có (thường là hàng đầu tiên).

• Trong mỗi hàng dữ liệu, tìm tất cả các ô dữ liệu (<td>).

4 Trích xuất và tính toán:

• Đối với mỗi hàng, lấy nội dung của ô “Comments” (thường là ô thứ hai hoặc thứ ba tùy thuộc vào cấu trúc bảng).

• Chuyển đổi nội dung này sang số nguyên (sử dụng int()). Hãy cẩn thận với khoảng trắng (.strip()) hoặc các ký tự không phải số. Sử dụng try-except ở đây để xử lý các giá trị không phải số nếu có!

• Cộng dồn các giá trị này vào một biến tổng.

• Đếm số lượng hàng dữ liệu hợp lệ.

5 In kết quả: In ra số lượng hàng và tổng giá trị đã tính được.

4. Câu Chuyện HaivanStory & Liên Hệ Thực Tế:

“Trong các phim khoa học viễn tưởng như ‘Ma Trận’, các AI có thể truy cập và điều khiển mọi thông tin trên mạng. Hay trong ‘Đội Đặc Nhiệm Vô Hình’, các hacker siêu việt có thể ‘đột nhập’ và lấy đi những dữ liệu tuyệt mật chỉ trong chớp mắt. Trong thế giới của chúng ta, Web Scraping chính là một phần nhỏ của khả năng đó.

Trong lĩnh vực Khoa học Dữ liệu và AI, Web Scraping là một công cụ cực kỳ hữu ích để thu thập dữ liệu khi không có API (Application Programming Interface) nào sẵn có. Ví dụ:

• Phân tích thị trường: Thu thập giá sản phẩm từ các trang thương mại điện tử để theo dõi biến động thị trường.

• Nghiên cứu khoa học: Trích xuất thông tin từ các trang báo cáo, nghiên cứu để tổng hợp kiến thức.

• Xây dựng cơ sở dữ liệu: Tự động điền dữ liệu vào cơ sở dữ liệu từ các nguồn công khai trên web.

• Phân tích cảm xúc (Sentiment Analysis): Thu thập bình luận từ các trang mạng xã hội hoặc diễn đàn để phân tích xu hướng và cảm xúc của công chúng.

Tuy nhiên, việc Web Scraping cũng có những ranh giới đạo đức và pháp lý. Giống như việc một AI phải tuân thủ ‘ba định luật về robot’, một người làm Web Scraping cũng cần tôn trọng quyền riêng tư, điều khoản dịch vụ của website, và không gây quá tải cho máy chủ. Đây là một kỹ năng mạnh mẽ, và như mọi sức mạnh, nó cần được sử dụng một cách có trách nhiệm.”

5. Tổng Kết & Hướng Đi Tiếp Theo:

Trong Bài 15 này, bạn đã mở ra một cánh cửa mới: Web Scraping. Bạn đã học cách:

• Hiểu khái niệm và quy trình cơ bản của việc thu thập dữ liệu từ web.

• Sử dụng thư viện urllib để tải nội dung trang web.

• Sử dụng BeautifulSoup để phân tích cú pháp HTML và trích xuất dữ liệu.

• Áp dụng các kỹ năng này để giải quyết bài toán trích xuất dữ liệu từ bảng.

Khả năng tương tác và trích xuất dữ liệu từ web là một kỹ năng cực kỳ giá trị trong nhiều lĩnh vực, đặc biệt là Data Science, Machine Learning, và các ứng dụng tự động hóa. Chương trình của bạn giờ đây có thể “đọc” được một phần của Internet!

Trong bài học tiếp theo, chúng ta sẽ tiếp tục hành trình “thám hiểm Internet” bằng cách tìm hiểu về Xử lý Dữ liệu JSON & Sử dụng API. Bạn sẽ học cách giao tiếp với các hệ thống và dịch vụ khác thông qua các giao diện lập trình ứng dụng, mở ra khả năng tích hợp không giới hạn cho các hệ thống AI của bạn!

6. Kêu Gọi Hành Động (Call to Action):

Bạn đã từng thử trích xuất dữ liệu từ trang web nào chưa? Bạn thấy tiềm năng của Web Scraping trong việc giải quyết vấn đề thực tế nào? Hãy chia sẻ ý tưởng hoặc câu hỏi của bạn trong phần bình luận bên dưới!

Đừng quên theo dõi HaivanStory Blog để không bỏ lỡ Bài 16: Xử lý Dữ liệu JSON & Sử dụng API – nơi chúng ta sẽ học cách giao tiếp với các “AI khác” trên Internet!

Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ nó với bạn bè và đồng đội để cùng nhau khai thác “Đại Dương Thông Tin” Internet!