🏆 Mundial 2026 EN VIVO · Próximo: España vs Argentina entra →

Tutorial: Autopost + Generar Contenido

  • Autor Autor Cicklow
  • Fecha de inicio Fecha de inicio
Cicklow

Cicklow

Admin
Dseda
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Suscripción a IA
Buenas, hace bastante que no hacia un tutorial para el foro, pero, acá estamos... En este tutorial aprenderemos (o al menos lo intentaremos), crear un scraper de contenido de sitios ya caducado (osea que el dominio expiro), y le sacaremos el contenido que tenia (sus post) para:
- Crear contenido para nuestro sitio
- Crear contenido hacia nuestro sitio


Para esto necesitaremos tener instalado python +3 en nuestra pc/server/gato!

1 - Instalar python + pip​

Vamos a https://www.python.org/downloads/ y descargamos la versión de nuestro SO, luego de descargarlo lo instalamos (el común y mas viejo: siguiente, siguiente siguiente)
Luego necesitaremos instalar pip, que es el encargado de instalar los paquetes de python que necesitemos, veremos el tutorial en: instalar pip

2- Descargar / instalar Scraper / editar Scraper​

Para esto utilizaremos el git de: https://github.com/eneiromatos/NebulaExpiredArticleHunter/ el cual nos permite descargar los post de los dominios caducados (usa el cache de web archive)
Una ves descargado en nuestro dispositivo, abrimos la consola, nos dirigimos a donde extrajimos el contenido del zip (ejemplo C:\Users\Cicklow\Desktop\NebulaExpiredArticleHunter\) y ponemos el comando:
Bash:
pip install -r requirements.txt
El cual nos instalara las librerías necesarias que usa nebula!

Cuando ya tengamos instalado todas las librerias, realizaremos una edicion al archivo scrapearticle.py, el cual lo editaremos para que nos sirva mejor.
Buscamos la funcion
Python:
    def __scrape_article(self) -> str:
        wburl = self.__wburl

        # Configuration for Newspaper.Article instance
        conf_news = CfgNews()
        conf_news.fetch_images = False
        conf_news.browser_user_agent = config.user_agent
        conf_news.request_timeout = config.request_time_out

        article = Article(wburl, config=conf_news)
        article.download()
        article.parse()
        self.__word_count = len(f'{article.text} {article.title}'.strip().split(' '))
        if self.__word_count < config.min_word_len or self.__word_count > config.max_word_len:
            return None
        self.__title = article.title
        return article.title + '\n' + article.text
Y la cambiamos por:
Python:
    def __scrape_article(self) -> str:
        wburl = self.__wburl

        # Configuration for Newspaper.Article instance
        conf_news = CfgNews()
        conf_news.fetch_images = False
        conf_news.browser_user_agent = config.user_agent
        conf_news.request_timeout = config.request_time_out

        article = Article(wburl, config=conf_news)
        article.download()
        article.parse()
        self.__word_count = len(f'{article.text} {article.title}'.strip().split(' '))
        if self.__word_count < config.min_word_len or self.__word_count > config.max_word_len:
            return None
        self.__title = article.title

        contenido = article.text.replace("\n", "<br/>")
        paraquien = "blogger"
        if(paraquien=="blogger"):
            xPOST = {'title': article.title, 'keys': article.keywords, 'img': article.top_image, 'minitxt': article.summary, 'post': contenido}
            return json.dumps(xPOST, indent=1, ensure_ascii=False)
        else:
            addimg = ""
            if article.top_image:
                addimg = "<img src='"+article.top_image+"'>"

            xPOST = "<h1>" + article.title + "</h1><center>"+addimg+"</center><p>" + contenido + "</p>"
            return xPOST
Por que el edit?, es para tener mas control sobre el contenido scrapeado y luego subirlo a donde lo necesitemos. Como vemos tenemos dos opciones, formato para blogger (no editemos ese...) u otro, este otro lo pueden editar a gusto.

3- Archivo encargado de subir nuestro post a blogger​

