[PYTHON] Die reCAPTCHA-Site wird täglich automatisch abgekratzt (6/7: Containerisierung)

  1. Anforderungsdefinition ~ Aufbau der Python-Umgebung
  2. Erstellen eines Site-Scraping-Mechanismus
  3. Verarbeiten Sie die heruntergeladene Datei (xls), um das Endprodukt (csv) zu erstellen
  4. Datei von S3 herunterladen / Datei in S3 hochladen
  5. Implementiere 2captcha
  6. ** Im Docker-Container starten lassen **
  7. Registrieren Sie sich für den AWS-Stapel

Lass es auf dem Server funktionieren

Bis zum letzten Mal, sobald Sie es starten, funktioniert es automatisch, ohne etwas anderes zu tun. Wenn Sie es mit cron einstellen, können Sie es jeden Tag ausführen. Wenn Sie es jedoch unverändert lassen, wird Ihr PC die ganze Zeit über gestartet. Ich möchte es irgendwie auf dem Server starten lassen.

Die Wand hier ist, dass ** dieses Schaben Anzeige ** erfordert. Ich habe auch den Headless-Modus von Chrome ausprobiert, aber er hat nicht funktioniert.

Deshalb habe ich mich dieses Mal entschlossen, es mit einem Mechanismus namens "Xvfb" zu implementieren, der eine virtuelle Anzeige erstellen kann, obwohl es sich um eine etwas alte Technologie handelt.

Xvfb ist eine Anwendung, die unter Linux ausgeführt wird. Also habe ich beschlossen, es mit dem Linux Docker-Container zu implementieren und den Batch schließlich mit dem AWS-Batch auszuführen.

Docker-Image-Erstellung

Überprüfung für die Erstellung

Erstellen Sie zunächst das von Ihnen verwendete Docker-Image. Ich werde CentOS verwenden, das bei der Untersuchung von Xvfb häufig verwendet wurde.

Beginnen Sie zunächst mit dem vorhandenen centOS-Image und installieren Sie die erforderliche Anwendung.

mac(host)


docker pull centos          #CentOS-Image vom Docker Hub abrufen
docker run -it -d centos    #Start
docker ps                   #Start bestätigen&Container-ID abrufen
docker exec -it b7948c7802eb /bin/bash  #Betreten Sie das Terminal auf der Containerseite

Alles was du brauchst

Also werde ich jeden installieren.

Probieren Sie verschiedene Dinge im Behälter aus


yum install -y python36 #Python setzen
python3 -m pip install --upgrade pip #Pip setzen
pip install requests #Versuchen Sie, die erforderlichen Pakete einzulegen
...
yum -y install xorg-x11-server-Xvfb  #Installieren Sie Xvfb
yum -y install firefox  #Installieren Sie Firefox
Xvfb :1 -screen 0 1600x1200x16 & #Starten Sie Xvfb
export DISPLAY=:1 #:Verwenden Sie die als 1 definierte Anzeige
firefox #Starten Sie Firefox

Oh. Ich kann den Bildschirm nicht gut sehen, aber es scheint, dass Firefox läuft ...? Lassen Sie uns als nächstes mein Programm hier ausführen.

Jetzt habe ich angefangen, die Docker-Datei zu erstellen. Tatsächlich kann es effizienter sein, es mit dem Befehl "docker cp" zu versuchen.

Erstellen einer Docker-Datei

FROM centos
ENV TZ JST-9  #(1)

#Legen Sie das Ausgangsverzeichnis fest
ENV HOME=/home
WORKDIR $HOME

#Meine App(Unten App)Unter nach Hause
COPY .  $HOME/

RUN yum install -y python36
RUN python3 -m pip install --upgrade pip
RUN pip install -r app/requirements.txt #(2)
RUN yum -y install xorg-x11-server-Xvfb
RUN yum -y install firefox

RUN chmod 744 startup.sh
CMD ["./startup.sh"]  #(3)

(1) Anscheinend ist die Zeitzone UTC. Da die Zeit für diese Charge wichtig ist, ändern wir die Zeitzone (2) Zuerst habe ich Zeile für Zeile geschrieben, aber es war sauberer, sie zusammenzustellen, also habe ich die erforderlichen Pakete in der Datei require.txt zusammengestellt. Die erforderlichen Pakete sind diejenigen, die mit dem Befehl "pip freeze" herausgekommen sind. (3) Ich habe festgestellt, dass es notwendig ist, den Xvfb-Befehl zum Zeitpunkt des Docker-Laufs zu starten. Deshalb habe ich eine Shell erstellt und zusammengefasst.

startup.sh


#!/usr/bin/env bash
Xvfb :1 -screen 0 1600x1200x16 &
export DISPLAY=:1
python3 app/source/run.py --run_mode test #Am Ende werde ich es normal machen

Leicht modifiziert, um unter Linux zu funktionieren

--gecko Treiber Download für Linux

Die endgültige Dateistruktur sieht folgendermaßen aus.

├── Dockerfile
├── README.md
├── app
│   ├── drivers
│   │   ├── geckodriver
│   │   └── geckodriver_linux
│   ├── requirements.txt
│   └── source
│       ├── run.py
│       ├── scraping.py
│       ├── make_outputs.py
│       ├── s3_operator.py
│       └── configs.py
├── startup.sh
└── tmp
    ├── files
    │   ├── download
    │   ├── fromS3
    │   └── toS3
    └── logs

Versuche zu beginnen

Es kann mit dem folgenden Befehl ausgeführt werden.

docker build -t myapp .
docker run -it myapp

Eigentlich ging es nicht so ... Ich habe das Gefühl, dass ich den obigen Befehl ungefähr 40 Mal eingegeben habe.

Wenn es jedoch gut geht, ist es eine bewegende Sache! Ich kann den Bildschirm überhaupt nicht sehen, aber die Konsole ist ausgefallen und es gibt Dateien in S3.

Führen Sie es am Ende einfach auf AWS aus ... Ich kann das Ziel sehen.

Recommended Posts

Die reCAPTCHA-Site wird täglich automatisch abgekratzt (6/7: Containerisierung)
Jeden Tag automatisch die reCAPTCHA-Site abkratzen (2/7: Scraping)
Täglich automatisch die reCAPTCHA-Site abkratzen (5/7: 2captcha)
Automatische tägliche Überprüfung der reCAPTCHA-Site (4/7: S3-Dateiverarbeitung)
Kratzen Sie die reCAPTCHA-Site jeden Tag automatisch ab (1/7: Aufbau der Python-Umgebung)
Automatische tägliche Überprüfung der reCAPTCHA-Site (3/7: xls-Dateiverarbeitung)
Die endgültige Ausgabe von Python Scraping! (Zielort: Große Kamera)
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen