Mã của anh Bộ

Để làm cái tra cứu thông tin dự thi cho thí sinh ở tuyensinh.ussh.edu.vn, em cần phải có dữ liệu về một loạt các mã của anh Bộ: mã trường phổ thông, mã tỉnh, mã trường dự tuyển, mã ngành.

Mã này thì đương nhiên là có trong cơ sở dữ liệu của phần mềm tuyển sinh. Nhưng em không biết lấy ở chỗ nào và nghĩ rằng trên mạng có đầy, thế em đi tìm và em phải trả giá vì sự tin tưởng này của mình 😥

Mã trường phổ thông thì có dữ liệu từng tỉnh ở từng bảng trong một tập tin .doc. Việc của em là mở Wordpad ra rồi xoá các dòng nằm giữa hai bảng và cả header của bảng (phải xoá 64 lần). Kết quả là ra một cái bảng duy nhất. Giờ thì lưu lại và mở bằng LibreOffice (em rất ghét cái này nhưng không có tiền mua MS Office nên thỉnh thoảng sài tạm) rồi chuyển từ table sang text và chép sang một bảng tính.

Nói chung là các anh Bộ tập hợp dữ liệu này từ các địa phương và không biên tập nên dữ liệu trông rất lem nhem. Nhưng dù sao thì sau 1 tiếng cũng ra được cái tập tin csv dùng được.

Mã tỉnh và mã ngành thì đơn giản, em làm 5 phút xong.

Cuối cùng là mã trường dự tuyển. Tuy phần tra cứu của em chỉ cần đến mã các trường, khoa trực thuộc ĐHQGHN và các trường không tổ chức thi, nhưng đã làm thì làm hết. Sau hai ngày tìm kiếm mà không ra cái nguồn dữ liệu nào trông có vẻ dễ khai thác, cuối cùng em đành phải dùng giải pháp trâu bò.

[sourcecode language=”bash”]

for i in `seq 1 59`; do wget "http://thi.moet.gov.vn/?page=1.3&script=index&page_num=$i" -O "$i".html; done

cat *.html | tr -d ‘\r\n’ |\
sed -r -e ‘s/<tr/\n<tr/g’ -e ‘s/<\/tr>/\n/g’ |\
grep "<tr height=’25’ class=’txtNhodi’>" |\
sed -r -e ‘s/\s+/ /g’ -e ‘s#</?[a-z]+[^>]*>#\t#g’ -e ‘s/\s?\t\s?/\t/g’ -e ‘s/\t+/\t/g’ > x.csv

[/sourcecode]

Còn bước cuối cùng là s/\t\n\t/\n/g mà con sed nó không làm được thì dùng vim :p

Tất nhiên, em dùng LOAD DATA INFILE để nhập dữ liệu này vào bảng MySQL.

Bình luận
Lựợm

Lựợm là một cử nhân ngôn ngữ học thích chụp ảnh tư liệu hơn làm web. Anh kiếm sống chủ yếu bằng nghề chụp ảnh ở Hà Nội.

No Comments Yet

Leave a Reply

Your email address will not be published.