[JAVA] Schaben mit Puppenspieler in Nuxt auf Docker.

Einführung

Ah, ich möchte kratzen.

Also kratzte ich mit Nuxt auf Docker. Für den Knotentyp schien die Bibliothek mit dem Namen Puppenspieler zum Scraping empfohlen zu werden, daher werde ich schnell von Nuxt's Server Middleware kratzen.

Mir ist gesagt worden, dass ich die Leute nicht zu sehr stören sollte, also werde ich meine Seite kratzen. (Sie müssen sich nicht anmelden. Bitte verwenden Sie es ♪) toribure | Simple ist das beste Brustwerkzeug, das alleine oder als Team verwendet werden kann image.png

Es ist ein wenig Werbung. Auf der oberen Seite befindet sich ein Bild eines niedlichen Vogels (Irasutoya). Dieses Mal werde ich dies durch Schaben nehmen und anzeigen.

Nuxt auf Docker vorbereiten

Ich denke, es gibt viele andere Artikel hier, also lasst uns einen Blick darauf werfen. Die Umwelt ist übrigens

$ docker -v
  Docker version 19.03.13-beta2, build ff3fbc9d55
$ docker-compose -v
  docker-compose version 1.26.2, build eefe0d31

war.

Erstelle eine Nuxt App

$ docker run --rm -it -w /app -v `pwd`:/app node yarn create nuxt-app scraping
? Project name: scraping
? Programming language: JavaScript
? Package manager: Yarn
? UI framework: None
? Nuxt.js modules: Axios
? Linting tools: 
? Testing framework: None
? Rendering mode: Universal (SSR / SSG)
? Deployment target: Server (Node.js hosting)
? Development tools: 

Nur "Axios" werden später verwendet, daher werde ich sie bewusst einbeziehen.

Übrigens war zum Zeitpunkt der Artikelerstellung die Version des Bildes "node: latest" 14.9.0, die Version von "create-nuxt-app" war v3.2.0 und die Version von "nuxt" war 2.14.0.

Bereiten Sie Dockerfile docker-compose.yml vor

Von nun an ist das gerade erstellte "Scraping /" -Verzeichnis Ihr Arbeitsverzeichnis.

$ cd scraping

Dockerfile


FROM node

ENV HOME=/app     \
    LANG=C.UTF-8  \
    TZ=Asia/Tokyo \
    HOST=0.0.0.0

WORKDIR ${HOME}

RUN apt-get update \
    && apt-get install -y wget gnupg \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && apt-get update \
    && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
      --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

COPY package.json ${HOME}
COPY yarn.lock ${HOME}
RUN yarn install

COPY . ${HOME}
EXPOSE 3000
CMD ["yarn", "run", "dev"]

Weitere Informationen zu RUN apt-get ... finden Sie unter Fehlerbehebung bei Puppenspielern. es gibt. Dies bedeutet, dass ein Fehler auftritt, wenn der Browser und die Schriftart nicht im Container vorbereitet sind.

docker-compose.yml


version: "3"

services:
  nuxt:
    build: .
    volumes:
      - .:/app
    ports:
      - 3000:3000

Sobald Sie dies getan haben, erstellen Sie den Container einmal.

$ docker-compose build

Ich werde eine Scraping-App machen

Puppenspieler vorgestellt

Ich werde es in Garn legen.

$ docker-compose run --rm nuxt yarn add puppeteer

Erstellen Sie eine API

