ChatGPT est capable de génerer un grand nombre de taches sur tout ce qui touche au contenu (génération, résumé, optimisation, reformulation,…)
Mais il y a un autre domaine où il peut s’avérer redoutable : la génération de code.
Je me suis amusé à lui demander de me créer un crawler en langage R.
Comment faire ?
Je suis parti du prompt suivant que j’ai éxecuté avec GPT4 :
Tu es un dev R expérimenté
Donne moi le script R pour réaliser un crawler
A partir d'une url tu vas découvrir toutes les pages d'un sites
Tu stockeras tous les liens dans un data frame links (contenant l'url de la page source, l'url de la page destination, l'ancre du lien
Et le code html des pages dans le data frame pages
Transforme les liens relatifs en liens absolus
Gère les erreurs 404,500 et les autres
Affiche moi un % d'avancement
Ne crawle que les liens internes
Il m’a généré un script que j’ai ensuite exécuté.
Comme toujours lorsqu’on lui demande des taches complexes j’avais quelques erreurs que je lui ai remonté afin qu’il me génère une nouvelle version du code prenant en compte l’erreur rencontrée
Le résultat
Au bout de quelques aller retour pour lui faire corriger mon script, j’ai pu lancer un crawl complet.
L’avancement du crawl
Pendant l’exécution, j’ai un suivi d’avancement :

Je peux facilement voir le pourcentage de pages traitées par rapport à celles qu’il connait.
Les pages découvertes
Voici la liste des pages qu’il a découvert pour le site gameofseo.fr.
Je lui ai demandé de me stocker le code HTML, ce qui me permettra dans un seconde temps d’analyser les différentes balises SEO (title, meta, canonical, voire d’analyser la sémantique des contenus)

Les liens entre les pages
Et j’ai également à ma dispo la liste des liens internes qu’il a trouvé avec l’ancre associée :

Le code final généré par chat GPT
library(rvest)
library(dplyr)
library(urltools)
# Initial URL
start_url <- "https://gameofseo.fr/"
domain <- domain(start_url)
# Data frames to store the links and pages
links <- data.frame(source = character(), destination = character(), anchor = character(), stringsAsFactors = FALSE)
pages <- data.frame(url = character(), html = character(), stringsAsFactors = FALSE)
# Queue of URLs to crawl
queue <- c(start_url)
visited <- c()
while (length(queue) > 0) {
url <- queue[1]
queue <- queue[-1]
visited <- c(visited, url)
# Display progress
cat(sprintf("Crawling: %s (%.2f%%)\n", url, length(visited) / (length(visited) + length(queue)) * 100))
# Try to read the page
try({
page <- read_html(url)
# Store the page HTML
pages <- rbind(pages, data.frame(url = url, html = as.character(page), stringsAsFactors = FALSE))
# Extract the links
anchors <- html_nodes(page, "a")
hrefs <- html_attr(anchors, "href")
texts <- html_text(anchors)
# Process the links
for (i in seq_along(hrefs)) {
href <- hrefs[i]
text <- texts[i]
# Handle relative links
if (startsWith(href, "/")) {
href <- paste0(scheme(url), "://", domain, href)
}
# Only crawl internal links if the domain is valid
if (!is.na(domain(href)) && domain(href) == domain) {
links <- rbind(links, data.frame(source = url, destination = href, anchor = text, stringsAsFactors = FALSE))
if (!(href %in% visited) && !(href %in% queue)) {
queue <- c(queue, href)
}
}
}
}, silent = TRUE)
}
Conclusion
Le résultat n’est pas immédiat car Chat GPT a parfois du mal à gérer toutes les exceptions qui peuvent se produire. Parfois il a également tendance à inventer des instructions qui n’existent pas (mais si on lui remonte l’erreur, il sera souvent capable de la corriger)
A titre perso, je l’utilise de plus en plus pour développer plus rapidement : pour des taches simples, il fournit assez souvent un code qui fonctionne.
1 commentaire
zonetuto · 18/08/2023 à 10:36
Je me suis fait le mien en php, si on connaît le métier on gagne un temps fou