Công nghệ - Bảo mật

Crawl data với Selenium Django PostgreSQL

Tác giả: To Duc Thang

Giới thiệu

Hiện nay trên internet đang có một thứ rất quý giá đó chính là dữ liệu, việc khai thác và sử dụng chúng vào trong công việc sẽ mang lại giá trị lớn đối với chúng ta. Nhưng hiện nay việc crawl data trên web dường như khó khăn hơn khi các trang web đều sử dụng cách rend data bằng JS, nếu đơn thuần chỉ sử dụng code request lên trang web muốn lấy data thì chắc chắn không được, thậm chí là bị ban ip (do request nhiều lần ). Trong bài viết này mình sẽ giới thiệu với các bạn cách crawl data bằng sự kết hợp giữa Django , Selenium, PostgreSQL.

Cài đặt

Để kiểm tra xem data trên web mình định crawl nó có hiển thị bằng JS hay không mình install một extenstion là Quick JavaScript Switcher vào trình duyệt web. Sau khi cài xong ta thử vào trang web như Shopee hay Tiki,… để thử, như hình dưới đây trang web Shopee ban đầu sẽ load ra các sản phẩm , khi ta bật extenstion lên thì sẽ nhận được web trắng tinh khôi.

Chưa sử dụng extenstion nên data sẽ hiển thị lên web.

Sau khi bật extensition thì ngay lập tức data sẽ không hiển thị lên.

1.Django và PostgreSQL

Về cách cài đặt và cấu hình thì mọi người có thể xem thêm tại link này để biết thêm chi tiết. Mình tạo project như sau :

Sau khi tạo xong project ta vào file model.py để tạo Model, tùy thuộc vào dữ liệu mà bạn muốn lấy gồm những gì thì sẽ tạo các trường phù hợp, như dưới đây mình chỉ lấy dữ liệu gồm tên sản phẩm, link sản phẩm, giá, mô tả.

Tiếp theo trong file admin.py :

Và trong file setting.py hãy nhớ thêm tên app mà ta chạy lệnh startapp bên trên

Vậy là đã xong bước tạo app ta chạy lệnh để kiểm tra:

Ta sẽ truy cập vào đường link cổng 8000/admin để đăng nhập và thử add một vài sản phẩm :

Ta cũng có thể kiểm tra db postgreSQL dưới local bằng các lệnh :

Sau khi vào postgres ta sẽ phải tạo User + Pass + DB trước đã :

  • Note: trong setting các bạn cũng phải khai báo nội dung giống bên trên nhé (đọc kỹ nôi dung link bên trên ) :

Trong postgres :

Ta nhận được kết quả giống bên trên :

2. Selenium

Selenium là một công cụ giúp tự động hóa quá trình sử dung trình duyệt giống người dùng bình thường trên browser. Từ việc truy cập vào trang chủ, next page, submit form, click button, link… đều được tiến hành một cách tự động, Ngon. Các bạn có thể search thêm các bài viết về nó để có thể hiểu rõ hơn. Trong bài này ta cũng sẽ bắt đầu từ đầu.

Và mình cũng cần install một Web Driver có thể là ChromeDriver, Firefox hoặc Safari, tùy thuộc vào bạn. Như mình sẽ dùng Firefox, quan trọng các bạn xem kỹ link sau để cài Web Driver.

Sau khi đã có đầy đủ công cụ ta sẽ code thực thi như sau.

Nội dung code trên cơ bản là đưa đường link của web vào urlpage, cái vòng for nghĩa là số trang (pages ) mình muốn lấy, bên trên mình crawl 10 trang.

3. Phân tích trang web

Để crawl data ta sẽ phải bóc tách từng thuộc tính ( các thẻ HTML) để đọc dữ liệu, các thẻ <div> <img> <a> dựa vào tên thẻ và các class, id để chỉ định dữ liệu crawl. Ví dụ như trang Shopee, ta bật Inspect lên để đọc.

Cụ thể zoom mọi người có thể xem rõ hơn.

Như ban đầu mình sẽ lấy các giá trị về tên sản phẩm, link sản phẩm, giá, mô tả (tất cả đều nằm trong thẻ <div>), ta sẽ bóc tách như sau:

Ý nghĩa là ta sẽ chỉ đường dẫn đến từng giá trị được bọc trong các thẻ HTML. Các bạn có thể xem thêm tại đây. Tương tự như vậy chúng ta sẽ lấy các thuộc tính còn lại.

Khi ta đã lấy được data thì việc tiếp theo là ta sẽ INSERT vào DB PostgreSQL, tạo file data_helpers.py

Cũng nên xem thêm tại đây. Như vậy cũng đã hoàn thành được 90% công việc rồi. Ta sẽ tạo file get_data.py sẽ import các module đã implement bên trên.

KẾT QUẢ :

Bạn cũng có thể check bên dưới local . Ngoài ra bạn có thể xem thêm cách viết API cũng sử dụng Django + PostgreSQL tại đây

TopDev via Viblo

 

    Xem thêm các việc làm Developer hấp dẫn tại TopDev

    var urlvideos = [
    ‘https://www.youtube.com/embed/o68qAtFS3CQ’,
    ‘https://www.youtube.com/embed/edm_j5j-GzE’,
    ‘https://www.youtube.com/embed/EpkmWkp1iQU’,
    ‘https://www.youtube.com/embed/reOK6DZb2sc’,
    ‘https://www.youtube.com/embed/blsNHdm-gfo’,
    ‘https://www.youtube.com/embed/mmHNowW8l-Y’,
    ‘https://www.youtube.com/embed/PUlw_r2EgJ0’,
    ‘https://www.youtube.com/embed/IkqAcPqZTxc’
    ] var urlvideo = urlvideos[Math.floor(Math.random() * urlvideos.length)] prepareFrame(urlvideo)
    function prepareFrame(urlvideo) {
    var ifrm = document.createElement(“iframe”)
    ifrm.setAttribute(“src”, urlvideo)
    ifrm.setAttribute(“frameborder”, “0”)
    ifrm.setAttribute(“allow”, “autoplay; encrypted-media”)
    ifrm.setAttribute(“width”, “100%”)
    ifrm.setAttribute(“height”, “auto”)
    ifrm.style.height = “391.5px”
    document.getElementById(“yt-content”).appendChild(ifrm)
    }

    Nguồn: https://topdev.vn/blog/crawl-data-voi-selenium-django-postgresql/