Wir werden [serverMiddleware] verwenden (https://ja.nuxtjs.org/api/configuration-servermiddleware/). Wir werden ServerMiddleware als API durchsuchen, indem wir auf Express-Vorlage verweisen, das ebenfalls offiziell eingeführt wurde.

js:nuxt.config.js


export default {
  ...
  ,
  serverMiddleware: {
    '/api': '~/api'
  }
}

Dies leitet den Zugriff von / api auf ~ / api / index.js. Also werde ich eine Datei machen.

$ mkdir api
$ touch api/index.js api/scraping.js

Ich habe zwei Dateien erstellt, aber "index.js" ist der Empfänger und ich werde "Scraping.js" die eigentliche Verarbeitung überlassen.

api/index.js


const app = require('express')()
const scraping = require('./scraping')

app.get('/get_image', async(req, res) => {
  const image = await scraping.getImage()
  res.send(image)
})

module.exports = {
  path: '/api',
  handler: app
}

Dies dient zum Aufrufen der Methode "get_image ()" von "Scraping.js", wenn auf "/ api / get_image" zugegriffen wird.

api/scraping.js


const puppeteer = require('puppeteer')

async function getImage() {
  const browser = await puppeteer.launch({
    args: [
      '--no-sandbox',
      '--disable-dev-shm-usage'
    ]
  })
  const page = await browser.newPage()
  await page.goto("https://toribure.herokuapp.com/")
  const image = await page.evaluate(() => {
    return document.getElementsByTagName("main")[0].getElementsByTagName("img")[0].src
  })
  return image
}

module.exports = {
  getImage
}

Es folgt fast Puppenspieler offizielle README. Sie können Elemente mit "page.evaluate" abrufen und bearbeiten. Wie Sie dem Entwicklertool usw. der HTML-Struktur dieses Scraping-Ziels (https://toribure.herokuapp.com/) entnehmen können, gibt es insgesamt nur eine Dies ist ein Bild eines Vogels, dessen Ziel das "img" -Element ist, das nur eines unter dem Hauptelement hat. (Es hat eine schmutzige Struktur, aber es ist süß) Sobald Sie das wissen, müssen Sie nur noch die Elemente wie normale js abrufen.

Dies ist das Ende der Codierung auf der API-Seite.

Die Front ist erfrischend

Ich werde müde. Wenn ich also den Knopf auf der Vorderseite drücke, wird das Bild angezeigt.

pages/index.vue


<template>
  <div>
    <button @click="showBird">Scraping!!</button>
    <br>
    <img v-if="src" :src="src">
  </div>
</template>

<script>
export default {
  data() {
    return {
      src: ""
    }
  },
  methods: {
    async showBird() {
      this.src = await this.$axios.$get("/api/get_image")
    }
  }
}
</script>

**Komplett! !! ** ** **

Funktionsprüfung

test.gif

Ein süßer Vogel kam heraus ♪

schließlich

Wenn Sie dies bisher tun können, ist der Rest die Welt der DOM-Manipulation. Wenn Sie also die Struktur der Zielseite verstehen und js schreiben, können Sie alles kratzen. Einige Websites verbieten das Schaben, daher wäre es großartig, wenn wir verschiedene Ideen verwirklichen könnten, während wir auf diesen Punkt achten!

Referenz

Recommended Posts

Schaben mit Puppenspieler in Nuxt auf Docker.
WordPress mit Docker Compose unter CentOS 8
Verwenden Sie Docker in einer Proxy-Umgebung unter Ubuntu 20.04.1
Bearbeiten Sie MySQL mit Befehlen in der Docker-Umgebung
Versuchen Sie, Docker in Ubuntu auf WSL zu setzen
Erstellen Sie eine Umgebung mit Docker unter AWS
Führen Sie Ubuntu + ROS mit Docker auf dem Mac aus
Umgang mit Composer-Installationsfehlern in Docker
Beginnen Sie mit der Installation von Docker auf EC2 und dem Ausführen von Yellowfin in einem Container
Setzen Sie Zabbix mit Docker in Ubuntu ein und überwachen Sie Docker auf demselben Host
Freiheit auf Docker
Installieren Sie einfach Laravel 8 auf dem Docker in der PHP8-Umgebung
Einführung in Rspec mit Ruby on Rails x Docker
Führen Sie JSP Hello World mit Tomcat auf Docker aus
Aktualisieren Sie das Container-Image mit KUSANAGI Runs on Docker
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Redmine auf Docker
Fehler beim Bereitstellen von Docker auf Schienen mit Notizen
[Hinweis] Erstellen Sie eine Python3-Umgebung mit Docker in EC2
Zeigen Sie die Liste in setDetails mit Federsicherheit auf dem Bildschirm an
So löschen Sie mit Docker Bilder ohne Tags in großen Mengen
Zeigen Sie die ROS-Anwendung auf Docker mit der GUI auf der Hostseite an
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Docker-Installation unter CentOS 6
Python-Memo auf Docker
Explodiere Docker mit WSL2
Installieren Sie Docker auf Manjaro
Verwenden Sie Puphpeteer mit Docker
Bedienen Sie Emby mit Docker
Führen Sie Payara mit Docker aus
Mit Podman im Docker möchte jeder miteinander auskommen und Docker mit einem gemeinsam genutzten Computer verwenden
Einweg-PHP mit Docker
Docker-Umgebung Nuxt-Axios-Modul zum Festlegen von baseURL
Installieren Sie Docker und Docker-Compose in kürzester Zeit auf Ubuntu
Die Zeit ist falsch mit der Anwendung, die auf dem Docker-Container gestartet wurde
Konfigurationsskript für die Verwendung von Docker in einer Proxy-Umgebung unter Ubuntu 20.04.1