Script en Python para obtener datos de un Post y generar Markdown con un clic

By alberto0607 on 4/10/2023


Existen tareas que realizamos diariamente que podrían automatizarse, esto nos ahorraría mucho tiempo para usar en otras cosas productivas, nos evitaría cometer errores y eliminaríamos esa sensación de fastidio de tener que repetir lo mismo día tras día.

Esta es una forma perfecta de mantener la práctica de escribir código en Python para seguir aprendiendo y realizar ejercicios útiles en las tareas cotidianas.

En esta ocasión, creé un script usando el método de web scraping, para obtener la información necesaria para crear los post de curación de la cuenta @visualblock. Esta información se obtiene usando los enlaces de cada post, donde el script se interna en el HTML del post y extrae los datos que les pedimos.

Para este Script me apoyé en la biblioteca requests y beautifulsoup4, esta última la consideré la forma más sencilla de obtener los datos y más fácil de entender para mi.

El flujo del script es el siguiente:

  • Se inicializa un contador que nos va enumerar los post.

  • Se abre el archivo de texto para escribir la salida (salida.txt) y se leen los enlaces del archivo de texto enlaces.txt.


  • Se recorre cada enlace con un ciclo for de la lista de enlaces de enlaces.txt. Se envía la solicitud GET a la URL, usando la biblioteca requests. Luego se crea un objecto BeautifulSoup (ver documentación) a partir de la respuesta. Los datos nombre de usuario, título y URL de la imagen principal se guardan en variables. Si existe un ellos en un enlace, se imprime la respuesta en el archivo salida.txt.

Es importante comentar que este script funciona con enlaces de https://ecency.com. Me ha dado algunos errores con https://peakd.com y https://hive.blog , pero es algo que se puede solucionar más adelante.

  • Al final imprime la salida tanto en la terminal como en el archivo salida.txt.

Código fuente:


import requests
from bs4 import BeautifulSoup

contador = 0

# Abrir el archivo de texto para escribir la salida
with open('salida.txt', 'w') as file:
  
  # Leer los enlaces desde un archivo de texto
  with open('enlaces.txt', 'r') as f:
    enlaces = [line.strip() for line in f]

  for url in enlaces:

    contador += 1
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    try:
      # Obtener el nombre de usuario
      username = soup.find('span', class_='author-name').text.strip()

      # Obtener el título del artículo
      title = soup.find('meta', property='og:title')['content']

      # Obtener la URL de la imagen principal
      image_url = soup.find('meta', property='og:image')['content']

      # Escribir la salida en el archivo de texto
      file.write(f"""

---

{image_url}

---

#### Post #{contador}

[{title}]({url})
by @{username}

---

""")

# Imprimir la salida en la consola
      
      print(f"""
#{contador}
Usuario: {username}
Título del Post: {title}
Url de la imagen: {image_url}
---
""")

    except Exception as e:
      # Manejar los errores y escribirlos en el archivo de texto
      file.write(f"Error procesando el enlace {url}: {e}\n")
      print(f"Error procesando el enlace {url}: {e}\n")

  print("La salida se ha generado exitosamente en el archivo 'salida.txt'") 

Salida de ejemplo:


Esto me automatiza la tarea diaria de crear los post de curación de @visualblock,. El siguiente paso será ejecutar este script a través de un bot de discord, leyendo los últimos post de un canal determinando y generar todo el texto del post de curación. Además de usar la API de Hive.

Espero que le sea de utilidad. Puede clonar el código fuente desde los repositorios de Github para su libre uso. Ver aquí. Allí obtendrá información adicional para instalación del entorno virtual e instalación de bibliotecas. Cualquier comentario o aporte para el código es bienvenido.


Las imágenes son mías o capturas de pantalla tomadas por mí, a menos que se indiquen fuentes externas.


Discord: alberto0607#6813 Twitter: Twitter

Comments (10)

oscarps's avatar @oscarps 4/10/2023

!ALIVE !VSC !PGM !LOLZ

visualbot's avatar @visualbot 4/10/2023

@oscarps has sent VSC to @alberto0607

This post was rewarded with 0.1 VSC to support your work. Join our photography communityVisual Shots Check here to view or trade VSC Tokens Be part of our Curation Trail


@oscarps ha enviado VSC a @alberto0607

Éste post fue recompensado con 0.1 VSC para apoyar tu trabajo. Únete a nuestra comunidad de fotografía Visual Shots Consulte aquí para ver o intercambiar VSC Tokens Se parte de nuestro Trail de Curación


Uses: 2/10
pgm-curator's avatar @pgm-curator 4/10/2023
Sent 0.1 PGM - 0.1 LVL- 1 STARBITS - 0.05 DEC - 1 SBT - 0.1 THG - 0.000001 SQM - 0.1 BUDS - 0.01 WOO tokens
remaining commands 2

BUY AND STAKE THE PGM TO SEND A LOT OF TOKENS!

The tokens that the command sends are: 0.1 PGM-0.1 LVL-0.1 THGAMING-0.05 DEC-15 SBT-1 STARBITS-[0.00000001 BTC (SWAP.BTC) only if you have 2500 PGM in stake or more ]

