Workflow n8n

Automatisation n8n : extraction de données web avec MongoDB

  • Ce workflow n8n a pour objectif d'automatiser l'extraction de données à partir de pages web et de les stocker dans une base de données MongoDB. Conçu pour les entreprises qui cherchent à récupérer des informations précises et à les organiser efficacement, ce processus peut être particulièrement utile pour les équipes de marketing, de recherche ou d'analyse de données. En utilisant des requêtes HTTP, le workflow extrait des données HTML, les traite et les enregistre dans MongoDB, permettant ainsi une gestion simplifiée des informations collectées.
  • Le déroulé du workflow commence par un déclencheur manuel qui initie le processus. Ensuite, une première requête HTTP est effectuée pour récupérer le contenu des pages web ciblées. Les données extraites sont ensuite traitées par le nœud HTML Extract pour en extraire les informations pertinentes. Ce processus est optimisé grâce à la fonction SplitInBatches, qui permet de gérer les données en plusieurs lots.
  • Les données sont ensuite préparées et stockées dans MongoDB, ce qui facilite leur accès et leur manipulation ultérieure. Des conditions sont mises en place pour gérer l'extraction de plusieurs pages et pays, garantissant ainsi que toutes les informations nécessaires sont collectées. Ce workflow n8n offre une solution efficace pour automatiser la collecte de données, réduisant ainsi le temps et les efforts nécessaires pour obtenir des informations précises, tout en minimisant les erreurs humaines.
Tags clés :automatisationMongoDBextraction de donnéesn8nweb scraping
Catégorie: Manual · Tags: automatisation, MongoDB, extraction de données, n8n, web scraping0

