MỤC LỤC DANH MỤC HÌNH ẢNH........................................................................... 1 LỜI MỞ ĐẦU.............................................................................................. 3 GIỚI THIỆU VỀ ĐƠN VỊ THỰC TẬP.................................................... 4 CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ ĐỀ TÀI .................................. 6 1.1 Lý do chọn đề tài ................................................................................. 6 1.2 Mục tiêu của đề tài............................................................................... 7 1.3 Phạm vi nghiên cứu của đề tài............................................................. 7 1.3.1 Ngôn ngữ lập trình và công cụ...................................................... 7 1.3.2 Lĩnh vực và nguồn dữ liệu............................................................. 8 1.3.3 Thời gian nghiên cứu .................................................................... 8 1.3.4 Đối tượng và quy mô nghiên cứu .................................................. 8 1.3.5 Giới hạn nghiên cứu...................................................................... 9 CHƯƠNG 2: TỔNG QUAN VỀ WEB SCRAPING.............................. 10 2.1 Khái niệm và ứng dụng Web Scraping.............................................. 10 2.1.1 Khái niệm .................................................................................... 10 2.1.2 Ứng dụng..................................................................................... 10 2.2 Các phương pháp và kỹ thuật Web Scraping .................................... 11 2.2.1 Các phương pháp ........................................................................ 11 2.2.2 Kỹ thuật Web Scraping................................................................ 12 2.3 Những thách thức và rủi ro khi thực hiện.......................................... 12 2.3.1 Thách thức khi thực hiện Web Scraping ..................................... 12 2.3.2 Rủi ro pháp lý và đạo đức ........................................................... 13 CHƯƠNG 3: GIỚI THIỆU VỀ PYTHON VÀ CÁC THƯ VIỆN WEB SCRAPING................................................................................................ 14 3.1 Tổng quan về Python......................................................................... 14 8 3.1.1 Lịch sử hình thành....................................................................... 14 3.1.2 Một vài sự thật thú vị về Python.................................................. 15 3.1.3 Đặc tính của Python.................................................................... 16 3.1.4 Một số ứng dụng của Python ...................................................... 17 3.2 Lý do chọn Python cho việc Web Scraping ...................................... 19 3.3 Các thư viện phổ biến trong Web Scraping....................................... 20 3.3.1 BeautifulSoup .............................................................................. 20 3.3.2 Scrapy.......................................................................................... 21 3.3.3 Selenium ...................................................................................... 23 3.3.4 Request ........................................................................................ 25 3.3.5 Ưu và nhược điểm của từng thư viện .......................................... 26 CHƯƠNG 4: TRIỂN KHAI MÃ WEB SCRAPING BẰNG PYTHON ..................................................................................................................... 29 4.1 Chuẩn bị môi trường và công cụ ....................................................... 29 4.2 Thực hiện xây dựng chương trình code thử nghiệm ......................... 30 4.3 Cải tiến Code thử nghiệm thành Automation.................................... 33 4.4 Lưu trữ dữ liệu và xử lý các vấn đề thường gặp................................ 38 CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN......................
GIỚI THIỆU CHUNG VỀ ĐỀ TÀI
Lý do chọn đề tài
Việc chọn đề tài này một phần cũng xuất phát từ thực tế rằng web scraping là một trong những công việc chính mà tôi được giao trong quá trình thực tập Trong quá trình thực tập, tôi đã trực tiếp tham gia vào việc thu thập và phân tích dữ liệu từ các nguồn web, điều này cho thấy sự cần thiết và tầm quan trọng của việc tự động hóa quy trình này để tiết kiệm thời gian và nâng cao hiệu quả
Không chỉ là một phần quan trọng trong công việc thực tập của tôi, web scraping còn trở thành một công cụ thiết yếu trong thời đại số hiện nay Hầu hết các công ty đang cần phải thu thập và xử lý lượng lớn thông tin từ internet để hỗ trợ các quyết định kinh doanh, nghiên cứu thị trường, và phân tích cạnh tranh Python, với các thư viện như BeautifulSoup, Scrapy, và Selenium, đã chứng tỏ là công cụ mạnh mẽ và linh hoạt trong việc thực hiện các tác vụ web scraping Đề tài này không chỉ giúp chúng ta áp dụng và mở rộng kiến thức đã học mà còn cung cấp cái nhìn sâu hơn về cách thức tối ưu hóa quy trình thu thập dữ liệu trong môi trường thực tế,
7 đáp ứng nhu cầu ngày càng tăng của các doanh nghiệp trong thời đại kỹ thuật số.
Mục tiêu của đề tài
Mục tiêu chính của đề tài là:
• Cung cấp kiến thức cơ bản và nâng cao về Python, Web Scraping bao gồm các khái niệm, kỹ thuật và công cụ sử dụng
• Hướng dẫn cách sử dụng Python và các thư viện liên quan để xây dựng các đoạn mã để Web Scraping tự động
• Triển khai xây dựng code vào thực tế để giúp người đọc nắm vững kỹ năng và có thể áp dụng vào thực tế
• Đánh giá và so sánh hiệu quả của các phương pháp khác nhau
• Tạo ra một tài liệu tham khảo chi tiết và hữu ích cho những ai quan tâm đến việc ứng dụng Python trong Web Scraping.
Phạm vi nghiên cứu của đề tài
Phạm vi nghiên cứu của đề tài này bao gồm các nội dung sau:
1.3.1 Ngôn ngữ lập trình và công cụ
Hình 1.2 Ngôn ngữ lập trình Python
• Sử dụng ngôn ngữ lập trình Python và các thư viện hỗ trợ Web Scraping như BeautifulSoup, Scrapy, Selenium
• Sử dụng các công cụ hỗ trợ như IDE (Integrated Development Environment) và các trình duyệt (browser) để kiểm tra và thu thập dữ liệu
1.3.2 Lĩnh vực và nguồn dữ liệu
• Tập trung vào việc thu thập dữ liệu từ các trang web (24hmoney) thuộc nhiều lĩnh vực khác nhau như: tài chính, ngân hàng, xây dựng, bất động sản, đồ uống,…
• Chỉ thu thập dữ liệu từ các trang web công khai, không xâm phạm vào các trang web yêu cầu quyền truy cập hoặc các trang web bị bảo vệ bằng mật khẩu
• Đề tài được thực hiện trong khoảng thời gian từ tháng 01/06 đến tháng 28/07 năm 2024
• Phạm vi thời gian này bao gồm các giai đoạn nghiên cứu lý thuyết, thiết kế, triển khai, thử nghiệm, và đánh giá
1.3.4 Đối tượng và quy mô nghiên cứu
• Đối tượng nghiên cứu là các trang web có cấu trúc HTML và dữ liệu cần thu thập phục vụ cho các mục tiêu phân tích và nghiên cứu cụ thể
• Quy mô dữ liệu sẽ được giới hạn trong khả năng xử lý của hệ thống và tài nguyên có sẵn, đảm bảo việc thu thập và xử lý dữ liệu có thể thực hiện được trong thời gian và nguồn lực cho phép
• Không đi sâu vào các khía cạnh pháp lý và đạo đức của việc thu thập dữ liệu từ các trang web
• Không bao gồm việc thu thập dữ liệu từ các trang web có yêu cầu quyền truy cập đặc biệt hoặc các trang web có bảo vệ nghiêm ngặt
• Các phương pháp và kỹ thuật Web Scraping sẽ được giới hạn trong những công cụ, thư viện Python phổ biến và dễ tiếp cận
TỔNG QUAN VỀ WEB SCRAPING
Khái niệm và ứng dụng Web Scraping
Hình 2.1 Sơ lược về Web Scraping
Web scraping là quá trình tự động trích xuất dữ liệu từ các trang web Thay vì phải thu thập dữ liệu một cách thủ công, web scraping sử dụng các công cụ và kỹ thuật lập trình để tự động hóa việc truy cập, lấy dữ liệu và lưu trữ thông tin từ các trang web
Web scraping có nhiều ứng dụng trong các lĩnh vực khác nhau:
• Thương mại điện tử: Thu thập thông tin về giá cả, sản phẩm, và đánh giá khách hàng từ các trang web bán hàng để phân tích và cạnh tranh
• Nghiên cứu thị trường: Thu thập dữ liệu về xu hướng thị trường, hành vi người tiêu dùng, và phân tích đối thủ cạnh tranh
• Phân tích dữ liệu: Thu thập dữ liệu từ các nguồn web để phân tích, trực quan hóa, và đưa ra các dự đoán
• Báo chí và truyền thông: Thu thập tin tức, bài viết, và các thông tin khác từ nhiều nguồn để tổng hợp và phân tích.
Các phương pháp và kỹ thuật Web Scraping
Các phương pháp thông dụng:
• Parsing HTML : Phân tích cấu trúc HTML của trang web và sử dụng các công cụ như BeautifulSoup để trích xuất thông tin
• Sử dụng API: Một số trang web cung cấp API cho phép truy cập và lấy dữ liệu một cách chính thống và dễ dàng hơn
• Selenium: Sử dụng Selenium để tự động hóa việc duyệt web, đặc biệt là khi trang web sử dụng nhiều JavaScript để hiển thị nội dung
• Scrapy: Sử dụng framework Scrapy để xây dựng các trình thu thập dữ liệu mạnh mẽ và hiệu quả
Hình 2.2 Kỹ Thuật Web Scraping
Các kỹ thuật phổ biến:
• Phân tích cấu trúc DOM (Document Object Model): Hiểu và truy cập các phần tử HTML dựa trên cấu trúc DOM
• XPaths và CSS Selectors: Sử dụng XPaths và CSS Selectors để tìm và trích xuất các phần tử cụ thể từ trang web
• Xử lý dữ liệu: Làm sạch và chuẩn hóa dữ liệu thu thập được để chuẩn bị cho các bước phân tích tiếp theo.
Những thách thức và rủi ro khi thực hiện
2.3.1 Thách thức khi thực hiện Web Scraping
Những thách thức có thể gặp phải trong quá trình thực hiện:
• Thay đổi cấu trúc trang web: Các trang web có thể thay đổi cấu trúc
HTML của chúng mà không thông báo, làm cho các script scraping bị lỗi
• Hạn chế truy cập: Một số trang web có thể giới hạn số lần truy cập hoặc sử dụng CAPTCHA để ngăn chặn các bot tự động
• Tốc độ và hiệu suất: Web scraping có thể tốn nhiều thời gian và tài nguyên, đặc biệt là khi thu thập dữ liệu từ nhiều nguồn hoặc các trang web phức tạp
2.3.2 Rủi ro pháp lý và đạo đức
Hình 2.3 Rủi ro về pháp lý
Có thể dẫn đến những rủi ro pháp lý và đạo đức như sau:
• Vi phạm điều khoản dịch vụ: Một số trang web có điều khoản dịch vụ cấm việc thu thập dữ liệu tự động
• Quyền riêng tư và bản quyền: Thu thập dữ liệu cá nhân hoặc nội dung có bản quyền mà không được phép có thể dẫn đến các vấn đề pháp lý và đạo đức
GIỚI THIỆU VỀ PYTHON VÀ CÁC THƯ VIỆN WEB
Tổng quan về Python
Python là một ngôn ngữ lập trình bậc cao, dễ học, và linh hoạt, được tạo ra bởi Guido van Rossum và ra mắt lần đầu vào năm 1991 Python nổi bật với cú pháp rõ ràng và dễ hiểu, giúp cho việc viết mã trở nên dễ dàng hơn, đặc biệt là đối với người mới bắt đầu
Hình 3.2 Người sáng lập Python
• Từ những năm đầu 1991: Python được Guido van Rossum tạo ra vào cuối những năm 1980 và phát hành lần đầu vào năm 1991 Ban đầu, Python không phải là một ngôn ngữ phổ biến như hiện nay, mà chủ yếu được sử dụng trong môi trường học thuật và nghiên cứu
• Trong những năm 2000: Trong suốt những năm 2000, Python bắt đầu thu hút sự chú ý nhờ vào sự đơn giản, dễ đọc, và khả năng ứng dụng rộng rãi Các phiên bản mới của Python liên tục được phát hành, cải thiện hiệu suất và thêm nhiều tính năng mới
• Khoảng từ năm 2010 trở đi: Python bắt đầu trở nên cực kỳ phổ biến nhờ vào sự bùng nổ của big data và khoa học dữ liệu Các thư viện mạnh mẽ như NumPy, pandas, Matplotlib, và đặc biệt là scikit-learn, TensorFlow và PyTorch đã giúp Python trở thành công cụ quan trọng trong các lĩnh vực này
3.1.2 Một vài sự thật thú vị về Python
• Python được phát triển vào cuối những năm 1980 bởi Guido van Rossum tại Viện Nghiên cứu Quốc gia về Toán học và Khoa học Máy tính ở Hà Lan với tư cách là người kế thừa ngôn ngữ ABC có khả năng xử lý và giao tiếp ngoại lệ
• Python có nguồn gốc từ các ngôn ngữ lập trình như ABC, Modula 3, small talk, Algol-68
• Van Rossum đã chọn tên Python cho ngôn ngữ mới từ một chương trình truyền hình, Monty Python’s Flying Circus
• Trang Python là một tệp có phần mở rộng py chứa có thể là sự kết hợp của Thẻ HTML và tập lệnh Python
• Vào tháng 12 năm 1989, người sáng tạo đã phát triển trình thông dịch python đầu tiên như một sở thích, và sau đó vào ngày 16 tháng
10 năm 2000, Python 2.0 được phát hành với nhiều tính năng mới
• Vào ngày 3 tháng 12 năm 2008, Python 3.0 được phát hành với nhiều thử nghiệm hơn và bao gồm các tính năng mới
• Python là một ngôn ngữ kịch bản mã nguồn mở
• Python là mã nguồn mở, có nghĩa là bất kỳ ai cũng có thể tải xuống miễn phí từ trang chủ và sử dụng nó để phát triển các chương trình
Mã nguồn của nó có thể được truy cập và sửa đổi theo yêu cầu trong dự án
• Python là một trong những ngôn ngữ chính thức tại Google
Python đang trở nên phổ biến trong cộng đồng lập trình nhờ có các đặc tính sau:
• Ngôn ngữ thông dịch: Python được xử lý trong thời gian chạy bởi Trình thông dịch Python
• Ngôn ngữ hướng đối tượng: Nó hỗ trợ các tính năng và kỹ thuật lập trình hướng đối tượng
• Ngôn ngữ lập trình tương tác: Người dùng có thể tương tác trực tiếp với trình thông dịch python để viết chương trình
• Ngôn ngữ dễ học: Python rất dễ học, đặc biệt là cho người mới bắt đầu
• Cú pháp đơn giản: Việc hình thành cú pháp Python rất đơn giản và dễ hiểu, điều này cũng làm cho nó trở nên phổ biến
• Dễ đọc: Mã nguồn Python được xác định rõ ràng và có thể nhìn thấy bằng mắt
• Di động: Mã Python có thể chạy trên nhiều nền tảng phần cứng có cùng giao diện
• Có thể mở rộng: Người dùng có thể thêm các mô-đun cấp thấp vào trình thông dịch Python
• Có thể cải tiến: Python cung cấp một cấu trúc cải tiến để hỗ trợ các chương trình lớn sau đó là shell-script
3.1.4 Một số ứng dụng của Python
Hình 3.3 Một số ứng dụng của Python
Python thường được sử dụng để phát triển trang web và phần mềm, tự động hóa tác vụ, phân tích dữ liệu và trực quan hóa dữ liệu Vì tương đối dễ học, Python đã được nhiều người không phải là lập trình viên như kế toán và nhà khoa học áp dụng cho nhiều công việc hàng ngày, chẳng hạn như tổ chức tài chính
+ Phân tích dữ liệu và học máy:
• Python đã trở thành một yếu tố chính trong khoa học dữ liệu, cho phép các nhà phân tích dữ liệu và các chuyên gia khác sử dụng ngôn ngữ này để thực hiện các phép tính thống kê phức tạp, tạo trực quan hóa dữ liệu, xây dựng thuật toán học máy, thao tác và phân tích dữ liệu cũng như hoàn thành các nhiệm vụ khác liên quan đến dữ liệu
• Python có thể xây dựng nhiều dạng trực quan hóa dữ liệu khác nhau, chẳng hạn như biểu đồ đường và thanh, biểu đồ hình tròn, biểu đồ 3D Python cũng có một số thư viện cho phép các lập trình viên viết
18 chương trình để phân tích dữ liệu và học máy nhanh hơn và hiệu quả hơn, như TensorFlow và Keras
• Python thường được sử dụng để phát triển back-end của trang web hoặc ứng dụng—những phần mà người dùng không nhìn thấy Vai trò của Python trong phát triển web có thể bao gồm gửi dữ liệu đến và đi từ máy chủ, xử lý dữ liệu và giao tiếp với cơ sở dữ liệu, định tuyến URL và đảm bảo tính bảo mật Python cung cấp một số khuôn khổ để phát triển web Những cái thường được sử dụng bao gồm Django và Flask
• Một số công việc phát triển web sử dụng Python bao gồm kỹ sư phụ trợ, nhà phát triển Python, kỹ sư phần mềm và kỹ sư DevOps
+ Tự động hoá và phát triển phần mềm
• Nếu bạn thấy mình thực hiện một nhiệm vụ lặp đi lặp lại, bạn có thể làm việc hiệu quả hơn bằng cách tự động hóa nó bằng Python Quá trình viết code được sử dụng để xây dựng các quy trình tự động này được gọi là viết script Trong thế giới mã hóa, tự động hóa có thể được sử dụng để kiểm tra lỗi trên nhiều tệp, chuyển đổi tệp, thực hiện phép toán đơn giản và loại bỏ các bản sao trong dữ liệu
• Python thậm chí có thể được sử dụng bởi những người mới bắt đầu để tự động hóa các tác vụ đơn giản trên máy tính—chẳng hạn như đổi tên tệp, tìm và tải xuống nội dung trực tuyến hoặc gửi email hoặc văn bản theo khoảng thời gian mong muốn
• Trong phát triển phần mềm, Python có thể hỗ trợ các tác vụ như kiểm soát bản dựng, theo dõi lỗi và thử nghiệm Với Python, các nhà phát triển phần mềm có thể tự động kiểm tra các sản phẩm hoặc tính năng mới Một số công cụ Python được sử dụng để kiểm thử phần mềm bao gồm Green và Requestium
Lý do chọn Python cho việc Web Scraping
Web Scraping là quá trình tự động thu thập thông tin từ các trang web Python là một lựa chọn phổ biến cho việc web scraping bởi nhiều lý do:
• Dễ học và sử dụng: Python có cú pháp đơn giản và dễ hiểu, giúp cho việc bắt đầu với web scraping trở nên dễ dàng hơn, đặc biệt đối với người mới học lập trình
• Thư viện mạnh mẽ: Python có nhiều thư viện hỗ trợ mạnh mẽ cho việc web scraping như BeautifulSoup, Scrapy, và Selenium, giúp việc thu thập và phân tích dữ liệu từ web trở nên đơn giản và hiệu quả
• Cộng đồng hỗ trợ: Python có một cộng đồng lập trình viên lớn và tích cực, luôn sẵn sàng hỗ trợ và chia sẻ kiến thức thông qua các diễn đàn, blog, và tài liệu hướng dẫn
• Khả năng mở rộng: Python dễ dàng tích hợp với các công cụ và thư viện khác như Pandas, NumPy, và Matplotlib để xử lý và phân tích dữ liệu sau khi thu thập
• Tài liệu phong phú: Python có rất nhiều tài liệu hướng dẫn, blog, và diễn đàn hỗ trợ, giúp người dùng dễ dàng tìm kiếm thông tin và giải quyết các vấn đề gặp phải trong quá trình làm việc
• Tích hợp dễ dàng với các công cụ khác: Python dễ dàng tích hợp với các công cụ và thư viện khác, cho phép lập trình viên xây dựng các hệ thống phức tạp và thực hiện các tác vụ nâng cao như phân tích dữ liệu, học máy, và trí tuệ nhân tạo
Các thư viện phổ biến trong Web Scraping
BeautifulSoup là một thư viện Python được sử dụng để phân tích cú pháp HTML và XML, giúp trích xuất dữ liệu một cách dễ dàng từ các trang web Nó cung cấp các phương pháp đơn giản để điều hướng, tìm kiếm và sửa đổi cây phân tích cú pháp
+ Ví dụ minh họa về trích xuất các file xlsx, pdf,
Hình 3.4 Ví dụ minh họa về BeautifulSoup
• requests.get(url): Gửi yêu cầu HTTP GET tới URL và nhận về phản hồi
• BeautifulSoup(response.text, 'html.parser'): Tạo đối tượng
BeautifulSoup từ nội dung HTML
• soup.title.string: Trích xuất tiêu đề trang
• soup.find_all('a'): Tìm tất cả các thẻ (liên kết)
➔ Tóm lại quy trình tổng thể:
• Import thư viện: Import BeautifulSoup từ thư viện bs4 và requests để làm việc với HTML và gửi yêu cầu HTTP
• Gửi yêu cầu HTTP GET: Tới URL của trang web mà bạn muốn thu thập dữ liệu và lưu phản hồi
• Tạo đối tượng BeautifulSoup: Từ nội dung HTML của phản hồi để dễ dàng phân tích và trích xuất dữ liệu
• Trích xuất tiêu đề trang web: Bằng cách tìm và lấy nội dung của thẻ
• Trích xuất tất cả các liên kết: Bằng cách tìm tất cả các thẻ và lấy giá trị thuộc tính href của chúng để liệt kê tất cả các URL liên kết trên trang
Scrapy là một framework mạnh mẽ và linh hoạt cho việc thu thập dữ liệu từ web Nó cho phép bạn xây dựng các spider để tự động hóa quá trình thu thập dữ liệu, xử lý, và lưu trữ dữ liệu
Hình 3.5 Ví dụ minh họa về Scrapy
• start_urls: Danh sách các URL mà spider sẽ bắt đầu thu thập dữ liệu
• parse(self, response): Phương thức xử lý phản hồi từ các URL Ở đây, nó trích xuất tiêu đề trang và trả về dưới dạng dictionary
• Import thư viện Scrapy: Sử dụng Scrapy để thu thập và xử lý dữ liệu từ trang web
• Định nghĩa lớp Spider: Tạo một lớp Spider mới tên là
ExampleSpider, kế thừa từ lớp Spider của Scrapy
• Đặt tên cho Spider: Đặt thuộc tính name của Spider là example
• Xác định URL bắt đầu: Đặt thuộc tính start_urls với danh sách các URL mà Spider sẽ bắt đầu thu thập dữ liệu
• Định nghĩa phương thức parse: Phương thức này xử lý phản hồi từ các URL trong start_urls
• Trích xuất tiêu đề trang: Sử dụng bộ chọn CSS để tìm và trích xuất văn bản của tất cả các phần tử title
• Trả về dữ liệu: Trả về dictionary chứa tiêu đề trang bằng yield
• Lưu mã trong tệp example_spider.py
• Mở terminal và điều hướng đến thư mục chứa tệp example_spider.py
• Chạy lệnh sau trong terminal để khởi động Spider: “scrapy runspider example_spider.py”
Selenium là một công cụ tự động hóa trình duyệt, cho phép bạn mô phỏng các hành động của người dùng như click, điền form, và điều hướng trên các trang web Điều này rất hữu ích cho việc thu thập dữ liệu từ các trang web có nội dung động hoặc cần tương tác phức tạp + Ví dụ minh họa:
Hình 3.6 Ví dụ minh họa về Selenium
• webdriver.Chrome(): Tạo đối tượng trình điều khiển cho
• driver.get(url): Điều hướng đến URL
• driver.title: Lấy tiêu đề trang
• driver.find_element_by_tag_name('a'): Tìm thẻ đầu tiên và click vào nó
• driver.quit(): Đóng trình duyệt
• Import thư viện Selenium: Sử dụng Selenium để tự động hóa trình duyệt web
• Thiết lập trình điều khiển cho trình duyệt: Tạo đối tượng trình điều khiển cho Chrome (hoặc trình duyệt khác nếu cần)
• Điều hướng đến URL: Mở trang web mục tiêu bằng phương thức get()
• Lấy tiêu đề trang web: Trích xuất tiêu đề của trang hiện tại bằng thuộc tính title
• Tìm và tương tác với phần tử: Tìm phần tử đầu tiên có thẻ và click vào nó
• Đóng trình duyệt: Đóng toàn bộ cửa sổ trình duyệt và kết thúc phiên làm việc
• Để chạy đoạn mã này, bạn cần cài đặt Selenium và trình điều khiển ChromeDriver Bạn có thể cài đặt Selenium bằng pip:
• Tải xuống ChromeDriver từ trang web chính thức và thêm nó vào biến môi trường PATH của hệ thống
• Đoạn mã trên chỉ là một ví dụ cơ bản Bạn có thể sử dụng Selenium để tự động hóa nhiều tác vụ khác như điền form, lấy dữ liệu động, xử lý JavaScript, và nhiều hơn nữa
Requests là một thư viện mạnh mẽ và dễ sử dụng cho việc gửi các yêu cầu HTTP/1.1, cho phép bạn tải về nội dung của các trang web và làm việc với các yêu cầu HTTP một cách đơn giản
Hình 3.7 Ví dụ minh họa về Request
• requests.get(url): Gửi yêu cầu HTTP GET tới URL
• response.status_code: Kiểm tra mã trạng thái HTTP của phản hồi
• response.text: Lấy nội dung HTML của trang
• Import thư viện Requests: Sử dụng Requests để gửi các yêu cầu
• Gửi yêu cầu HTTP GET: Tới URL của trang web mà bạn muốn thu thập dữ liệu và lưu phản hồi vào biến response
• Kiểm tra mã trạng thái của phản hồi: Sử dụng thuộc tính status_code để kiểm tra kết quả của yêu cầu
• Lấy nội dung trang web: Sử dụng thuộc tính text để trích xuất nội dung HTML của trang và lưu vào biến content
• In nội dung trang web: In 100 ký tự đầu tiên của nội dung HTML ra màn hình để xem trước nội dung
3.3.5 Ưu và nhược điểm của từng thư viện
• Dễ sử dụng: Cú pháp đơn giản và dễ học, phù hợp cho người mới bắt đầu
• Xử lý HTML bị lỗi: Có khả năng xử lý tốt các tài liệu HTML không chuẩn hoặc bị lỗi
• Tích hợp dễ dàng: Kết hợp tốt với các thư viện khác như
• Hiệu suất: Không hiệu quả cho các dự án lớn với lượng dữ liệu lớn vì tốc độ xử lý chậm hơn so với một số thư viện khác
• Chức năng hạn chế: Không có khả năng tự động thu thập dữ liệu từ nhiều trang hoặc xử lý JavaScript
• Hiệu suất cao: Tối ưu cho việc thu thập dữ liệu từ nhiều trang web với lượng dữ liệu lớn
• Tính linh hoạt: Cung cấp nhiều công cụ và tính năng mạnh mẽ cho việc thu thập và xử lý dữ liệu
• Tự động hóa: Hỗ trợ tự động hóa việc thu thập dữ liệu từ nhiều trang
• Độ phức tạp: Cấu trúc và cú pháp phức tạp hơn, có thể gây khó khăn cho người mới bắt đầu
• Yêu cầu cấu hình: Cần cấu hình và thiết lập nhiều hơn so với các thư viện khác
• Tương tác trình duyệt: Có khả năng tương tác với trang web như một người dùng thực, bao gồm việc xử lý JavaScript, điền form, và click vào các nút
• Hỗ trợ nhiều trình duyệt: Có thể làm việc với nhiều loại trình duyệt khác nhau như Chrome, Firefox, Safari, v.v
• Hiệu suất: Tốc độ chậm hơn so với các phương pháp không sử dụng trình duyệt vì phải tải và điều khiển toàn bộ trình duyệt
• Phức tạp: Cấu hình và thiết lập ban đầu có thể phức tạp hơn, đặc biệt khi cần tương tác với các yếu tố động
• Đơn giản và dễ sử dụng: Cú pháp dễ hiểu và thân thiện với người dùng
• Quản lý phiên làm việc: Có thể dễ dàng quản lý phiên làm việc và duy trì kết nối với các trang web
• Hỗ trợ đa dạng: Hỗ trợ tất cả các phương thức HTTP và có khả năng làm việc với dữ liệu JSON, tải lên tập tin, v.v
• Chức năng hạn chế: Không thể xử lý nội dung động hoặc JavaScript Chỉ phù hợp cho việc lấy nội dung HTML tĩnh
• Không tự động hóa: Không hỗ trợ các tính năng tự động hóa trình duyệt như Selenium
TRIỂN KHAI MÃ WEB SCRAPING BẰNG PYTHON
Chuẩn bị môi trường và công cụ
Trước khi sử dụng các thư viện Selenium, BeautifulSoup, và Requests để cào dữ liệu, bạn cần chuẩn bị một số công cụ và thiết lập môi trường Dưới đây là các bước chuẩn bị cơ bản:
+ Cài đặt Python: Đảm bảo bạn đã cài đặt Python trên máy tính của mình Bạn có thể tải Python từ python.org
+ Thiết lập môi trường ảo (Virtual Environment): Tạo và kích hoạt một môi trường ảo để quản lý các gói thư viện dễ dàng hơn
Hình 4.1 Thiết lập môi trường ảo + Cài đặt các thư viện cần thiết: Sử dụng pip để cài đặt các thư viện Selenium, BeautifulSoup, và Requests
Hình 4.2 Cài đặt các thư viện cần thiết
+ Cài đặt WebDriver cho Selenium:
• Selenium yêu cầu một WebDriver để tương tác với các trình duyệt web Ví dụ, nếu bạn sử dụng Chrome, bạn cần cài đặt ChromeDriver
• Tải ChromeDriver từ trang chủ ChromeDriver và đảm bảo nó tương thích với phiên bản Chrome mà bạn đang sử dụng
• Đặt ChromeDriver vào một thư mục và thêm thư mục đó vào biến môi trường PATH của hệ thống
+ Cài đặt trình duyệt (nếu cần): Đảm bảo bạn đã cài đặt trình duyệt web tương ứng (ví dụ: Chrome, Firefox) để Selenium có thể điều khiển
+ Kiểm tra các cài đặt: Kiểm tra xem các thư viện và WebDriver đã được cài đặt và hoạt động đúng cách
Hình 4.3 Kiểm tra các thư viện và WebDrive
Thực hiện xây dựng chương trình code thử nghiệm
Trước khi bước vào tự động hóa ta sẽ phải thử nghiệm với một đoạn chương trình code cơ bản để lấy dữ liệu từ web xem kết quả thu được là gì?
Và cần thêm các công cụ, thư viện nào khác để cải thiện chương trình code
31 đó lên tự động hóa cào dữ liệu theo danh sách các công ty có sẵn được truyền vào? Sau khi triển khai thì được đoạn chương trình code như sau:
Hình 4.4 Code thử nghiệm thu thập số liệu từ nguồn 24hmoney
• Như đã mô tả ở phần phạm vi nghiên cứu của đề tài bài cáo này tập trung vào thử nghiệm và cải tiến code để thu thập các số liệu từ trang web (24hmoney): https://24hmoney.vn/ (chủ yếu là dữ liệu ngành ngân hàng, tuy nhiên có thể thu thập với các ngành khác tương tự đối với trang web này)
• Đoạn code trên là sự kết hợp của 3 thư viện chính là Request (gửi yêu cầu và nhận phản hồi), BeautifulSoup (phân tích HTML của trang web để thu thập các dữ liệu cần thiết) và Pandas (xử lý và làm sạch các số liệu được lấy về) Nhưng với đoạn code thử nghiệm này thì chỉ có chức năng chính đó là tìm ra table chứa số liệu trong đường dẫn (url) đó và cào toàn bộ về nhưng nó gặp phải các điểm yếu cũng như các hạn chế về chức năng như sau:
+ Không thể tải tiếp tục cào số liệu ở các phần còn lại để tạo ra một bản đầy đủ nhất của báo cáo tài chính như: “Theo Năm” của
“Kết quả KD” và các mục lớn khác là “Cân đối KT” và “LC Tiền tệ” như thứ tự hình dưới:
Hình 4.5 Minh họa các thành phần đầy đủ của 1 báo cáo tài chính
Vì một bản báo cáo tài chính đầy đủ của một ngân hàng sẽ gồm có
3 phần chính là “Income Statement” (Kết quả kinh doanh),
“Balance Statement” (Cân đối kế toán) và “Cash Flow” (Lưu chuyển tiền tệ) nên đối với đoạn code thử nghiệm trên chỉ có thể cào toàn bộ data của đường dẫn nhất định về thành file excel
+ Với hạn chế thứ 2 cũng là một trong những hạn chế khó khăn nhất khi thu thập data từ trang web đó là một số trang web họ vẫn cho thu thập data của họ (không cấm tuyệt đối) tuy nhiên bên cạnh đó họ cũng không muốn chúng ta thu thập dữ liệu của họ một cách lạm dụng quá nhiều, hay sử dụng quá nhiều bot ảo để cào dẫn đến việc sập server, sập web → Giải pháp tối ưu khi họ vẫn open cho cào mà không muốn cào quá nhiều đó là sử dụng Java Script để làm che, ẩn đi các sự thay đổi của đường dẫn (url) khiến cho việc thu thập tự động trở nên vô cũng khó khăn và đòi hỏi người thu thập cần phải am hiểu về API hay các thành phần cấu trúc của một trang web (ngôn ngữ HTML)
→ Đó là lý do tại sao có bản thử nghiệm này, mục đích là để thấy được những khó khăn và hạn chế của việc thu thập dữ liệu từ các web động (có sử dụng Java Script để ẩn đường dẫn) từ đó nghiên cứu các phương pháp để có thể triển khai cào tự động
4.3 Cải tiến Code thử nghiệm thành Automation
Sau khi biết được các điểm hạn chế, những khó khăn gặp phải trong quá trình thu thập dữ liệu từ các trang web động như đã mô tả ở trên thì sau một thời gian nghiên cứu các giải pháp để giải quyết cho vấn đề này đó là kết với một thư viện được hỗ trợ khá là mạnh hiện nay là Selenium (Mục đích chính đó là tạo ra các con bot giả lập hành vi của người dùng khi click vào một tab nào đó thông qua CSS và sau đó cào dữ liệu ở trang đó về, sau khi cào hết thì lại tiếp tục giả lập người dùng click vào tab khác để cào tiếp cứ
34 như vậy cho đến khi hoàn tất việc thu thập được đầy đủ các dữ liệu chúng ta cần
Ta có đoạn chương trình code sau khi đã cải tiến như sau:
Hình 4.6 Part 1 của đoạn chương trình đã được cải tiến
Hình 4.7 Part 2 của đoạn chương trình đã được cải tiến
Hình 4.8 Part 3 của đoạn chương trình đã được cải tiến
Hình 4.9 Part 4 của đoạn chương trình đã được cải tiến Đoạn chương trình code đã được cải tiến thành Automation (bao gồm toàn bộ code 4 part như các hình trên) đã sử dụng Selenium khởi tạo WebDriver của Chorme để vừa cào vừa giả lập các cú click vào trang sau (nếu có) cũng như click vào “Theo Năm” và các mục lớn còn lại với mỗi mục lớn
38 tương ứng (Kết quả KD: IS) – (Cân đối KT: BS) – (LC Tiền tệ: CF) sau đó sẽ được xử theo và đưa về 1 format chung và lưu thành 1 file xlsx duy nhất chứa cả sheet IS, BS và CF Ngoài ra để cụ thể hơn cho việc Automation đó là ta sẽ đưa vào 1 danh sách tất cả các công ty theo ngành (dưới dạng mã công ty trên sàn chứng khoán) và chỉ cần run là bot sẽ tự động cào số liệu theo các công ty đã đưa vào trước đó Kết quả minh họa file kết quả như sau:
Hình 4.10 Kết quả minh họa về file xlsx đã được thu thập đầy đủ
4.4 Lưu trữ dữ liệu và xử lý các vấn đề thường gặp
Sau khi thu thập dữ liệu thì sẽ có thể sẽ gặp một số vấn đề có thể gặp trước khi đưa vào lưu trữ như sau:
+ Trường hợp 1: Giả sử ta có folder về ngành hóa chất và bên trong có rất nhiều folder công ty cùng với đó là rất nhiều file excel đã được cào tự động về như hình dưới:
Hình 4.11 Minh họa trường hợp 1
Vấn đề ở đây là nếu ít thì ta dễ dàng có thể lấy các file xlsx cùng tên vào đúng folder, tuy nhiên nếu số lượng lên đến mấy trăm công ty thì việc ngồi làm thủ công là di chuyển từng file vào đúng với folder là rất mất thời gian và làm việc không khoa học → Chính vì thế mà giải pháp được đưa ra ở đây đó là sử dụng thư viện os và shutil của Python (Cả 2 đều là thư viện để thao tác với hệ điều hành máy tính ví dụ như: đổi tên, di chuyển, sao chép, xóa, thư mục hoặc file hoặc bất kì loại data nào) để tiếp tục tự động làm các công việc như trên thay vì làm thủ công (Python không chỉ cào data, xử lý và làm sạch dữ liệu mà Python còn làm được rất nhiều công việc khác mà ít ai nghĩ đến Đó là lý do vì sao mà Python được coi là một trong những ngôn ngữ mạnh và phổ biến nhất hiện tại là vậy) Sau đây là đoạn mã để phục vụ cho việc điền file trên:
Hình 4.12 Đoạn mã xử lý vấn đề di chuyển file vào đúng folder
Hình 4.13 Kết quả xử lý
+ Trường hợp 2: Đối với việc thu thập các file pdf thuộc các báo cáo tài chính từ các web như vietstock thì phần lớn khoảng 70-80% tên các file sẽ không có sự đồng nhất và có thể khác nhau qua mỗi năm, tuy nhiên với một số báo cáo càng gần thì tỷ lệ đó ít đi do các công ty đã có quy định về 1 format chung theo quy định đặt tên Vậy giả sử khi có sự yêu cầu từ cấp trên về việc đưa tất cả các tên này về một dạng đồng nhất và nên ghi tắt không như để tên quá dài như hình dưới đây:
Hình 4.14 Minh họa trường hợp 2
Và họ yêu cầu đưa về format chung như sau:
Hình 4.15 Yêu cầu Format viết tắt chung
Vậy tương tự như trường hợp 1, chúng ta không thể ngồi sửa tay từng tên file được nếu số lượng file quá lớn → Thư viện os vẫn là một trong những giải pháp tốt nhất cho trường hợp này Đoạn mã như sau:
Hình 4.16 Part 1 của đoạn mã tự động đổi tên
Hình 4.17 Part 2 của đoạn mã tự động đổi tên
Sau khi run thì trong thời gian rất nhanh là toàn bộ file trong folder đã được đổi theo format như sau:
Hình 4.18 Kết quả của minh họa đổi tên tự động
+ Ngoài ra còn rất nhiều trường hợp khác mà chúng ta cần xử lý trước khi đưa vào lưu trữ trong cơ sở dữ liệu, tuy nhiên thì 2 trường hợp trên vẫn là 2 trường hợp phổ biến thường gặp nhất trong quá trình thu thập dữ liệu số liệu, data,
Lưu trữ dữ liệu và xử lý các vấn đề thường gặp
Sau khi thu thập dữ liệu thì sẽ có thể sẽ gặp một số vấn đề có thể gặp trước khi đưa vào lưu trữ như sau:
+ Trường hợp 1: Giả sử ta có folder về ngành hóa chất và bên trong có rất nhiều folder công ty cùng với đó là rất nhiều file excel đã được cào tự động về như hình dưới:
Hình 4.11 Minh họa trường hợp 1
Vấn đề ở đây là nếu ít thì ta dễ dàng có thể lấy các file xlsx cùng tên vào đúng folder, tuy nhiên nếu số lượng lên đến mấy trăm công ty thì việc ngồi làm thủ công là di chuyển từng file vào đúng với folder là rất mất thời gian và làm việc không khoa học → Chính vì thế mà giải pháp được đưa ra ở đây đó là sử dụng thư viện os và shutil của Python (Cả 2 đều là thư viện để thao tác với hệ điều hành máy tính ví dụ như: đổi tên, di chuyển, sao chép, xóa, thư mục hoặc file hoặc bất kì loại data nào) để tiếp tục tự động làm các công việc như trên thay vì làm thủ công (Python không chỉ cào data, xử lý và làm sạch dữ liệu mà Python còn làm được rất nhiều công việc khác mà ít ai nghĩ đến Đó là lý do vì sao mà Python được coi là một trong những ngôn ngữ mạnh và phổ biến nhất hiện tại là vậy) Sau đây là đoạn mã để phục vụ cho việc điền file trên:
Hình 4.12 Đoạn mã xử lý vấn đề di chuyển file vào đúng folder
Hình 4.13 Kết quả xử lý
+ Trường hợp 2: Đối với việc thu thập các file pdf thuộc các báo cáo tài chính từ các web như vietstock thì phần lớn khoảng 70-80% tên các file sẽ không có sự đồng nhất và có thể khác nhau qua mỗi năm, tuy nhiên với một số báo cáo càng gần thì tỷ lệ đó ít đi do các công ty đã có quy định về 1 format chung theo quy định đặt tên Vậy giả sử khi có sự yêu cầu từ cấp trên về việc đưa tất cả các tên này về một dạng đồng nhất và nên ghi tắt không như để tên quá dài như hình dưới đây:
Hình 4.14 Minh họa trường hợp 2
Và họ yêu cầu đưa về format chung như sau:
Hình 4.15 Yêu cầu Format viết tắt chung
Vậy tương tự như trường hợp 1, chúng ta không thể ngồi sửa tay từng tên file được nếu số lượng file quá lớn → Thư viện os vẫn là một trong những giải pháp tốt nhất cho trường hợp này Đoạn mã như sau:
Hình 4.16 Part 1 của đoạn mã tự động đổi tên
Hình 4.17 Part 2 của đoạn mã tự động đổi tên
Sau khi run thì trong thời gian rất nhanh là toàn bộ file trong folder đã được đổi theo format như sau:
Hình 4.18 Kết quả của minh họa đổi tên tự động
+ Ngoài ra còn rất nhiều trường hợp khác mà chúng ta cần xử lý trước khi đưa vào lưu trữ trong cơ sở dữ liệu, tuy nhiên thì 2 trường hợp trên vẫn là 2 trường hợp phổ biến thường gặp nhất trong quá trình thu thập dữ liệu số liệu, data,