Vui : Vọc Python với Requests and Beautiful Soup package
Tại sao mình lại thích thú với mấy package này? nguyên căn là trên công ty mình cần một tool nho nhỏ cho các tester có thể call API lên server và lấy các data trả về thay vì dùng POSTMAN extension app của Chrome (cái này chắc mọi người cũng biết nó là gì rùi hen), vì các API có 1 parameter cực độc là Signature được generate ra từ những param được truyền vào theo một thuật toán độc quyền của các bác trên cty, do đó xài POSTMAN thì các bạn tester phải cực nhọc đi generate cái signature rồi truyền vào. Vậy là mình dấn thân vào Python và request package – script python đơn giản, dễ đọc, dễ hiểu, còn requests package thì support gần như đủ cả rồi, cứ thế mà xài.
Còn beaturiful soup, nguyên nhân cũng chỉ vì đống HTML bùi nhùi và cần phải parse ra lấy dữ liệu mà thôi
Còn beaturiful soup, nguyên nhân cũng chỉ vì đống HTML bùi nhùi và cần phải parse ra lấy dữ liệu mà thôi
Và mình đã sử dụng ra sao ? thui tạm gác cái source trên cty lại nha, public ra bị chém chít. Mình về với 1 cái tool nho nhỏ để chôm truyện tranh về máy đọc (mình thích đọc offline hơn là online).
Nguồn mình lấy truyện là manga24h, và ở Manga24h thì 1 truyện sẽ có cấu trúc site :
- Page truyện – list tất cả các chapter link
- Chapter 1
- Image 1
- Image 2
- …
- Chapter 2
- Image 1
- Image 2
- …
- Chapter 1
Như vậy mình muốn lấy truyện nào đó từ 1 link truyện như : http://manga24h.com/4160/Love-Riron.html thì mình cần phải lấy danh sách các chapter, sau đó vào từng chapter, lấy danh sách các file hình, và rồi download các file đó về.
OK, requirement sơ sơ là như vậy, giờ chuyển qua vọc code với các vấn đề
- Mình cần open 1 request method GET tới cái page truyện : http://manga24h.com/4160/Love-Riron.html hoặc chapter page
- Mình cần parse HTML từ dữ liệu ở 1 và lấy cụ thể link chapter hay link image
- Mình cần download file và store về ổ cứng
- Thưởng thức thành quả
Giải quyết đống vấn đề với coding thoai:
- requests package cung cấp 1 method đơn giản là get và bạn chỉ cần truyền vào param là cái URL :và còn nhiều nhiều nữa các method khác, các bạn có thể tham khảo thêm ở :
http://docs.python-requests.org/en/master/ - Beautiful soup sẽ giúp bạn điều này, sau khi bạn làm với step 1 thì bạn sẽ có 1 object và attributes text chính là đống HTML bạn nhận được từ web server, việc cần làm là cho nó “beautiful” lên vớiSau đó thì các bạn có thể tự do di chuyển trong trong cái đống HTML đã được parse bằng cách select các node và hoặc lấy các attribute value của node
document thì cực kì dễ hiểu :
https://www.crummy.com/software/BeautifulSoup/bs4/doc/ - Download file thì cực kì đơn giản nữa, gói request hỗ trợ luôncũng là method get thôi, nhưng cái quan trọng ở đây chính là stream=True
và rồi mình ghi dữ liệu đó xuống file: - Thưởng thức thành quả, hmmm đợi chút, có vẻ chưa xong khi các bạn chưa combine chúng nó lại để ra 1 thứ như requirement
Giải quyết requirement:
- mình cần phải lấy danh sách các chapter
- vào từng chapter, lấy danh sách các file hình – Cái này thì HTML của manga24h ko include trong HTML node mà chứa trong 1 đoạn javascript, phải parse đoạn javascript đó ra và lấy các file hình:
- download các file đó về: imageList là các bạn có list URL các file hình rồi, giờ download và save thì quá đơn giản với hướng dẫn get file và save file ở trên
Chúc các bạn vui.
Bạn muốn học lập trình hãy liên hệ ngay với Mỹ Vân để được nhận ưu đãi từ học viện nhé
Không có nhận xét nào:
Đăng nhận xét