5000 PGM IN STAKE = 2x rewards!

image.png Discord image.png

Support the curation account @ pgm-curator with a delegation 10 HP - 50 HP - 100 HP - 500 HP - 1000 HP

Get potential votes from @ pgm-curator by paying in PGM, here is a guide

I'm a bot, if you want a hand ask @ zottone444


youarealive's avatar @youarealive 4/10/2023

@alberto0607! You Are Alive so I just staked 0.1 $ALIVE to your account on behalf of @oscarps. (2/10)

The tip has been paid for by the We Are Alive Tribe through the earnings on @alive.chat, feel free to swing by our daily chat any time you want.

jonsnow1983's avatar @jonsnow1983 4/10/2023

Excelente hermano. En programación estoy raspado pero toca estudiar. Gracias por este gran aporte para hacernos la vida más fácil a los que no sabemos. Seguimos.

alberto0607's avatar @alberto0607 4/10/2023

No creas, yo también estoy raspado. pero con algo de empeño se sacan cosas interesantes. La idea es compartirlo para quién le pueda ser útil. Gracias por comentar, saludos.

poshtoken's avatar @poshtoken 4/10/2023

https://twitter.com/750698046489583616/status/1645419485665296384 The rewards earned on this comment will go directly to the people( @alberto0607 ) sharing the post on Twitter as long as they are registered with @poshtoken. Sign up at https://hiveposh.com.

vikvitnik's avatar @vikvitnik 4/10/2023

Es realmente muy interesante. Las cosas que se pueden hacer programando son increíbles.

alberto0607's avatar @alberto0607 4/10/2023

La verdad que si, y se puede escalar mucho más. Ya esto algunos proyectos lo usan, pero no se si han liberado el código. Gracias por comentar!!!

ecency's avatar @ecency 4/10/2023

Yay! 🤗
Your content has been boosted with Ecency Points, by @alberto0607.
Use Ecency daily to boost your growth on platform!

Support Ecency
Vote for new Proposal
Delegate HP and earn more

dsc-r2cornell's avatar @dsc-r2cornell 4/10/2023

Congratulations, your post has been upvoted by @dsc-r2cornell, which is the curating account for @R2cornell's Discord Community.

Curated by Blessed-girl

![r2cornell_curation_banner.png](https://cdn.steemitimages.com/DQmTwPSK52pG2QZmyNE2XHeEtuHCNSpRwmTGY7wMaWbTp8A/r2cornell_curation_banner.png)
Enhorabuena, su "post" ha sido "up-voted" por @dsc-r2cornell, que es la "cuenta curating" de la Comunidad de la Discordia de @R2cornell.

Visit our Discord - Visita nuestro Discord

stemsocial's avatar @stemsocial 4/12/2023

Thanks for your contribution to the STEMsocial community. Feel free to join us on discord to get to know the rest of us!

Please consider delegating to the @stemsocial account (85% of the curation rewards are returned).

You may also include @stemsocial as a beneficiary of the rewards of this post to get a stronger support. 
 

chessbrotherspro's avatar @chessbrotherspro 4/12/2023

¡Enhorabuena!


Has recibido el voto de PROYECTO CHESS BROTHERS

✅ Has hecho un buen trabajo, por lo cual tu publicación ha sido valorada y ha recibido el apoyo de parte de CHESS BROTHERS ♔ 💪


♟ Te invitamos a usar nuestra etiqueta #chessbrothers y a que aprendas más sobre nosotros.

♟♟ También puedes contactarnos en nuestro servidor de Discord y promocionar allí tus publicaciones.

♟♟♟ Considera unirte a nuestro trail de curación para que trabajemos en equipo y recibas recompensas automáticamente.

♞♟ Echa un vistazo a nuestra cuenta @chessbrotherspro para que te informes sobre el proceso de curación llevado a diario por nuestro equipo.


🏅 Si quieres obtener ganancias con tu delegacion de HP y apoyar a nuestro proyecto, te invitamos a unirte al plan Master Investor. Aquí puedes aprender cómo hacerlo.


Cordialmente

El equipo de CHESS BROTHERS

hivebuzz's avatar @hivebuzz 4/14/2023

Congratulations @alberto0607! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s)

You distributed more than 12000 upvotes.
Your next target is to reach 13000 upvotes.

You can view your badges on your board and compare yourself to others in the Ranking If you no longer want to receive notifications, reply to this comment with the word STOP

Check out our last posts:

LEO Power Up Day - April 15, 2023
The Hive Gamification Proposal
Support the HiveBuzz project. Vote for our proposal!
lismarcarolina2's avatar @lismarcarolina2 6/22/2023

Que bien estuve estudiando python para usarlo en ciencia de datos. Pero poner en práctica los conocimientos de python aca en hive es una idea muy buena también🙂

alberto0607's avatar @alberto0607 6/22/2023

Claro que si, python puede estar presente en todos lados 🤣. Gracias por tu comentario. Te invito a apoyar a nuestro testigo

https://vote.hive.uno/@hispapro