Este archivo que crearemos, nos permitira subir todo el contendo screapeado a blogger (usaremos blogger para crear backlinks hacia nuestro sitio real). y lo guardamos en la misma carpeta del nebula.
Python:
from os import system
import os
import json
import glob
import re

#keys y su url
rkeys = {"home":"https://www.google.com/","reading":"https://www.bing.com/","books":"https://www.yahoo.com"}
#cantidad de reemplazos
cantidadR = 1
#template para el link
tlink = "<a href='#URL#' target='_blank'>#KEY#</a>"

#id del blog (lo obtenemos al ver el codigo fuente de nuestro blogger, en /feed/ID_BLOGGER/)
BLOG_ID = "00000000000000"

#directorios de donde sacar los post (carpetas generadas por el scraper)
cualdir = ['dominiocaducad1.com','dominiocaducado2.com']

#template para los post
cualt = "template.txt"
f = open(cualt, "r")
ctemp = f.read()
f.close()

for dd in cualdir:
    files = glob.glob('./projects/'+ dd +'/*.txt')
    for ff in files:
        with open(ff, encoding='utf-8') as f:
            data = json.load(f)
            ftxt = ctemp.replace('#TEXTO#',data['post'])

            if data['img']:
                ftxt = ftxt.replace('#IMAGEN#',"<img src='"+ data['img'] +"'>")
            else:
                ftxt = ftxt.replace('#IMAGEN#','')

            for k,v in rkeys.items():
                tmp_link = tlink.replace('#URL#',v).replace('#KEY#',k)
                ftxt = ftxt.replace(k,tmp_link,cantidadR)

            veamos = 'easyblogger --blogid '+ BLOG_ID +' post -t "'+ data['title'].strip() +'" -l "'+ ",".join(data['keys']) +'" --publish -c "'+ ftxt + '"'
            system(veamos)
            print("[+] Posteado: " + data['title'].strip() + "\n")
El codigo lo que hace es recorrer las carpetas donde el scraper guardo nuestros post, los pasa por el template, y luego usando easyblogger, los postea!

Fix edit: En algunos casos el theme que tenemos en blogger nos saca parte del HTML (no se porque pasa esto, lo descubri creando la demo en un blog nuevo).
Entonces si pasa esto, editamos el script anterior y cambiamos:
Python:
            veamos = 'easyblogger --blogid '+ BLOG_ID +' post -t "'+ data['title'].strip() +'" -l "'+ ",".join(data['keys']) +'" --publish -c "'+ ftxt + '"'

            system(veamos)
por:
Python:
            f_tmp = open("demofile.txt", "w")
            f_tmp.write(ftxt)
            f_tmp.close()

            veamos = 'easyblogger --blogid '+ BLOG_ID +' post -t "'+ data['title'].strip() +'" -l "'+ ",".join(data['keys']) +'" --publish -f "demofile.txt"'
            system(veamos)

            os.remove("demofile.txt")
Lo que hacemos es crear un txt temporario, guardar el contenido del post y le indicamos a easyblogger que use ese archivo para subir el contenido... por lo demas el script continua funcionando igual.
1660178611260.png


4- Obtener dominios caducados y scrapear​

Para esto iremos a https://member.expireddomains.net/ (si no tenemos cuenta, nos creamos una, es gratis). Nos logeamos y buscamos la que que necesitemos.
Ejemplo "software", nos aparecera un listado de dominios, y los ordenaremos por "ACR", que son la cantidad de url en cache de WebArchive.org
1660142538593.png

le damos click al boton copiar al portapapeles (esto nos copiara las 25url que tenemos en pantalla). Una vez copiadas las url, vamos a la carpeta del nebula, buscamos/creamos el archivo expired_domains.txt y agregamos las url.
Volvemos a la consola de nuestro SO. y ponemos el comando python main.py esto lo que hace es comenzar a descargar los post que tengan los sitios webs caducados. Los guarda todos en la carpeta projects/dominiocaducado.com
El script puede tardar bastante dependiendo de la cantidad de url cacheadas!.

