Thưa các bác, 
Xin lỗi các bác vì Trâu em lặn lâu quá. Thực ra em không muốn lặn vậy đâu, nhưng “thằng”, em nhầm, “anh” sếp của em vừa trọc vừa cục, thành ra em mà không cày thì miễn tiền nuôi con luôn các bác ạ. May dịp (gần) cuối năm này có được tí tẹo rỗi rãi, em mới lại nổi lên để tâm hự với các bác một chút. 
“Anh” sếp của em
“Anh” sếp của em
Ấy vậy mà đã 2 năm kể từ ngày em được vào làm Spiderum các bác ạ. Vui có, buồn có, may cái là vui nhiều hơn cái buồn. Em được học, được làm, được đồng nghiệp hết lòng hỗ trợ và công ty bạn bè yêu quý. Mỗi tội bận. Bận tối mắt tối mũi. Bận trói chân trói tay. Bận lên bận xuống bận trái bận phải các bác ạ. Em sức Trâu còn lắm lúc chịu không nổi. 
Mà thằng, à không, anh sếp em tính tình lại còn thích đú đởn công nghệ nữa mới khổ. Tự dưng năm ngoái anh ý học đâu ra cái bài “Tôi có thằng em 96 Bách Khoa…”, thế là về bắt anh em trong team Digital Marketing bọn em phải đi… học code. Khổ nỗi trước nay thằng Trâu như em chỉ quen làm việc chân tay như kiểu đi link, đếm số, xem từ khóa, chứ đã bao giờ làm việc nhiều não như code đâu. 
Có điều sau khi em nhìn thấy bảng lương của một thằng em khác làm IT thì em thèm thuồng quá, thế nên phải quyết tâm thêm kỹ năng, nhằm tăng bảng lương các bác ạ. Mình phải quyết tâm thoát nghèo bền vững chứ. Vậy nên em cũng lao tâm khổ tứ, thức ngày thức đêm để học cho bằng được cái món code củng này. 
Vào một ngày em đang làm bài tập trên LeetCode với hy vọng lương tăng gấp rưỡi thì sếp em ra vỗ vai bảo: 
“Trâu, anh cần chú kiếm cho anh list sách đang best seller trên mấy con e-commerce cho anh.”
“Ơ, best seller là gì hả anh?”
“Là sách bán chạy nhất đất thằng ngu!”
“Ơ, thế e-commerce là gì hả anh?”
“...”
“Thế anh muốn cụ thể em làm gì ạ?”
“Anh không biết, chú muốn làm gì thì làm, cho anh cái list sách best seller!”
“...”
Thế là em phải làm các bác ạ. Khổ lắm, mà thằng sếp em nó chỉ chém gió thôi chứ chắc gì đã biết đâu. Em định bảo là “ông thích thì ông đi mà làm”, nhưng nghĩ đến cảnh mẹ Trâu đang tay xách nách mang chăm con ở nhà em không dám. Em làm mà tức, thế nên nhân tiện thằng sếp em dạo này không dùng Spiderum nữa em lên đây kể xấu. Ngoài việc đấy ra thì lúc em mày mò cũng ra nhiều thứ hay phết các bác ạ, nên em chia sẻ đây với các bác. Em có làm sai các bác bảo em, để em làm cho đúng, không sếp em lại chửi với trừ lương, lại còn suốt ngày “đạo ný” “Thương cho voi cho rọt”. Chỉ được cái mõm. 
Thôi, quay lại việc chính nhé các bác. 

Phân tích đầu bài

