Script en Python para obtener datos de un Post y generar Markdown con un clic
hive-154226·@alberto0607·
0.000 HBDScript en Python para obtener datos de un Post y generar Markdown con un clic
 --- 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](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)) 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í](https://github.com/alberto0607/PostCuracion). 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](https://twitter.com/alberto_0607)
👍 language-scanner, amazingdrinks, trouvaille, dlizara, hive-189869, elcomentador, frankches, sarix, daniel2001, magnacarta, yenmendt, sannae.art, xpax120, amjdancer, foxlatam, tuba777, garybilbao, carmary, josewilchez, steem-holder, sbi5, gsbilbao, hive-data, visualblock, visual.alive, abeba, franciscomarval, oscurity, laradio, mercmarg, cleydimar2000, alberto0607, aguamiel, ferbu, shakavon, susurrodmisterio, nahuelgameplays, avellana, radiosteemit, lagitana, lfu-radio, nanyuris, radiohive, kvfm, carmenm20, rafabvr, radiolovers, ciresophen, darlingomaet1, junydoble, victor816, bea23, edinson001, helencct, fabianar25, ronymaffi, pavelnunez, onlyhive, sagarkothari88, juanmanuellopez1, atma.love, ciudadcreativa, jesustiano, emperatriz1503, lmvc, lmvc-spaco, andresrk, kattelov, teungkulik, marijo-rm, oscarps, hope-on-fire, da-dawn, dylanhobalart, jonsnow1983, therealsnowjon, vikvitnik, joalheal, celf.magazine, juanmiguelsalas, dechastre, lunaticpandora, josemalavem, camiloferrua, arletv, dmercadoelis, rogmy, eleazarvo, votomasivo, vezo, fulani, yohanys, librepensadora, jessescenica, evagavilan2, jesuspsoto, yggdrasilwind, nafonticer, nabu.doconosor2, violetaperez, tomasjurado, crisch23, abejaobrera, juanpth, kilianmiguel, anrux, elsahilde, cryptosharon, cimillan, jandroh, misterlangdon, jesscbrl, lphnfotografia, edanya, gineska, perniachiquito, coolxxx, davidcurrele, juanbg, nazer, bilpcoin.pay, issymarie2, pepiflowers, victoria97, tottylive, carl3, magin.pintor, yacobh, mryoung1979, fidel-castro, adyorka, alejandrobons, petterjosph, santiagolaw, minuetoacademy, marygourmet, orlandogonzalez, holovision.stem, flaxz.ctp, flaxz, lismarcarolina2, ubaldonet, stem-shturm, escuadron201, shadowmyst, joeyarnoldvn, rickyuribe, paula1411, criptocuates, viper160891, palomap3, good-karma, esteemapp, esteem.app, ecency, ecency.stats, drwom, cherryng, princessbusayo, ryosai, cryoverall, mukadder, gogreenbuddy, pedrobrito2004, fairyberry, xecency, auleo, nooblogger, ketcom, thehivemobileapp, balvinder294, yggdrasil.laguna, stemgeeks, abh12345.stem, stemcuration, slider2990, dorkpower, brofund-stem, stemline, star.stem, saboin.stem, babytarazkp, scooter77.stem, dsc-r2cornell, photographercr, chessbrotherspro, vjap55, samostically, cyprianj, eniolw, larsito, eumorrell, iamchessguy, jrjaime, rosmarly, oabreuf24, nazom, raca75, jrevilla, adrianalara, lk666, difo92, chapmain, limka, moraviareosa, ydaiznfts, lemouth, steemstem-trig, steemstem, minnowbooster, howo, omstavan, aboutcoolscience, robotics101, dna-replication, stemsocial, roelandp, lamouthe, curie, techslut, edb, dhimmel, samminator, abigail-dantes, bhoa, sandracarrascal, sco, pab.ink, geopolis, melvin7, francostem, de-stem, nattybongo, pboulet, crowdwitness, zeruxanime, sam9999, plicc8, oluwatobiloba, mobbs, sustainablyyours, mahdiyari, alexander.alexis, postpromoter, kenadis, alexdory, charitybot, deholt, temitayo-pelumi, motherofalegend, gerdtrudroepke, stem.witness, pinkfloyd878, walterjay, valth, aidefr, enzor, intrepidphotos, fragmentarion, croctopus, qberry, greddyforce, gadrian, doctor-cog-diss, kggymlife, kaeves4711, noelyss, tsoldovieri, thelordsharvest, hijosdelhombre, charitymemes, bflanagin, cloh76, dandesign86, sorin.cristescu, studio666, steemcryptosicko, zacki11, metroair, jayna, utube, double-negative, aicu, justyy, bambinaacida, tfeldman, djlethalskillz, therealwolf, steemean, irgendwo, samsemilia7, pandasquad, smartsteem, musicvoter2, gifmaster, simonpeter35, tinyhousecryptos, migka, mugueto2022, robmolecule, meritocracy, reverio, nateaguila, sam99, fineartnow, therising, chipdip, baltai, holoferncro, the100, hiveonboard, mayorkeys, cnfund, sunsea, thelittlebank, oks2crypto, tanzil2024, dragibusss, federacion45, cryptofiloz, bellaian, deveney, traderhive, val.halla, kristall97, maxwellmarcusart, investingpennies, neneandy, raynen, sbtofficial, arunava, dcrops, cassioandro, gohive, communitybank, sportscontest, photohunt, diabonua, kylealex, steemstorage, curacer, drricksanchez, superlotto, modernzorker, neumannsalva, deriyon, iansart, brianoflondon, torz18, podping, gunthertopp, itharagaian, xerxes.alpha, sarashew, zyx066, lebastion, letenebreux, cercle, bastionpm, hive-143869, lithajacobs, entraide.rewards, cookaiss, high8125theta, yixn, arjes, independance, empath, braaiboy, techken, deadzy, elex17, albus.draco, imcore, l-singclear, buildahouse, emeraldtiger, minava.museum, lordnight72, quotidien, albator85, sapphireleopard, bitrocker2020, punchline, cheese4ead, armandosodano, steemwizards, aaronleang, bilpcoinbpc, the-burn, eliana-art, roamingsparrow, rt395, revo, cliffagreen, steveconnor, blockchainyouth, talentclub, aabcent, takowi, juancar347, trenz, oscarina, jacuzzi, dawnoner, qwerrie, bscrypto, barbz, aries90, the-grandmaster, detlev, meno, dynamicrypto, monica-ene, stayoutoftherz, goblinknackers, apendix1994, xeldal, rmach, mcsvi, meanbees, ibt-survival, adol, enki, forykw, sanderjansenart, comidinhas, primersion, mafufuma, hiddendragon, xxeldal, unicron, carilinger, yaluna, akeni, grapthar, atheistrepublic, portsundries, dondido, lightpaintershub, biglove, jerrybanfield, lordvader, duke77, bushradio, juecoree, stem-espanol, jga, ydavgonzalez, tomastonyperez, elvigia, josedelacruz, erickyoussif, andrick, acont, uche-nna, fran.frey, giulyfarci52, aqua.nano, lorenzor, analealsuarez, iamphysical, azulear, miguelangel2801, delpilar, reinaseq, wilmer14molina, usualsidekick, psicoluigi, concreteshallows, capp, mammasitta, sincensura, scruffy23, acousticguitar, sardrt, massivevibration, vaultec, eric-boucher, robertbira, eliaschess333, nicole-st, ajfernandez, flatman, lartist-zen, gifty-e, ennyta, endopediatria, stea90, krishu.stem, gwajnberg,