Crawl một trang về thơ ca

Đây sẽ là một dự án làm cho vui. Mình sẽ crawl toàn bộ các bài thơ của trang: http://vanhoc.xitrum.net/thoca/ về đặt lên wordpress xem chơi.

Bắt đầu từ ngày mai nhé 2019-10-11. 😀

Update: 11/10/2019

Đã triển khai việc crawl danh sách các link liên quan đến thơ ca nội bộ của trang. Kết quả code và dữ liệu nằm tại đường dẫn:

  • Code: https://github.com/phamkhactuy/python_crawl_thoca/blob/master/20191011_crawl_link.py
  • Data: https://github.com/phamkhactuy/python_crawl_thoca/blob/master/thoca.csv

Với dữ liệu này bước tiếp theo phải xử lý:

  • Cần làm sạch dữ liệu, chỉ lấy link có dữ liệu là bài thơ mà thôi
  • Tiếp tục crawl dữ liệu nội bộ trang, loại bỏ trùng lặp
  • Dựng local wordpress để đẩy dữ liệu vào

Update: 08/11/2019

Lơ là một thời gian mới quay lại triển nốt cái này cho dứt điểm.

Dựng local wordpress để đẩy dữ liệu vào: phần này đơn giản sử dụng phần mêm Xampp, sau đó tải wordpress về cài đặt là xong.

Đầu tiên bóc tách thử dữ liệu của một link

Đầu tiên bóc tách thử dữ liệu của một link thì phát hiện thấy cấu trúc của xitrum viết theo dạng cũ sử dụng bảng. Tạm thời chỉ cần lấy Tiêu đề và nội dung của bài viết. Tiêu đề thì ta chỉ lấy riêng text còn nội dung thì lấy cả cấu trúc HTML (gồm div, thẻ b…). Phần này sử dụng Python với thư viện BeautifulSoup, đáng lưu ý là việc lấy thẻ table với các tham số đặc biệt của table chứa nội dung bài thơ là: {“border”:”0″, “width”:”90%”,”cellpadding”:”3″,”cellspacing”:”0″}
Chi tiết code tại: https://github.com/phamkhactuy/python_crawl_thoca/blob/master/Get_content_from_link.py

