Chào mấy bạn , hôm nay thì mình thấy facebook ngập tràn các post về độ may mắn của ngày sinh năm 2021. Mình bắt đầu có ý tưởng về project 0 đồng này. đó là làm 1 website có thể tra cứu độ may mắn của ngày sinh năm 2021 dựa trên tập dữ liệu có sẵn thay vì ngồi mò ngày sinh của mình ở đâu trong ảnh. Để làm được thì đầu tiên mình cần tìm dữ liệu, trong phần 1 này mình sẽ hướng dẫn các bạn lấy được dữ liệu để làm project tra cứu độ may mắn này.

I. Tìm Kiếm Nguồn

Việc đầu tiên bạn cần làm khi lấy dữ liệu là phải tìm nguồn phù hợp, vì ở đây là data ngày tháng nên mình nghĩ trên các website khác sẽ có. Mình chỉ cần lấy về sài thôi. Mình bắt đầu search google từ khóa : “Lucky birthday ranking 2021“:

Tiếp theo mình chọn kết quả đầu tiên , mình nghĩ nó là ngon nhất và uy tín nhất. Mình truy cập vào và cảm thấy hụt hẫn, ở đây là hình ảnh không phải dạng text để mình lấy về được:

trang web tra cứu độ may mắn

Mình sẽ tìm trong đây, chắc chắn sẽ có nguồn của bức ảnh này bởi vì đa số các blog đều phải ghi nguồn. Kết quả mình tìm được một nguồn như trên hình bằng tiếng nhật. Chỗ japanese blog….:

Tiếp theo click vào và nó sẽ chuyển hướng đến trang khác , chứa ký tự để mình có thể lấy về được:

Link nguồn dữ liệu cuối cùng mình tìm được . Tại đây.

II. Lấy Dữ Liệu

Để lấy dữ liệu mình sẽ dùng python và hai thư viện tuyệt vời của nó là requestbs4. Mình đã viết sẵn code và upload lên github rồi các bạn tải về sài nhé. Mình chỉ nói sơ về code của mình thôi.

Muốn clone github về và di chuyển đến thư mục vừa tải để làm việc các bạn chỉ việc chạy lệnh này trên cmd thôi:

git clone https://github.com/sonrasa2k/scrapy_data_lucky_2021.git
cd scrapy_data_lucky_2021

Lưu ý các bạn chưa cài git có thể tham khảo cài tại đây.

Tiếp tới, các bạn mở file getdata.py trong visual studio code lên xem thử có gì nhé !

file getdata.py

Những thứ bạn cần chú ý trong code :

1. Để lấy được một trang web về bạn dùng hàm requests.get(), headers là gì thì những bài sau này mình sẽ giải thích:
headers = {
    'authority': 'medigaku.com',
    'cache-control': 'max-age=0',
    'sec-ch-ua': '^\\^Google',
}

response = requests.get('https://medigaku.com/2021-123/', headers=headers)
2. Biểu diễn thứ lấy được từ trang web dưới dạng html ta dùng hàm BeautifulSoup():
soup = bs(response.text,"html.parser")
3. Tìm kiếm tất cả các tag theo tên ở đây là ‘tr‘ vì nếu chúng ta f12 sẽ thấy:
f12

với 1 lệnh đơn giản:

data1 = soup.findAll('tr', style="height: 70px;")
data2 = soup.findAll('tr',style ="height: 71px;")

Để cắt chuỗi ta dùng hàm split(“ký tự phân cách”) . Chúng ta sẽ được 1 mảng chứ các ký tự đã phân cách. ví dụ:

chuoi = son/dep/trai
list = chuoi.split("/")
=> list = ["son","dep",trai"]
4. Tạo dataframe và viết file csv

Cuối cùng để tạo dataframe từ các list trong python ta dùng hàm DataFrame của Pandas và viết file csv từ dataframe vừa tạo với hàm to_csv(). Ví dụ :

list1 = [1,2,3,4]
list2 = [1,2,3,4]
list3 = [1,2,3,4]
data = pd.DataFrame({
'cot1' : 'list1',
'cot2' : 'list2',
'cot3' : 'list3'
})
data.to_csv("data.csv")

Để được 1 file csv data cuối cùng. Mình sẽ đi xử lý từ từ và chia thành 3 cột sau đó viết thành file lucky.csv :

percentile_list = pd.DataFrame(
    {'rank': cot0,
     'month': cot1,
     'day': cot2
    })
percentile_list.to_csv("lucky.csv",index=False)

Để có được file csv các bạn đơn giản hơn, mình đã làm sẵn. Cách bạn qua cmd đã chuẩn bị lúc đầu. Cài cho mình các thư viện cũng như chạy file getdata.py bằng lệnh:

conda create --name getdata==3.7.7
conda activate getdata
conda install requests
conda install bs4
conda install numpy
conda install pandas
python getdata.py

Lưu ý các bạn chưa cài python và anaconda sẽ không cài thư viện cũng như chạy được. Để cài python các bạn tham khảo tại: https://hongtin.net/laptrinh/laptrinh-python/bai-1-cai-dat-moi-truong-lap-trinh-python-tren-win-10/

Để cài anaconda các bạn tham khảo tại: https://hongtin.net/laptrinh/laptrinh-python/anaconda-la-gi-cach-cai-dat-va-su-dung-tren-win10/

cài thư viện
chạy chương trình

Kết quả như này là mọi thứ đã xong. Mình vào thư mục sẽ thấy file lucky.csv :

Và file csv thu được có dạng :

file lucky.csv
III. Kết Luận

Thực ra cũng không khó lắm để lấy dữ liệu từ một trang web. Bạn cần có một chút kiến thức về html cũng như python là đã có thể lấy dữ liệu về rồi.

Để biết thêm nhiều kiến thức hay ho các bạn có thể tham gia nhóm của mình tại link : https://www.facebook.com/groups/164371998723215

Các bạn cần thêm thông tin hay sự giúp đỡ từ mình. Có thể ấn theo dõi mình trên Facebook và Nhắn tin trực tiếp với mình qua link : https://www.facebook.com/sonnguyen16032000

Hoặc xem thêm nhiều bài viết hay khác tại Blog Hóng Tin

Trong bài tiếp theo mình sẽ làm trang web trên localhost trước. Bài cuối cùng mình sẽ upload lên heroku để thành một trang web đưa lên internet cho người dùng sử dụng. Các bạn đón chờ bài tiếp theo nhé!