Hi, I am

Ngô Tôn

I am a programmer.

Home / AI/ML/DL/DS / Crawl dữ liệu điểm thi THPT các năm 2018, 2019, 2020

Crawl dữ liệu điểm thi THPT các năm 2018, 2019, 2020

Hiện nay, chủ đề về Data Science vẫn liên tục được mọi người quan tâm. Để được kết quả tốt cho việc phân tích dữ liệu (Data Analyst), bước chuẩn bị dữ liệu rất quan trọng. Một bài viết liên quan đến Data Science trong series Tự học và phát triển ứng dụng thực tế AI, ML, DL, DS mình gửi tới các bạn đó là Crawl dữ liệu điểm thi THPT các năm 2018, 2019, 2020.

Mình lấy một đề tài cũng khá phổ biến để thực hiện, từ bài viết này các bạn cũng có thể áp dụng vào các đề tài khác.

Trước tiên, chúng ta cần tìm hiểu qua một số câu hỏi. Crawl là gì? Vì sao chúng ta phải crawl dữ liệu?

Crawl là gì?

Crawl là một thuật ngữ mô tả quá trình thu thập dữ liệu trên website. Crawler có nhiệm vụ chính là thu thập dữ liệu từ một trang web bất kỳ hoặc được chỉ định trước, sau đó phân tích mã nguồn HTML để đọc dữ liệu và trích xuất thông tin theo yêu cầu.

Chúng ta cũng thấy được rất nhiều ứng dụng của việc crawl data như việc thu thập tin tức, marketing, Search Engine bot…

Tầm quan trọng của dữ liệu (Data) trong Data Science là rất quan trọng, nếu bạn không có dữ liệu trong tay thì việc crawl dữ liệu sẽ giúp chúng ta rất nhiều.

Crawl dữ liệu điểm thi THPT các năm 2018, 2019, 2020

Chúng ta có rất nhiều cách để lấy dữ liệu, trong bài viết này mình sẽ hướng dẫn các bạn một cách đơn giản trong Python.

Đầu tiên, chúng ta xác định nguồn lấy dữ liệu ở đâu. Ở đây mình thấy báo Thanh Niên cung cấp dữ liệu điểm thi THPT qua nhiều năm, nhưng mình chỉ lấy các năm 2018, 2019, 2020.

Mình sẽ lấy thử điểm thi một năm của 1 thí sinh xem sao.

Response chúng ta nhận được như sau:

Mình dùng thư viện BeautifulSoup  để lấy dữ liệu, kết quả ta được 1 mảng danh sách điểm thi các môn.

Rất đơn giản, chúng ta đã crawl được dữ liệu điểm thi THPT từ báo Thanh Niên rồi.

Nhưng chúng ta chưa dừng tại đây. Bây giờ, mình sẽ lưu lại dưới file .csv

Xong rồi đó, nhưng mục tiêu của chúng ta là lấy hết điểm thi của tất cả thí sinh các năm 2018, 2019, 2020. Vậy chúng ta chỉ cần viết thêm vài dòng nữa thôi, mình nghĩ các bạn làm được 🙂

Nhưng chúng ta sẽ gặp một khó khăn đó là báo Thanh Niên sẽ giới hạn số lượng request của chúng ta. Vậy bây giờ phải làm sao?

Giải pháp mình thực hiện là sẽ thay đổi proxy cho mỗi lần request.

Vấn đề tiếp theo xảy ra! Chúng ta cần lấy điểm của nhiều thí sinh, do đó lượng request khá lớn. Để chạy nhanh hơn mình sẽ sử dụng kỹ thuật Multiprocessing. Các bạn cũng có thể dùng Multithreading

Mình sẽ chia nhỏ số lượng thí sinh ra cho mỗi process xử lý.

Giải thích chút nhé. Mình tạo ra 3 hàm chunks(), do_job(), dispatch_jobs().

  • dispatch_jobs(year, data, job_number): 1 lần chúng ta sẽ lấy tất cả điểm thi THPT của 1 năm, với số lượng process (job_number). Danh sách số báo danh cần lấy (data)
  • do_job(year, job_id, data_slice): Một process ta sẽ lấy lượng thí sinh mà đã được chia nhỏ ra (data_slice) theo job_number. Sau đó ghi xuống file với hàm write_file()

Danh sách số báo danh mình sẽ tạo như sau:

Số báo danh gồm 8 ký tự, mình sẽ lấy từ SBD 02000001 đến 0900999.

Code đầy đủ như sau:

Chúc các bạn thành công!

About ngoton

Ngô Tôn is a programmer with passion for tailored software solutions. Comes with 7+ years of IT experience, to execute beautiful front-end experiences with secure and robust back-end solutions.

Check Also

Phân tích dữ liệu kết quả bóng đá Ngoại hạng Anh

Mục lục DatasetData Preparation and CleaningExploratory Analysis and VisualizationPhân tích theo mùa giảiSố bàn thắng mỗi …

2
Leave a Reply

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
ngotonsoz Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
soz
Guest
soz

Cho mình hỏi chút ạ, việc crawl này thì làm trên app nào ạ