Tiếp đến ta sẽ tiến hành đưa dữ liệu vào bảng của wordpress là một bài viết mới. Mỗi một bài viết mới là một dòng dữ liệu trong bảng POSTS. Ta sẽ tiến hành chuẩn bị dữ liệu để insert vào bảng này. Ta cần lưu ý một số điểm:

  • Để kết nối với CSDL và hiển thị tốt Tiếng Việt ta sử dụng mã utf-8 (# –– coding: utf-8 –-) trong file python.
  • ID của bảng POSTS sẽ tăng dần nên phải vào đó lấy ID mới nhất và cộng thêm 1. Với ID này ta cũng dùng để làm đường dẫn đến bài viết luôn.
  • User thì ta sử dụng user mặc định Admin có ID là 1.
  • Thời gian tạo và sửa đổi ta sử dụng hàm NOW() hoặc SYSDATE()

Chi tiết code tại: https://github.com/phamkhactuy/python_crawl_thoca/blob/master/Save_content_in_wordpress.py

Load dữ liệu từ file csv lên với thư viện Pandas. Đối với file csv ta cần chuẩn hóa bỏ toàn bộ dấu ngoặc kép và loại bỏ các link trùng bằng excel. Mục tiêu của ta sẽ lấy dữ liệu của từng link và đưa vào bảng POSTS của wordpress. Thử load và in ra màn hình lần lượt từng row trong file csv.
Chi tiết code tại: https://github.com/phamkhactuy/python_crawl_thoca/blob/master/Get_link_from_filecsv.py

Cuối cùng ta có thể ghép code

Cuối cùng ta có thể ghép code các phần trên này lại để lấy lần lượt nội dung từng link để đưa vào CSDL wordpress. Trong phần này ta cần lưu ý đối với mỗi link, ta lấy được 2 cấu trúc table như nhau về định danh (cùng là table và có tham số table là {“border”:”0″, “width”:”90%”,”cellpadding”:”3″,”cellspacing”:”0″}) nhưng 1 cái sẽ là nội dung ta cần lấy. Một cái sẽ là gợi ý các link khác mà ta không cần vì nó không phải là nội dung thơ văn. Và một điều lưu ý nữa là chỉ các link có nội dung là bài thơ mới có cấu trúc ta đã chỉ ra ở trên, các link list tác giả, list bài thơ, list mục sẽ không cấu trúc đó nên sẽ không insert vào hệ thống (Nếu cùng cấu trúc thì ta phải chuẩn hóa các link trước).
Chi tiết code tại: https://github.com/phamkhactuy/python_crawl_thoca/blob/master/Finall_code_crawl.py

Link data.

Ta đã có kết quả cho việc crawl này

https://raw.githubusercontent.com/phamkhactuy/python_crawl_thoca/master/Trang_quan_tri.JPG
https://raw.githubusercontent.com/phamkhactuy/python_crawl_thoca/master/insert_POSTS.JPG
https://raw.githubusercontent.com/phamkhactuy/python_crawl_thoca/master/Giao_dien_trang.JPG

Chia sẻ ghi chú tạm trực tuyến

Tham gia Không gian cộng đồng (một cộng đồng nguồn mở tại Hà Nội) đem rất nhiều điều bổ ích đối với mình. Biết được phong các chia sẻ, nhiều phần mềm, tool, tiện ích rất hay. Ví dụ sau đây là một ứng dụng chia sẻ ghi chú tạm trực tuyến.

Đó là mình đặt tên nó như vậy, nó là một ứng dụng trực tuyến hay đơn giản hơn là một website. Mình biết nó đến đầu tiên đó là https://pastebin.com, tất nhiên còn một số trang khác cũng có tính năng tương tự.

Vậy thì cái này để làm gì? Cái này đơn giản chỉ là note lại để lưu trữ hoặc chia sẻ cho người khác một cách ngắn gọn và nhanh nhất. Ví dụ mình muốn chia sẻ cho một người bạn một đoạn code tầm mấy trăm dòng. Ta có thể gửi thẳng qua Skype hoặc lưu ra file để gửi… Mọi thứ đó phức tạp và làm rối mắt hết. Thay vào đó ta có thể làm nhanh hơn khi dùng pastebin. Ta tạo một note mới copy nội dung đó vào, có thể chọn ngôn ngữ (code) để nhìn cho dễ. Sau đó chỉ việc gửi link đó cho người hoặc nhóm người cần gửi là xong. Link đó rất ngắn gọn ta có thể nhớ và đọc được luôn.

Đi sâu vào thì cái này cũng có nhiều tính năng hay mà đội code hoặc đội nguồn mở muốn dùng. Các tính năng mở rộng hay để quản lý note thì phải đăng nhập hoặc bản trả phí… Không những thế nó còn public API để mọi người có thể sử dụng…

Vì để chia sẻ ngay nên phần này đa phần để public để mọi người xem được, nên có trường hợp một số người chia sẻ cho đồng nghiệp note có chứa mật khẩu vào hệ thống vô tình bị lộ trên Internet gây chấn động. Đôi khi rảnh rỗi một số người như mình lại đi lướt random trên đó xem mọi người đang chia sẻ những gì. 😀

Khởi động app theo đặc quyền

Chuyện là hôm nay đồng nghiệp mình tiến hành thực hiện một số thao tác cập nhật một số file xml trong ứng dụng nhưng không được. Hệ thống báo không có quyền mặc dù việc này bình thường vẫn có thể làm được. Ứng dụng bên mình code bằng Java chạy trên webserver là tomcat. Qua kiểm tra thì thấy gần đây App Tomcat được khởi động lại bằng quyền root. Bình thường thì việc reset App Tomcat chỉ được thực hiện với quyền bình thường (không phải quyền root).

Lý giải điều này là do việc phân quyền trên Linux. Việc cài đặt hay reset app trên Linux với quyền khác nhau là khác nhau trên Linux. Khi reset bằng quyền root thì với các user khác sẽ gặp một số vấn đề về quyền khi truy cập một số file trên đó. Phần này mình chưa rõ lắm nhưng cần note lại để sau tìm hiểu thêm.

Cách khắc phục thì phải stop app Tomcat bằng quyền root và sau đó start bằng quyền vẫn hay sử dụng.

Nhưng trên window thì theo mình thấy không vấn đề gì cả.