5- Instalar easyblogger​

Este script (easyblogger) lo que hace es permitirnos postear en blogger desde nuestra dispositivo. Para esto vamos a la consola de nuestro SO y ponemos:
Bash:
pip install EasyBlogger
Luego instalamos pandoc

Esperamos que termine y luego ejecutamos:
Bash:
easyblogger --blogid <yourblogid> get
el <yourblogid>lo obtenemos accediendo a nuestro blog (en blogger), viendo el codigo fuente y buscar algo como:
HTML:
<link rel="alternate" type="application/atom+xml" title="Nifty Tidbits - Atom" href="http://blog.rraghur.in/feeds/posts/default" />
<link rel="alternate" type="application/rss+xml" title="Nifty Tidbits - RSS" href="http://blog.rraghur.in/feeds/posts/default?alt=rss" />
<link rel="service.post" type="application/atom+xml" title="Nifty Tidbits - Atom" href="http://www.blogger.com/feeds/7642453/posts/default" />
El cual 7642453 seria nuestro ID (ejemplo)
Volviendo a ejecutar el comando, el script nos abrira una url en nuestro navegador el cual le daremos permiso a easyblogger para que controle nuestro blogger (cualquier problema con este script, el git tiene las intrucciones necesarias).

6- Subir nuestros post a blogger​

Ahora ejecutaremos el arhivo creado en el paso 3 con:
Bash:
py nombre_archivo.py
Si vemos en el paso 3, tenemos algunas opciones para editar
- Las keys y sus respectivas url
Python:
#keys y su url
rkeys = {"home":"https://www.google.com/","reading":"https://www.bing.com/","books":"https://www.yahoo.com"}
Aca cambiamos las keys junto a las url de nuestros blogs.

- Cantidad de cambios
Python:
#cantidad de reemplazos
cantidadR = 1
Esta variable nos permitira saber cuantos cambios hacemos respecto a las keys, por defecto es 1, osea que la primer palabra que encuentre con nuestra key, sera reemplazada por la url de nuestro blog. Si ponemos 2, reemplazara 2 keys iguales, etc...

- Template para los links
Python:
#template para el link
tlink = "<a href='#URL#' target='_blank'>#KEY#</a>"
Este template nos permitira crear el formato de los links, no tiene mucho misterio, pero si es necesario agregar algo mas al link, desde ahi pueden.

- Directorios donde sacar los articulos
Python:
#directorios de donde sacar los post
cualdir = ['dominio1.com']
Aca colocaremos los dominios/nombre de la carpeta, desde donde nuestro script sacara los articulos. Esto esta echo asi porque el scraper por ahi junta muchas cosas que no necesitamos, ejemplo el post de las politicas de privacidad, contacto, esas cosas... Nos tendremos que tomar el trabajo, luego que el scraper termine, de ir recorriendo cada carpeta/dominio y sacar los post que no necesitemos.

