- vừa được xem lúc

Selenium, Docker và Django

0 0 53

Người đăng: Kính Gia Hà

Theo Viblo Asia

Giới thiệu

Hiện nay việc crawl dữ liệu, hoặc sử dụng Selenium để thực hiện các hành động một cách tự động khá là phổ biến. Vậy bây giờ bạn muốn tạo ra một trang web mà có thể crawl dữ liệu hay thực hiện gì đó với Selenium mà chưa biết cách làm thì hôm nay mình sẽ chỉ các bạn cách crawl dữ liệu bằng Selenium và lưa nó vào PostgreSQL trên Docker với trang web được viết bằng Django. image.png

Cài đặt

Cài đặt project

Để bắt đầu với dự án django thực hiện các lệnh sau đây

pip install django
django-admin startproject app
django-admin startapp product

Khởi tạo project

Làm việc với Django

Sau khi khởi tạo project xong. Thì thư mục của bạn sẽ như này.

app app __init__.py asgi.py setting.py urls.py wsgi.py product __init__.py admin.py apps.py models.py test.py views.py
manage.py

Chỉnh sửa models.py trong app product Trong file này bạn tạo một model Product.

from django.db import models
from django.contrib.auth.models import User class Product(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=200) category = models.CharField(max_length=200) price = models.IntegerField() url = models.URLField(max_length=2000) def __str__(self) -> str: return self.title

Tạo 1 file urls.py trong app product

app app __init__.py asgi.py setting.py urls.py wsgi.py product __init__.py admin.py apps.py models.py urls.py test.py views.py
manage.py

Chỉnh sửa urls.py vừa khởi tạo. Sau đó trong views.py của product bạn tự thực hiện các bước còn lại. Nếu không thì bạn có thể tìm hiểu ở trang chủ Django

from django.conf import settings
from . import views app_name = 'product' urlpatterns = [ path('products/', views.products, name ='products'),
]

Chỉnh sửa urls.py trong app

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns urlpatterns = [ path('admin/', admin.site.urls), path('', include('product.urls')),
]

Làm việc với Selenium

Sau đó bạn tạo một file getdata.py ở trong app product

app app __init__.py asgi.py setting.py urls.py wsgi.py product __init__.py admin.py apps.py getdata.py models.py urls.py test.py views.py
manage.py

Trong getdata.py bạn tạo một hàm để lấy dữ liệu. Khi nào bạn cần lấy dữ liệu cứ import và gọi hàm này là được. Bạn có thể tìm hiểu thêm về Selenium

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities def data_scrap(link): driver = webdriver.Remote("http://selenium:4444/wd/hub", DesiredCapabilities.CHROME) driver.get(link) //Bạn có thể viết code lấy dữ liệu ở đây driver.close()

Chỉnh sửa file setting.py


ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'product',
] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'PASSWORD': 'postgres', 'HOST': 'db', 'PORT': 5432, }
} STATIC_URL = '/static/'
STATIC_DIR = os.path.join(BASE_DIR, 'static') STATICFILES_DIRS = [ STATIC_DIR,
] MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

Làm việc với Docker

Đầu tiên bạn hãy tạo một file Dockerfile trong project app

app app __init__.py asgi.py setting.py urls.py wsgi.py product __init__.py admin.py apps.py getdata.py models.py urls.py test.py views.py
Dockerfile
manage.py

Tạo và chỉnh sữa file requirements.txt trong project app

selenium==3.141.0
webdriver-manager==3.2.2
psycopg2==2.8.6
psycopg2-binary>=2.8

Chỉnh sửa file Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt /app/
RUN apt-get update \ && apt-get -y install libpq-dev gcc
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Tạo và chỉnh sữa file docker-compose.yml. Ở đây db dùng cho database postgres, web để chạy server django, còn selenium thực lấy dữ liệu

version: "3.9" services: db: image: postgres volumes: - ./data/db:/var/lib/postgresql/data environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/app ports: - "8000:8000" depends_on: - db selenium: image: selenium/standalone-chrome ports: - 4444:4444

Thự mục sau khi thực hiện các hành động

app app __init__.py asgi.py setting.py urls.py wsgi.py product __init__.py admin.py apps.py getdata.py models.py urls.py test.py views.py
Dockerfile
docker-compose.yml
requirements.txt
manage.py

Khởi chạy dự án

docker-compose build
docker-compose run web python manage.py makemigrations
docker-compose run web python manage.py migrate
docker-compose up

Sau đó bạn vào http://127.0.0.1:8000/ để xem kết quả

Cảm ơn các bạn đã quan tâm

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 100

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 78

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 121