Python là một trong các ngôn ngữ lập trình đơn giản nhưng cực kì mạnh trong khoa học dữ liệu. Bài viết này SmartData sẽ hướng dẫn các bạn cách thu thập dữ liệu web bằng Python. Cụ thể chúng ta sẽ thu thập dữ liệu về các bài báo được đăng trên các trang báo điện tử nổi tiếng thông qua RSS
RSS là gì?
RSS viết tắt của từ Really Simple Syndication – Đồng bộ hóa cực kì đơn giản
RSS là một tập tin thường được biểu diễn dưới dạng XML có nhiệm vụ tóm tắt thông tin giúp cho người đọc dễ dàng tìm kiếm cũng như cập nhật nội dung.
Bạn có thể tham khảo một số đường link RSS của một số trong báo điện tử phía dưới:
Trong khuôn khổ bài viết này, SmartData sẽ hướng dẫn các bạn cách viết một ứng dụng bằng Python để thu thập dữ liệu RSS trên một đường link của báo Vietnamnet. Cụ thể là link sau:
- https://ictnews.vietnamnet.vn/rss/thong-tin-truyen-thong/toan-van-phat-bieu.rss
Cần chuẩn bị những gì?
Để bắt đầu phát triển ứng dụng phân tích RSS trên bằng Python bạn cần chuẩn bị một số thứ sau:
- Môi trường phát triển ứng dụng Python -> Bạn có thể tham khảo bài viết này để tìm hiểu cách cài đặt môi trường phát triển ứng ụng Python trên máy tính windown
- IDE để viết mã nguồn Python -> Có thể lựa chọn một số IDE phổ biến của Python như PyCharm, anaconda, Visual Studio Code
- Kĩ năng thao tác cơ bản với ngôn ngữ lập trình Python
- Kĩ năng sử dụng một số thư viện như requests, csv, xml
Ý tưởng của ứng dụng
Ứng dụng sẽ có một số chức năng chính sau:
- Thu thập thông tin từ đường link: https://ictnews.vietnamnet.vn/rss/thong-tin-truyen-thong/toan-van-phat-bieu.rss
- Lưu trữ thông tin thu thập được vào một file có tên thong-tin-truyen-thong.xml
- Phân tích file thong-tin-truyen-thong.xml để tách ra các thông tin cần thiết bao gồm:
- Guid: Thông tin định dạng các item trong nội dung xml
- link: Đường dẫn chi tiết của bài báo
- PubDate: Ngày bài báo được publish
- title: Tiêu đề của bài viết
- description: Mô tả của bài viết
- media:content: File ảnh thumbnail của bài viết
- Lưu trữ thông tin vừa phân tích được ra một file dạng csv làm đầu vào cho quá trình làm sạch dữ liệu hoặc đầu vào cho các ứng dụng khác.
Viết mã nguồn
Tạo file fetch-rss.py
Sau khi đã cài đặt môi trường thành công. Hãy bắt tay vào tạo một file fetch-rss.py. Đây là sẽ file chứa phần mã nguồn ứng dụng của bạn
Import các thư viện cần dùng
Ứng dụng nhỏ này sẽ cần sử dụng một số thư viện như requests, csv, xml. Để sử dụng các bạn thực hiện import các thư viện này vào file mã nguồn
import requests import csv import xml.etree.ElementTree as et
Viết các hàm thu thập, phân tích và lưu trữ
Hàm Thu thập dữ liệu từ link RSS
# Truy cập nội dung link rss và tải nội dung xuống file thong-tin-truyen-thong.xml def loadRSS(url, fileName): response = requests.get(url) with open(fileName, 'wb') as f: f.write(response.content)
Hàm đẩy dữ liệu thu thập được ra file CSV
def savetoCSV(newsitems, filename): fields = [ 'guid', 'link', 'pubDate', 'category', 'title', 'description', 'media', ] # Viết dữ liệu ra file csv with open(filename, 'w', encoding='utf-8') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=fields) writer.writerows(newsitems)
Hàm phân tích dữ liệu thu thập được
def parseRSS(xmlFileName): rssTree = et.parse(xmlFileName) root = rssTree.getroot() newsitems = [] for item in root.findall('./channel/item'): news = {} for child in item: if child.tag == '{http://search.yahoo.com/mrss/}content': news['media'] = child.attrib['url'] else: news[child.tag] = child.text newsitems.append(news) return newsitems
Hàm main để chạy ứng dụng
def main(): loadRSS( "https://ictnews.vietnamnet.vn/rss/thong-tin-truyen-thong/toan-van-phat-bieu.rss", "thong-tin-truyen-thong.xml") newsitems = parseRSS("thong-tin-truyen-thong.xml") savetoCSV(newsitems, 'thong-tin-truyen-thong.csv') if __name__ == "__main__": main()
Chạy ứng dụng
Để thực hiện chạy ứng dụng, bạn gõ lệnh py fetch-rss.py trên cửa sổ terminal.
Kết quả
Sau khi ứng dụng chạy thành công, Đây sẽ là kết quả bạn nhận được
File thong-tin-truyen-thong.xml
File thong-tin-truyen-thong.csv
Kết luận
Như vậy bài viết trên SmartData đã hướng dẫn các bạn cách cơ bản để xây dựng một ứng dụng thu thập dữ liệu web bằng Python. Trên thực tế các bài toán thu thập dữ liệu khá phức tạp và đòi hỏi nhiều công đoạn khác nữa. Nếu có bất cứ thắc mắc nào đừng ngần ngại để lại comment xuống phía dưới.
Nếu bạn là newbie có thể tham khảo bài viết này để tìm hiểu lộ trình học DA trong 6 tháng của SmartData