-Template para los post en blogger
HTML:
<center>#IMAGEN#</center>
<p>#TEXTO#</p>
Este mini template le indicara a nuestro script como tendran que ser los post en blogger. Ustedes pueden editarlo respetando las palabras a reemplazar (#IMAGEN#, #TEXTO#)... Pueden editar el script para que si el post no tiene imagen, coloque una por defecto en:
Python:
            if data['img']:
                ftxt = ftxt.replace('#IMAGEN#',"<img src='"+ data['img'] +"'>")
            else:
                ftxt = ftxt.replace('#IMAGEN#','<img src='URL_IMAGEN_DEFECTO'>')

Al ejecutar el script, easblogger posteara todo en nuestro blog.

7- Otros CMS​

Nuestro script esta echo para funcionar en blogger, pero podemos hacerlo funcionar en WP, para esto vamos a scrapearticle.py buscamos
Python:
paraquien = "blogger"
y cambiamos el valor de esa variable (por cualquier cosa).
En WP usaremos el plugin https://wordpress.org/plugins/import-html-pages/ (ustedes usen el que gusten), lo configuramos indicando donde estaran los txt (tendremos que subir los txt a nuestro hosting), y como sacar el contenido... en nuestro ejemplo, le diremos que saque el titulo del post de entre <h1> y </h1> y el post desde <p> y </p> (todo esto se puede cambiar desde el archivo scrapearticle.py.
Le damos importar y tendremos un WP lleno de post, GRATIS!


Notas finales​

Todo esto nos genera contenido GRATIS para nuestro sitio, o para obtener backlinks, no es del todo automatico, pero nos sirve (hay soft pagos como article hunter, etc que hacen esto, pero, nosotros editamos a gusto y placer nuestro script).
Las ediciones o planes que tengan sobre esto, son suyas, ejemplo pueden buscar como modificar el texto para que no sea exacto a lo que hay, hacerles mejoras, etc... todo pueden hacerlo, siempre y cuando NO se les ocurra vender este tutorial como propio ni modificaciones del mismo!
Hay muchos script en github, es solo aprender a usarlo y agregarlos a nuestra programacion (si, les tocara aprender a programar, aunque sea un poco).

El script nebula usa una libreria bastante buena: https://github.com/codelucas/newspaper la cual con solo pasar la url de un post nos permite extraer el post, por si quieren mas detalles como funciona esa libreria, agregarle mas cosas al codigo base. O usarla para otras cosas!

Para todo esto, link de descarga (nebulahunter + script upload de blogger): https://mega.nz/file/q6ZSzQzJ#d-AjBk0FRktuu3Q2LMZ-iIJVQthBdAMBszw1MiVkcq8 (hay dos archivos para subir a blogger, uno usa lo de crear el archivo temporario y el otro no... vean cual les funciona mejor).

DEMO: https://freetarotonlinenow.blogspot.com/
Edit Con mejoras 1: https://forobeta.com/temas/autopost-generar-contenido.902045/post-8055728

Saludos y buen scrape!

 
Última edición:
Como todos tus tutos todo bien explicado. En cuanto tenga algo de tiempo lo probaré. Muchas gracias
 
Solo un poco de trabajo y listo. Bacán, gracias amigo por el tutorial. Justo tan solo hace unos pocos días estaba buscando esto y ahora me topo con este post, muy util
 
Excelente tutorial como todos los anteriores, no dejes de sorprendernos 😍
Si hubiera un concurso activo de tutoriales seguro ganabas.
 
excelente
muchas gracias
 
Tutorial tuyo, Tutorial en mis favoritos, Excelente aporte compañero!
 
He hecho mi primera donación a este post. Anteriormente también he aprendido de otros tutos de este mismo usuario.

Gracias.
 
Se agrego un demo del blog en blogger y un fix por cosas raras que hace blogger XD
 
para como esta la tecnología de avanzada seria de mas ayuda crear un video tutorial en YouTube ya como pocos sabemos programar en este foro
 
Genial. Lo guardo para probarlo en estos días
 
para como esta la tecnología de avanzada seria de mas ayuda crear un video tutorial en YouTube ya como pocos sabemos programar en este foro
Mis tutoriales son todos asi... son mas que nada para aprender !
 
Excelente tutorial. Se agradece.
 
muy buen post, gracias por su aporte, lo voy a agregar a favoritos para probar luego cuando tenga algo mas de tiempo, me surge una duda, el archivo main.py es el mismo que esta publicado o es diferente?
 
Excelente, aunque ya me gustaría aprender algo de python
 
muy buen post, gracias por su aporte, lo voy a agregar a favoritos para probar luego cuando tenga algo mas de tiempo, me surge una duda, el archivo main.py es el mismo que esta publicado o es diferente?
main.py es el mismo que el git, solo se edito scrapearticle.py del nebula...
 
Excelente tutorial, lastima que no le se mucho jaja.


Me quedo en este paso 🙁
 
mañana lo leo bien.
Gracias. 🙂
 
Excelente aporte, gracias 🙌🏻
 
Atrás
Arriba