Workflow n8n MongoDB, extraction de données, web scraping : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n MongoDB, extraction de données, web scraping : détail des nœuds

  • On clicking 'execute'

    Déclenche le workflow manuellement lorsque l'utilisateur clique sur 'exécuter'.

  • HTTP Request

    Effectue une requête HTTP vers une URL spécifiée et récupère la réponse.

  • HTML Extract

    Extrait des données HTML en fonction des valeurs d'extraction définies.

  • SplitInBatches

    Divise les données en plusieurs lots selon la taille de lot spécifiée.

  • HTTP Request1

    Effectue une seconde requête HTTP vers une autre URL et traite la réponse.

  • HTML Extract1

    Extrait des données HTML à partir de données sources fournies.

  • MongoDB1

    Effectue une opération sur une collection MongoDB avec les champs et options spécifiés.

  • uProc

    Utilise l'outil uProc pour effectuer des opérations spécifiques selon les paramètres fournis.

  • Prepare Documents

    Prépare des documents en exécutant un code de fonction personnalisé.

  • More Countries

    Évalue des conditions pour déterminer si d'autres pays doivent être traités.

  • Set Page to Scrape

    Définit la page à extraire en exécutant un code de fonction.

  • More Pages

    Évalue des conditions pour déterminer si d'autres pages doivent être traitées.

  • Set More Pages

    Met à jour les paramètres pour définir plus de pages à extraire.

  • Set

    Définit des valeurs spécifiques dans le workflow selon les options fournies.

  • Generate filename

    Génère un nom de fichier en exécutant un code de fonction personnalisé.

  • Read Binary File

    Lit un fichier binaire à partir d'un chemin de fichier spécifié.

  • File exists?

    Vérifie si un fichier existe en fonction des conditions spécifiées.

  • Write Binary File

    Écrit des données binaires dans un fichier avec un nom de fichier spécifié.

  • Read Binary File1

    Lit un autre fichier binaire à partir d'un chemin de fichier donné.

  • Wait

    Met le workflow en pause en exécutant un code de fonction personnalisé.

  • Prepare countries

    Prépare des pays en exécutant un code de fonction personnalisé.

  • Create Directory

    Crée un répertoire en exécutant une commande système.

  • MongoDB

    Effectue une requête sur une collection MongoDB avec des critères de recherche spécifiés.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "id": "14",
  "name": "extract_swifts",
  "nodes": [
    {
      "name": "On clicking 'execute'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -140,
        820
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        320,
        820
      ],
      "parameters": {
        "url": "https://www.theswiftcodes.com/browse-by-country/",
        "options": {},
        "responseFormat": "string"
      },
      "typeVersion": 1
    },
    {
      "name": "HTML Extract",
      "type": "n8n-nodes-base.htmlExtract",
      "position": [
        510,
        820
      ],
      "parameters": {
        "options": {},
        "extractionValues": {
          "values": [
            {
              "key": "countries",
              "attribute": "href",
              "cssSelector": "ol > li > a",
              "returnArray": true,
              "returnValue": "attribute"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "SplitInBatches",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        910,
        820
      ],
      "parameters": {
        "options": {
          "reset": false
        },
        "batchSize": 1
      },
      "typeVersion": 1
    },
    {
      "name": "HTTP Request1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2250,
        740
      ],
      "parameters": {
        "url": "={{$node[\"Set\"].json[\"url\"]}}",
        "options": {},
        "responseFormat": "file"
      },
      "typeVersion": 1
    },
    {
      "name": "HTML Extract1",
      "type": "n8n-nodes-base.htmlExtract",
      "position": [
        2750,
        590
      ],
      "parameters": {
        "options": {},
        "sourceData": "binary",
        "extractionValues": {
          "values": [
            {
              "key": "next_button",
              "attribute": "href",
              "cssSelector": "span.next > a",
              "returnValue": "attribute"
            },
            {
              "key": "names",
              "cssSelector": "td.table-name",
              "returnArray": true
            },
            {
              "key": "swifts",
              "cssSelector": "td.table-swift",
              "returnArray": true
            },
            {
              "key": "cities",
              "cssSelector": "td.table-city",
              "returnArray": true
            },
            {
              "key": "branches",
              "cssSelector": "td.table-branch",
              "returnArray": true
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "MongoDB1",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        3280,
        590
      ],
      "parameters": {
        "fields": "iso_code,country,page,name,branch,city,swift_code,createdAt,updatedAt",
        "options": {
          "dateFields": "createdAt,updatedAt"
        },
        "operation": "insert",
        "collection": "swifts.meetup"
      },
      "credentials": {
        "mongoDb": "db-mongo"
      },
      "typeVersion": 1
    },
    {
      "name": "uProc",
      "type": "n8n-nodes-base.uproc",
      "position": [
        1100,
        820
      ],
      "parameters": {
        "tool": "getCountryNormalized",
        "group": "geographic",
        "country": "={{$node[\"SplitInBatches\"].json[\"country\"].replace(/[\\/0-9]/g, \"\")}}",
        "additionalOptions": {}
      },
      "credentials": {
        "uprocApi": "uproc-miquel"
      },
      "typeVersion": 1
    },
    {
      "name": "Prepare Documents",
      "type": "n8n-nodes-base.function",
      "position": [
        2930,
        590
      ],
      "parameters": {
        "functionCode": "var newItems = [];\n\nfor (i = 0; i < items[0].json.swifts.length; i++) {\n  var item = {\n    iso_code: $node['uProc'].json.message.code,\n    country: $node['SplitInBatches'].json.country.replace(/[-\\/0-9]/g, \"\"),\n    page: $node['Set Page to Scrape'].json.page,\n    name: items[0].json.names[i],\n    city: items[0].json.cities[i],\n    branch: items[0].json.branches[i],\n    swift_code: items[0].json.swifts[i],\n    createdAt: new Date(),\n    updatedAt: new Date()\n  }\n  newItems.push({json: item});\n}\n\nreturn newItems;\n\n"
      },
      "typeVersion": 1
    },
    {
      "name": "More Countries",
      "type": "n8n-nodes-base.if",
      "position": [
        2810,
        1100
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$node[\"SplitInBatches\"].context[\"noItemsLeft\"] + \"\"}}",
              "value2": "true"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Set Page to Scrape",
      "type": "n8n-nodes-base.functionItem",
      "position": [
        1290,
        680
      ],
      "parameters": {
        "functionCode": "const staticData = getWorkflowStaticData('global');\n\nitem.page = \"\";\nif (staticData.page && staticData.page.length) {\n  item.page = staticData.page;\n} else {\n  item.page = $node['SplitInBatches'].json.country;\n}\nreturn item;\n"
      },
      "typeVersion": 1
    },
    {
      "name": "More Pages",
      "type": "n8n-nodes-base.if",
      "position": [
        3070,
        1020
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json[\"more_pages\"] + \"\"}}",
              "value2": "true"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Set More Pages",
      "type": "n8n-nodes-base.function",
      "position": [
        3470,
        590
      ],
      "parameters": {
        "functionCode": "var next_page = $node['HTML Extract1'].json.next_button && $node['HTML Extract1'].json.next_button.length ? $node['HTML Extract1'].json.next_button : \"\";\nvar more_pages = next_page.length > 0;\nconst staticData = getWorkflowStaticData('global');\n\n//all current items are after date: needs pagination\nif (more_pages) {\n  staticData.page = next_page;\n} else {\n  //don't check more items in previous pages;\n  delete staticData.page;\n}\n\nreturn [\n  {\n    json: {\n      more_pages: more_pages\n    }\n  }\n];\n"
      },
      "typeVersion": 1
    },
    {
      "name": "Set",
      "type": "n8n-nodes-base.set",
      "position": [
        1440,
        680
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "url",
              "value": "=https://www.theswiftcodes.com{{$node[\"Set Page to Scrape\"].json[\"page\"]}}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "name": "Generate filename",
      "type": "n8n-nodes-base.functionItem",
      "position": [
        1600,
        610
      ],
      "parameters": {
        "functionCode": "var generateNameFromUrl = function(url){\n    return url.replace(/[^a-z0-9]/gi, \"_\");\n}\n\nitem.file = generateNameFromUrl(item.url) + \".html\"\nreturn item;"
      },
      "typeVersion": 1
    },
    {
      "name": "Read Binary File",
      "type": "n8n-nodes-base.readBinaryFile",
      "position": [
        1770,
        610
      ],
      "parameters": {
        "filePath": "=/home/node/.cache/scrapper/{{$json[\"file\"]}}"
      },
      "typeVersion": 1,
      "continueOnFail": true,
      "alwaysOutputData": true
    },
    {
      "name": "File exists?",
      "type": "n8n-nodes-base.if",
      "position": [
        1950,
        610
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$node[\"Read Binary File\"].binary.data.mimeType}}",
              "value2": "text/html"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Write Binary File",
      "type": "n8n-nodes-base.writeBinaryFile",
      "position": [
        2400,
        740
      ],
      "parameters": {
        "fileName": "=/home/node/.cache/scrapper/{{$node[\"Generate filename\"].json[\"file\"]}}",
        "dataPropertyName": "=data"
      },
      "typeVersion": 1
    },
    {
      "name": "Read Binary File1",
      "type": "n8n-nodes-base.readBinaryFile",
      "position": [
        2570,
        590
      ],
      "parameters": {
        "filePath": "=/home/node/.cache/scrapper/{{$json[\"file\"]}}"
      },
      "typeVersion": 1,
      "continueOnFail": true,
      "alwaysOutputData": true
    },
    {
      "name": "Wait",
      "type": "n8n-nodes-base.function",
      "position": [
        2090,
        740
      ],
      "parameters": {
        "functionCode": "const waitTimeSeconds = 1;\n\nreturn new Promise((resolve) => {\n  setTimeout(() => {\n    resolve([]);\n  }, waitTimeSeconds * 1000);\n});\n"
      },
      "typeVersion": 1,
      "continueOnFail": true,
      "alwaysOutputData": true
    },
    {
      "name": "Prepare countries",
      "type": "n8n-nodes-base.function",
      "position": [
        700,
        820
      ],
      "parameters": {
        "functionCode": "return items[0].json.countries.map(function(country) {\n  return {\n  json: {country: country}\n  }\n});"
      },
      "typeVersion": 1
    },
    {
      "name": "Create Directory",
      "type": "n8n-nodes-base.executeCommand",
      "position": [
        70,
        820
      ],
      "parameters": {
        "command": "mkdir -p  /home/node/.cache/scrapper/"
      },
      "typeVersion": 1,
      "continueOnFail": true
    },
    {
      "name": "MongoDB",
      "type": "n8n-nodes-base.mongoDb",
      "disabled": true,
      "position": [
        3100,
        520
      ],
      "parameters": {
        "query": "={\"swift_code\": \"{{$json[\"swift_code\"]}}\"}",
        "options": {},
        "collection": "swifts.meetup"
      },
      "credentials": {
        "mongoDb": "db-mongo"
      },
      "executeOnce": false,
      "typeVersion": 1,
      "alwaysOutputData": true
    }
  ],
  "active": false,
  "settings": {},
  "connections": {
    "Set": {
      "main": [
        [
          {
            "node": "Generate filename",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "HTTP Request1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "uProc": {
      "main": [
        [
          {
            "node": "Set Page to Scrape",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MongoDB": {
      "main": [
        []
      ]
    },
    "MongoDB1": {
      "main": [
        [
          {
            "node": "Set More Pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "More Pages": {
      "main": [
        [
          {
            "node": "Set Page to Scrape",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "More Countries",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "File exists?": {
      "main": [
        [
          {
            "node": "Read Binary File1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML Extract": {
      "main": [
        [
          {
            "node": "Prepare countries",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "HTML Extract",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML Extract1": {
      "main": [
        [
          {
            "node": "Prepare Documents",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request1": {
      "main": [
        [
          {
            "node": "Write Binary File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "More Countries": {
      "main": [
        [],
        [
          {
            "node": "SplitInBatches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set More Pages": {
      "main": [
        [
          {
            "node": "More Pages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SplitInBatches": {
      "main": [
        [
          {
            "node": "uProc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Directory": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Binary File": {
      "main": [
        [
          {
            "node": "File exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate filename": {
      "main": [
        [
          {
            "node": "Read Binary File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Documents": {
      "main": [
        [
          {
            "node": "MongoDB1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare countries": {
      "main": [
        [
          {
            "node": "SplitInBatches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Binary File1": {
      "main": [
        [
          {
            "node": "HTML Extract1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write Binary File": {
      "main": [
        [
          {
            "node": "Read Binary File1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Page to Scrape": {
      "main": [
        [
          {
            "node": "Set",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On clicking 'execute'": {
      "main": [
        [
          {
            "node": "Create Directory",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n MongoDB, extraction de données, web scraping : pour qui est ce workflow ?

Ce workflow s'adresse aux équipes marketing, aux analystes de données et aux développeurs souhaitant automatiser la collecte d'informations à partir de sites web. Il est idéal pour les entreprises de taille moyenne à grande qui ont besoin de récupérer des données de manière régulière et structurée.

Workflow n8n MongoDB, extraction de données, web scraping : problème résolu

Ce workflow résout le problème de la collecte manuelle de données sur le web, qui est souvent chronophage et sujet à des erreurs. En automatisant ce processus, les utilisateurs peuvent gagner un temps précieux et réduire les risques d'inexactitudes dans les données collectées. À la suite de la mise en place de ce workflow, les utilisateurs obtiennent des données fiables et organisées, prêtes à être analysées ou utilisées dans d'autres applications.

Workflow n8n MongoDB, extraction de données, web scraping : étapes du workflow

Étape 1 : Le workflow commence par un déclencheur manuel qui active le processus.

  • Étape 1 : Une requête HTTP est envoyée pour récupérer le contenu des pages web cibles.
  • Étape 2 : Les données récupérées sont traitées par le nœud HTML Extract pour extraire les informations pertinentes.
  • Étape 3 : Les données sont ensuite divisées en plusieurs lots grâce au nœud SplitInBatches.
  • Étape 4 : Les données sont préparées pour être stockées dans MongoDB.
  • Étape 5 : Les informations sont ensuite enregistrées dans la base de données MongoDB pour un accès facile.
  • Étape 6 : Des conditions sont vérifiées pour gérer l'extraction de plusieurs pages et pays, garantissant la complétude des données.

Workflow n8n MongoDB, extraction de données, web scraping : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier l'URL dans les nœuds HTTP Request pour cibler d'autres pages web. Il est également possible d'ajuster les valeurs d'extraction dans les nœuds HTML Extract pour récupérer des informations spécifiques. Si vous souhaitez ajouter d'autres pays ou pages à scraper, vous pouvez le faire dans les nœuds de condition. Assurez-vous que les paramètres de connexion à MongoDB sont correctement configurés pour garantir que les données sont stockées dans la bonne collection. Enfin, vous pouvez adapter le code dans les nœuds Function pour effectuer des traitements supplémentaires sur les données extraites.