Đầu bài của thằng sếp em là “List sách đang best seller trên mấy con e-commerce cho anh”. Câu này tối nghĩa vô cùng, nên em phải chẻ nhỏ nó ra thành từng phần, vậy mới tư duy được. 
List sách: Danh sách các cuốn sách. Rồi, nhưng mà danh sách này dài bao nhiêu phần tử thì đ*o nói, thế tức là em phải định ra độ dài cho cái list này. Ở đây là 100 đi. 
Best seller: Em sẽ chọn tiêu chí là sách bán được nhiều nhất về mặt số lượng. Có điều ở đây không có tiêu chí về khoảng thời gian, vậy nên sẽ chọn là tất cả đi cho dễ. Trước mắt cứ vậy đã. Với cả người Việt nên sẽ là sách tiếng Việt thôi chứ tiếng Tây em ọ ẹ lắm, chưa dám làm. 
Mấy con e-commerce: Thực ra là mấy sàn Thương Mại Điện Tử, thương mại điện tử thì nói là thương mại điện tử, lại còn phải “e-commerce”, nhiễu… Vì em ít tiền nên cũng chỉ biết mấy chỗ như Tiki, Shopee thôi, chắc là làm đống này trước.
Các tiêu chí khác: giá, loại sách, số trang, tác giả… sẽ xem có lấy được không.
Như vậy, sau khi phân tích, thì yêu cầu sẽ là:
Lấy được một bảng dữ liệu sách bán ra với các tiêu chí sau:
Ngôn ngữ: Tiếng Việt
Nền tảng: Tiki, Shopee
Sắp xếp theo số lượng bán, với số lượng bán ít nhất là 10
Bảng này sẽ có thêm các thông số khác: giá, thể loại, số trang, tác giả… tùy vào việc có lấy được các thông tin đấy không

Bắt đầu đào thôi

Em sẽ làm Tiki trước vì em mua đây nhiều, rõ nhất cấu trúc của trang này. Code em để đây cho tiện theo dõi: 
Và nếu bạn đang muốn học Python, các bạn có thể tham khảo khóa học từ Lập trình Python Zero đến hero
Các bước em làm sẽ như sau:
1. Em sẽ liệt kê các danh mục trong "Sách Tiếng Việt" + kiểm tra các danh mục đầu tiên trong list
2. Trong các danh mục con -> Kiểm tra xem nó có danh mục nhỏ hơn không -> nếu có lấy toàn bộ danh mục và thêm vào list all_categories? Nếu không còn danh mục con -> thêm chính nó vào all_categories
3. Để cho tối ưu, em sẽ đặt limit = 100 -> Mỗi request nhận về 100 giá trị.
4. Cần đặt tham số page cho url_generator để đến được lấy kết quả ở page tiếp theo, cần đặt max cho vòng lặp gửi request mỗi category.
VD: Sách văn học có 23136 kết quả -> Số lần gửi request = (23136/100) + 1
5. Data trả về mỗi lần là 100 cuốn sách: Tuy nhiên trong data này có rất nhiều trường -> Mình sẽ clean nó trước bằng cách chỉ lấy ra các trường cần thiết ví dụ như sku, name, url_path, quantity_sold["value"], price
6. Giờ sử dụng function trên chạy qua tất cả các category -> và lưu nó vào 1 list có tên là all_data: Có vẻ như không lấy được trọn bộ 23k cuốn để sau nha các bác
7. Em để file google sheet ở đây để các bác tham khảo: https://b.link/tiki-top-seller
8. Để tiện cho các bác theo dõi, cũng như để tiện cho các bạn thích tìm hiểu xem sách nào bán chạy ở các hạng mục, em xin mạn phép liệt kê một số đầu sách bán chạy ở các hạng mục lớn ở đây nha. 
Tổng lượng bán theo category:
Thực tế là có đến 100 category -> Nhưng mà màn hình em có 13’’ nên không thêm được :’(
Thực tế là có đến 100 category -> Nhưng mà màn hình em có 13’’ nên không thêm được :’(
Top 63 xếp theo lượng bán của tất cả sách cũng đã khá kinh khủng :’(
Một vài tác phẩm kinh điển mà em lọc ra, để luôn link để mọi người tiện theo dõi.
Còn đây là những tác phẩm giả tưởng nổi tiếng nhất. 
Các bác còn muốn biết thêm sách về những thể loại nào, các bác cứ comment, em sẽ phục vụ dữ liệu cho các bác đầy đủ.
Mà đây mới chỉ là phần đào vàng thôi, còn phần đãi vàng em sẽ viết tiếp sau nhé các bác. 
Một lần nữa, em để link sheet đầy đủ tại đây cho các bác:
Trâu xin chào các bác.