Cómo escrapear páginas web y publicar contenido en Twitter con Python

Introducción

Los bots o robots de Twitter son una forma poderosa de administrar tus redes sociales, así como también de extraer información de la red de microblogging. Al aprovechar las versátiles API’s de Twitter, un bot puede hacer muchas cosas: twittear, retuitear, “tweet favorito”, seguir a las personas con ciertos intereses, responder de forma automática, etc.

Aunque las personas pueden, y lo hacen, abusar del poder de un bot, lo que lleva a una experiencia negativa para otros usuarios, la investigación muestra que la gente ve a los bots de Twitter como una fuente de información confiable. Por ejemplo, un bot puede mantener a tus seguidores comprometidos con el contenido incluso cuando no estás en línea.

Algunos bots incluso proporcionan información crítica y útil, como @EarthquakesSF. Las aplicaciones para bots son ilimitadas. A partir de 2019, se estima que los bots representan aproximadamente el 24% de todos los tweets en Twitter.

En este tutorial, construirás un bot de Twitter usando esta biblioteca de API de Twitter para Python. Utilizarás las claves de API de tu cuenta de Twitter para autorizar tu bot y construirás un contenido capaz de extraer contenido de dos sitios web.

Además, programarás tu bot para twittear alternativamente el contenido de estos dos sitios web y en intervalos de tiempo establecidos. Ten en cuenta que usarás Python 3 en este tutorial.

Prerrequisitos

Necesitarás lo siguiente para completar este tutorial:

  • Configurar un entorno de programación local de Python 3.
  • Tener instalado un editor de texto de tu elección, como Visual Studio Code , Atom o Sublime Text .

Nota: Estarás configurando una cuenta de desarrollador con Twitter, que implica una revisión de la aplicación por parte de Twitter antes de que puedas acceder a las claves API’s que necesitas para este bot. El paso 1 recorre los detalles específicos para completar la solicitud.

Paso 1: configuración de tu cuenta de desarrollador y acceso a las claves de la API de Twitter

Antes de comenzar a programar tu bot, necesitarás las claves API para que Twitter reconozca las solicitudes de tu bot. En este paso, configurarás tu cuenta de desarrollador de Twitter y accederás a tus claves de API para tu bot de Twitter.

Para obtener tus claves de API, dirígete a developer.twitter.com y registra tu aplicación bot en Twitter haciendo clic en Aplicar en la sección superior derecha de la página.

Ahora has clic en Aplicar para una cuenta de desarrollador.

A continuación, has clic en Continuar para asociar tu nombre de usuario de Twitter con tu aplicación bot que construirás en este tutorial.

En la página siguiente, para los fines de este tutorial, elegirás la opción Solicito acceso para mi uso personal, ya que estarás creando un bot para tu uso educativo personal.

Después de elegir tu nombre de cuenta y país, pasa a la siguiente sección. ¿Para qué casos de uso te interesan?, selecciona las opciones Publicar Tweets y proyectos de estudiantes/Aprender a programar. Estas categorías son la mejor representación de por qué estás completando este tutorial.

Luego, proporciona una descripción del bot que estás intentando construir. Twitter requiere esto para protegerse contra el abuso de bots; en 2018 introdujeron esta característica. Para este tutorial, estarás scrapeando contenido enfocado en la tecnología desde The New Stack y The Coursera Blog .

Para decidir qué escribir en el cuadro de descripción, modela tu respuesta en las siguientes líneas para los fines de este tutorial:

Estoy siguiendo un tutorial para crear un bot de Twitter que escrapeará el contenido de sitios web como thenewstack.io (The New Stack) y blog.coursera.org (Blog de Coursera) y tuitearé citas de ellos. El contenido escrapeado se agregará y se twiteará de forma rotatoria a través de las funciones del generador Python.

Últimos pasos

Finalmente, elije no para la opción ¿Tu producto, servicio o análisis pondrá el contenido de Twitter o la información derivada a disposición de una entidad gubernamental?

A continuación, acepta los términos y condiciones de Twitter, has clic en Enviar solicitud y luego verifica tu dirección de correo electrónico. Twitter te enviará un correo electrónico de verificación después de enviar este formulario.

Una vez que verifiques tu correo electrónico, recibirás una Solicitud bajo revisión con un formulario de comentarios para el proceso de solicitud.

También recibirás otro correo electrónico de Twitter con respecto a la revisión:

La línea de tiempo para el proceso de revisión de la aplicación de Twitter puede variar significativamente, pero a menudo Twitter lo confirmará en unos pocos minutos. Sin embargo, si la revisión de tu solicitud lleva más tiempo, no es inusual, y debes recibirla dentro de uno o dos días.

Una vez que recibas la confirmación, Twitter te ha autorizado a generar tus claves. Puedes acceder a estos en la pestaña Claves y Tokens después de hacer clic en el botón de detalles de tu aplicación en developer.twitter.com/apps.

Finalmente, ve a la pestaña Permisos en la página de tu aplicación y configura la opción Permiso de acceso en Lectura y escritura, ya que también deseas escribir contenido de tweet.

Por lo general, usarías el modo de solo lectura para fines de investigación, como el análisis de tendencias, la extracción de datos, etc. La opción final permite a los usuarios integrar los chatbots en sus aplicaciones existentes, ya que los chatbots requieren acceso a mensajes directos.

Ahora tienes acceso a la poderosa API de Twitter, que será una parte crucial de tu aplicación de bot. Ahora configurarás tu entorno y comenzarás a construir tu bot.

Paso 2 – Construyendo lo esencial

En este paso, escribirás un código para autenticar tu bot con Twitter usando las claves de la API y harás el primer tweet programático a través de tu cuenta de Twitter. Esto servirá como un buen hito en tu camino hacia el objetivo de crear un bot de Twitter que scrapee el contenido de The New Stack y el Blog de Coursera y los twittee periódicamente.

Primero, configurarás una carpeta de proyecto y un entorno de programación específico para tu proyecto.

Crea tu carpeta de proyectos:

Muevete a tu carpeta de proyecto:

Luego crea un nuevo entorno virtual de Python para tu proyecto:

Luego activa tu entorno usando el siguiente comando:

Esto adjuntará un prefijo (bird-env) al aviso en la ventana de tu terminal.

Ahora desplázate a tu editor de texto y crea un archivo llamado credentials.py, que almacenará tus claves API de Twitter:

Agrega el siguiente contenido, reemplazando el código resaltado con tus claves de Twitter:

Ahora, instalarás la biblioteca principal de la API para enviar solicitudes a Twitter. Para este proyecto, te exigen las siguientes bibliotecas: nltk, requests, twitter, lxml, random, y timeRandom y time forman parte de la biblioteca estándar de Python, por lo que no es necesario instalar estas bibliotecas por separado. Para instalar las bibliotecas restantes, usarás pip, un administrador de paquetes para Python.

Abre tu terminal, asegúrate de que estás en la carpeta del proyecto y ejecuta el siguiente comando:

  • lxmlrequests: Los usarás para el scraping web.
  • twitter: Esta es la biblioteca para hacer llamadas de API a los servidores de Twitter.
  • nltk: (kit de herramientas de lenguaje natural) la usarás para dividir párrafos de blogs en oraciones.
  • random: Lo utilizarás para seleccionar al azar partes de una publicación de un blog completo.
  • time: Lo usarás para hacer que tu bot duerma descanse después de ciertas acciones.

Una vez que hayas instalado las bibliotecas, estarás listo para comenzar la programación. Ahora, importarás tus credenciales al script principal que ejecutará el bot. Además credentials.py, desde tu editor de texto crea un archivo en el directorio bird del proyecto y asígnale el nombre bot.py:

Funcionamiento

En la práctica, distribuirías la funcionalidad de tu bot a través de múltiples archivos a medida que crece y se vuelve más sofisticado. Sin embargo, en este tutorial, pondrás todo tu código en un solo script bot.py, para fines de demostración.

Primero, probarás tus claves API al autorizar tu bot. Comienza agregando el siguiente fragmento de código a bot.py:

Aquí, debes importar las bibliotecas requeridas; y en un par de casos importar las funciones necesarias de las bibliotecas. Utilizarás la función fromstring más adelante en el código para convertir la fuente de cadena de una página web scrapeada en una estructura de árbol que facilita la extracción de información relevante de la página.

OAuthlo ayudará a construir un objeto de autenticación a partir de tus claves y Twitter construirá el objeto principal de la API para todas las comunicaciones posteriores con los servidores de Twitter.

Ahora amplía bot.py con las siguientes líneas:

nltk.download(‘punkt’) descarga un conjunto de datos necesario para analizar los párrafos y para formar parte de ellos (dividirlos) en componentes más pequeños. Tokenizer es el objeto que utilizarás más adelante en el código para dividir párrafos escritos en inglés.

oauth es el objeto de autenticación construido y alimentando por la clase OAuth importada con tus claves API. Tu autenticas tu bot a través de la línea t = Twitter(auth=oauth). ACCESS_TOKEN y ACCESS_SECRET, esto ayuda en el reconocimiento de tu solicitud.

Finalmente, CONSUMER_KEYCONSUMER_SECRET ayudan a reconocer el identificador a través del cual la aplicación interactúa con Twitter. Utilizará el objeto t para comunicar tus solicitudes a Twitter.

Guardar el archivo

Ahora guarda este archivo y ejecútalo en tu terminal usando el siguiente comando:

Tu salida será similar a la siguiente, lo que significa que tu autorización fue exitosa:

Si recibes un error, verifica tus claves de API guardadas con las de tu cuenta de desarrollador de Twitter e intenta nuevamente. También asegúrate de que las bibliotecas requeridas están instaladas correctamente. Si no, usa de pip3 de nuevo para instalarlos.

Ahora puedes intentar twittear algo programáticamente. Escribe el mismo comando en el terminal con el indicador –i para abrir el intérprete de Python después de la ejecución de tu script:

A continuación, escribe lo siguiente para enviar un tweet a través de tu cuenta:

Ahora abre su línea de tiempo de Twitter en un navegador y verás un tweet en la parte superior de tu línea de tiempo que contiene el contenido que publicaste.

Cierra el intérprete escribiendo quit()CTRL + D.

Tu bot ahora tiene la capacidad fundamental de twittear. Para desarrollar tu bot para twittear contenido útil, incorporarás el scraping web en el siguiente paso.

Paso 3 – Scraping a sitios web para tu contenido de Twitter

Para introducir más contenido interesante en tu línea de tiempo, scrapearas el contenido de New Stack y Coursera Blog , y luego publicarás este contenido en Twitter en forma de tweets.

En general, para escrapear los datos apropiados de tus sitios web de destino, tienes que experimentar con su estructura HTML. Cada tweet proveniente del bot que construirás en este tutorial tendrá un enlace a una publicación del blog de los sitios web elegidos, junto con una cita aleatoria de ese blog.

Implementarás este procedimiento dentro de una función específica para escrapear el contenido de Coursera, por lo que le asignará un nombre scrape_coursera().

En primer lugar, abre bot.py:

Agrega la función scrape_coursera() al final de tu archivo:

Para escrapear la información del blog, primero deberás solicitar la página web relevante a los servidores de Coursera. Para eso utilizarás la función get() de la biblioteca requestsget() toma una URL y recupera la página web correspondiente.

Entonces, pasarás blog.coursera.org como argumento a get(). Pero también debes proporcionar un encabezado en tu solicitud GET, que garantizará que los servidores de Coursera lo reconozcan como un cliente genuino. Agrega las siguientes líneas resaltadas a tu función scrape_coursera() para proporcionar un encabezado:

Este encabezado contendrá información relativa a un navegador web definido que se ejecuta en un sistema operativo específico. Siempre que esta información (generalmente denominada User-Agent) se corresponda con navegadores web y sistemas operativos reales, no importa si la información del encabezado se alinea con el navegador web real y el sistema operativo de tu computadora.

Por lo tanto, este encabezado funcionará bien para todos los sistemas.

Solicitud

Una vez que hayas definido los encabezados, agrega las siguientes líneas resaltadas para realizar una solicitud GET a Coursera especificando la URL de la página web del blog:

Esto llevará la página web a tu máquina y guardará la información de toda la página web en la variable r. Puedes evaluar el código fuente HTML de la página web utilizando el atributo content de r.

Por lo tanto, el valor de r.content es el mismo que se ve cuando inspeccionas la página web en tu navegador haciendo clic derecho en la página y seleccionando la opción Inspeccionar elemento .

Aquí también has añadido la función fromstring. Puedes pasar el código fuente de la página web a la función fromstring importada de la biblioteca lxml para construir la estructura tree de la página web.

Esta estructura de árbol te permitirá acceder cómodamente a diferentes partes de la página web. El código fuente HTML tiene una estructura particular parecida a un árbol; cada elemento está encerrado en la etiqueta <html> y anidado posteriormente.

Ahora, abre https://blog.coursera.org en navegador e inspecciona su fuente HTML utilizando las herramientas de desarrollo del navegador. Has clic derecho en la página y elije la opción Inspeccionar elemento. Verás que aparece una ventana en la parte inferior del navegador, que muestra parte del código fuente HTML de la página.

Código HTML

A continuación, has clic con el botón derecho en la miniatura de cualquier post visible y luego inspecciónalo. La fuente HTML resaltará las líneas HTML relevantes donde se define la miniatura del blog. Notarás que todas las publicaciones del blog en esta página están definidas dentro de una etiqueta <div> con una clase de “recent”:

Por lo tanto, en tu código, utilizarás todos elementos los div de las publicaciones de este blog a través de su XPath, que es una forma conveniente de abordar los elementos de una página web.

Para hacerlo, extiende la función de bot.py de la manera siguiente:

Aquí, XPath (la cadena a la que se pasa tree.xpath()) comunica que desea elementos div de toda la fuente de la página web, de la clase “recent”// corresponde a buscar en toda la página web, div le dice a la función que extraiga solo los elementos div  [@class=”recent”] le pide que solo extraiga aquellos elementos div que tienen los valores de sus atributos class como “recent”.

Sin embargo, no necesitas estos elementos en sí mismos, solo necesitas los enlaces a los que apunta, de modo que puedas acceder a las publicaciones de blog individuales para escrapear su contenido.

Por lo tanto, extrae todos los enlaces utilizando los valores de las etiquetas href de anclaje que están dentro de las etiquetas div anteriores de las publicaciones del blog.

Para probar tu programa hasta el momento, llama a la función scrape_coursera() al final de bot.py.

Guardar y salir bot.py.

Probando

Ahora ejecuta bot.py con el siguiente comando:

Verás una lista de URL como la siguiente:

Después de verificar la salida, puedes eliminar las dos últimas líneas resaltadas del script bot.py:

Ahora extienda la función bot.py con la siguiente línea resaltada para extraer el contenido de una publicación del blog:

Recorrerá cada enlace, buscará la publicación del blog correspondiente, extraerá una oración aleatoria de la publicación y luego publicará esta oración como cita, junto con la URL correspondiente. Extraer una oración al azar involucra tres partes:

  1. Tomando todos los párrafos de la publicación del blog como una lista.
  2. Seleccionando un párrafo al azar de la lista de párrafos.
  3. Seleccionando una oración al azar de este párrafo.

Ejecutarás estos pasos para cada blog. Para obtener uno, realiza una solicitud GET para tu enlace.

Ahora que tienes acceso al contenido de un blog, introducirás el código que ejecuta estos tres pasos para extraer el contenido que deseas de él. Agrega la siguiente extensión a tu función de scraping que ejecuta los tres pasos:

Si inspeccionas el post blog abriendo el primer enlace, notarás que todos los párrafos pertenecen a la etiqueta div que tiene entry-content como clase. Por lo tanto, se extraen todos los párrafos como una lista con paras = blog_tree.xpath(‘//div[@class=”entry-content”]/p’).

Elementos

Los elementos de la lista no son párrafos literales; son objetos Element. Para extraer el texto de estos objetos, se utiliza el método text_content(). Esta línea sigue el patrón de diseño de comprensión de lista de Python, que define una colección utilizando un bucle que normalmente se escribe en una sola línea.

En bot.py, se extrae el texto para cada objeto de elemento de párrafo y se almacena en una lista si el texto no está vacío. Para elegir aleatoriamente un párrafo de esta lista de párrafos, incorporas el módulo random.

Finalmente, debes seleccionar una oración al azar de este párrafo, que se almacena en la variable para. Para esta tarea, primero debes dividir el párrafo en oraciones.

Un enfoque para lograr esto es usar el método split() de Python . Sin embargo, esto puede ser difícil ya que una oración se puede dividir en múltiples puntos de interrupción. Por lo tanto, para simplificar sus tareas de división, aprovecha el procesamiento del lenguaje natural a través de la biblioteca nltk.

El objeto tokenizer que definiste anteriormente en el tutorial será útil para este propósito.

Ahora que tienes una lista de oraciones, llama a random.choice() para extraer una oración al azar. Quieres que esta oración sea una cita para un tweet, por lo que no puede exceder los 280 caracteres. Sin embargo, por razones estéticas, seleccionarás una oración que no sea ni demasiado grande ni demasiado pequeña.

Debes designar que tu oración de tweet debe tener una longitud de entre 60 y 210 caracteres. La sentencia random.choice() selecciona oraciones que podrían no satisfacer este criterio. Para identificar la frase correcta, tu script hará diez intentos, verificando el criterio cada vez. Una vez que la oración elegida al azar satisface tu criterio, puede salir del bucle.

Criterio

Aunque la probabilidad es bastante baja, es posible que ninguna de las oraciones cumpla con esta condición de tamaño en diez intentos. En este caso, ignorará la publicación del blog correspondiente y pasará a la siguiente.

Ahora que tienes una frase para citar, puedes twittearla con el enlace correspondiente. Puedes hacerlo generando una cadena que contenga la oración elegida al azar, así como el enlace del blog correspondiente.

El código que llama a esta la función scrape_coursera() publicará la cadena cedida a Twitter a través de la API de Twitter.

Amplía su función de la siguiente manera:

El script solo ejecuta la sentencia else cuando el bucle for anterior no se rompe. Por lo tanto, solo sucede cuando el bucle no puede encontrar una oración que se ajuste a su condición de tamaño.

En ese caso, simplemente cede para None que el código que llama a esta función sea capaz de determinar que no hay nada que twittear. Luego pasará a llamar a la función nuevamente y obtendrá el contenido para el siguiente enlace del blog. Pero si el bucle se rompe, significa que la función ha encontrado una oración apropiada; el script no ejecutará la declaración else, y la función producirá una cadena compuesta por la oración y el enlace del blog, separados por un solo espacio en blanco.

La implementación de la función scrape_coursera() está casi completa. Si deseas realizar una función similar para escrapear otro sitio web, tendrás que repetir parte del código que has escrito para escrapear Coursera.

DRY

Para evitar volver a escribir y duplicar partes del código y asegurar que la secuencia de comandos de tu bot sigue el principio DRY (No se repita), identificarás y abstendrás partes del código que usarás una y otra vez para cualquier función de scraping escrita luego.

Independientemente del sitio web, la función está escrapeando, tendrá que seleccionar un párrafo al azar y luego elegir una oración aleatoria de este párrafo elegido.

Puedes extraer estas funcionalidades en funciones separadas. Luego, puedes simplemente llamar a estas funciones desde sus funciones de scraping y lograr el resultado deseado.

También puede definir HEADERS fuera de la función scrape_coursera() para que todas las funciones del escrapeador puedan usarla. Por lo tanto, en el código que sigue, la definición HEADERS debe preceder a la de la función de escrapeador, para que finalmente puedas usarla para otros escrapeadores:

Ahora puedes definir la función extract_paratext() para extraer un párrafo aleatorio de una lista de objetos de párrafo. El párrafo aleatorio pasará a la función como un argumento paras y devolverá la forma tokenizada del párrafo elegido que usará más adelante para la extracción de la oración:

Definiendo las funciones

A continuación, definirá una función que extraerá una oración aleatoria de longitud adecuada (entre 60 y 210 caracteres) del párrafo tokenizado que recibe como un argumento, que puede nombrar como para.

Si tal oración no se descubre después de diez intentos, la función regresa en su lugar None. Agrega el siguiente código resaltado para definir la función extract_text():

Una vez que hayas definido estas nuevas funciones de ayuda, puedes redefinir la función scrape_coursera() para que tenga el siguiente aspecto:

Debes guardar y salir de bot.py.

Parámetros

Aquí estás utilizando en yield lugar de return porque, para iterar sobre los enlaces, la función de scraping te dará las cadenas de tweet una por una de forma secuencial. Esto significa que cuando realice una primera llamada al escrapeador sc definido como sc = scrape_coursera(), obtendrás la cadena de tweet correspondiente al primer enlace entre la lista de enlaces que calculó dentro de la función de escrapeador.

Si ejecutas el siguiente código en el intérprete, obtendrá string_1 y string_2 como se muestra a continuación, si la variable links dentro scrape_coursera() contiene una lista que parece [“https://thenewstack.io/cloud-native-live-twistlocks-virtual-conference/”, “https://blog.coursera.org/unlock-the-power-of-data-with-python-university-of-michigan-offers-new-programming-specializations-on-coursera/”, …].

Crea una instancia del escrapeador y llámalo sc:

Ahora es un generador; genera o escrapea contenido relevante de Coursera, uno a la vez. Se puede acceder al contenido extraído de una en una llamando next() sobre sc secuencialmente:

Ahora puedes imprimir las cadenas que has definido para mostrar el contenido escrapeado:

Si utilizas return en su lugar, no podrás obtener las cadenas una por una y en una secuencia. Si simplemente reemplazas yield con return en scrape_coursera(), siempre obtendrás la cadena correspondiente a la primera entrada del blog, en vez de conseguir el primero en la primera llamada, segunda en la segunda llamada, y así sucesivamente.

Modificar función

Puede modificar la función para simplemente devolver una lista de todas las cadenas correspondientes a todos los enlaces, pero eso requiere más memoria.

Además, este tipo de programa podría realizar muchas solicitudes a los servidores de Coursera en un lapso corto de tiempo si desea obtener la lista completa rápidamente.

Esto podría hacer que tu bot sea prohibido temporalmente para acceder a un sitio web. Por lo tanto, yield es la mejor opción para una amplia variedad de trabajos de scraping, en los que solo necesitas información de uno en uno.

Paso 4 – Escrapear contenido adicional

En este paso, construirás un escrapeador para thenewstack.io. El proceso es similar a lo que has completado en el paso anterior, por lo que este será un resumen.

Abre el sitio web en tu navegador e inspecciona la fuente de la página. Encontrarás aquí que todas las secciones del blog son elementos div de clase normalstory-box.

Ahora crearás una nueva función de escrapeador con el nombre scrape_thenewstack() y harás una solicitud GET para thenewstack.io desde dentro. A continuación, extrae los enlaces a los blogs de estos elementos y luego repite en cada enlace. Agrega el siguiente código para esto:

Utiliza el indicador verify=False porque los sitios web a veces pueden tener certificados de seguridad caducados y está bien acceder a ellos si no se trata de datos confidenciales, como es el caso aquí.

El indicador verify=False le dice al método requests.get que no verifique los certificados y continúe obteniendo los datos como de costumbre. De lo contrario, el método arroja un error sobre los certificados de seguridad caducados.

Ahora puedes extraer los párrafos del blog que corresponden a cada enlace y usar la función extract_paratext() que creaste en el paso anterior para extraer un párrafo aleatorio de la lista de párrafos disponibles.

Finalmente, extrae una oración aleatoria de este párrafo usando la función extract_text() y luego yield con el enlace del blog correspondiente. Agrega el siguiente código a tu archivo:

Proceso de scraping

Ahora tienes una idea de lo que generalmente abarca un proceso de scraping. Ya puedes crear tus propios escrapeadores personalizados que pueden, por ejemplo, escrapear las imágenes en pots de blog en lugar de citas aleatorias.

Para eso, puedes buscar las etiquetas <img> relevantes. Una vez que tengas la ruta correcta para las etiquetas, que sirven como tus identificadores, puedes acceder a la información dentro de las etiquetas usando los nombres de los atributos correspondientes. Por ejemplo, en el caso de escrapear imágenes, puedes acceder a los enlaces de imágenes usando sus atributos src.

En este punto, has creado dos funciones de scraping para escrapear el contenido de dos sitios web diferentes, y también has construido dos funciones de ayuda para reutilizar las funciones que son comunes en los dos escrapeadores.

Ahora que tu bot sabe cómo twittear y qué twittear, escribirás el código para twittear el contenido escrapeado.

Paso 5 – Tweeteando el contenido escrapeado

En este paso, ampliarás el bot para escrapear el contenido de los dos sitios web y enviarlo a través de tu cuenta de Twitter. Más precisamente, deseas que twittee el contenido de los dos sitios web alternativamente, y en intervalos regulares de diez minutos, por un período de tiempo indefinido.

Por lo tanto, utilizarás un bucle while infinito para implementar la funcionalidad deseada. main() Hará esto como parte de una función, que implementará el proceso central de alto nivel que querrás que siga tu bot:

Primero crea una lista de los nombres de las funciones de escraping que definiste anteriormente y la llamas como news_funcs. A continuación, crea una lista vacía que contendrá las funciones reales del escrapeador y le asignas el nombre a esa lista como news_iterators.

Luego, la rellenas con cada nombre en la lista news_funcs y agregando el iterador correspondiente en la lista news_iterators. Estás usando la función incorporada de Python globals(). Esto devuelve un diccionario que asigna nombres de variables a variables reales dentro de tu script.

Un iterador es lo que obtienes cuando llamas a una función de scraping: por ejemplo, si escribes coursera_iterator = scrape_coursera()coursera_iterator será un iterador en el que puedes invocar llamadas next().

Next()

Cada llamada next() devolverá una cadena que contiene una cita y su enlace correspondiente, exactamente como se define en la función scrape_coursera() y la declaración yield.

Cada llamada next() pasa por una iteración del bucle for en la función scrape_coursera(). Por lo tanto, solo puedes hacer tantas llamadas next() como enlaces de blog en la función scrape_coursera(). Una vez que ese número se supere, StopIteration iniciará una excepción.

Una vez que ambos iteradores news_iterators completan la lista, se inicia el while del bucle principal. Dentro de él, tienes un bucle for que recorre cada iterador e intenta obtener el contenido que se va a twittear.

Después de obtener el contenido, tu bot lo twitea y luego descansa durante diez minutos. Si el iterador no tiene más contenido para ofrecer, se genera una excepción StopIteration, a partir de la cual tu actualizas ese iterador volviéndolo a crear instancias, para verificar la disponibilidad de contenido más reciente en el sitio web de origen.

Luego pasas al siguiente iterador, si está disponible. De lo contrario, si la ejecución llega al final de la lista de iteradores, reinicia desde el principio y tuitea el siguiente contenido disponible. Esto hace que tu bot twittee el contenido alternativamente de los dos escrapeadores durante el tiempo que desees.

Todo lo que queda ahora es hacer una llamada a la función main(). Esto se hace cuando el script es llamado directamente por el intérprete de Python:

Script completo

La siguiente es una versión completa del script bot.py.

Debes guardar y salir de bot.py.

Ejecutando el script

Lo siguiente es una ejecución de muestra de bot.py:

Recibirás una salida que muestra el contenido que tu bot ha escrapeado, en un formato similar al siguiente:

Después de una ejecución de muestra de tu bot, verás una línea de tiempo completa de tweets programáticos publicados por tu bot en tu página de Twitter. Se verá algo como lo siguiente:

Como puede ver, el bot está twitteando los enlaces de blog escrapeados con citas aleatorias de cada blog como puntos destacados. Este feed es ahora un feed de información con tweets que alternan entre las citas de blog de Coursera y thenewstack.io.

Has creado un bot que agrega contenido de la web y lo publica en Twitter. Ahora puede ampliar el alcance de este bot según tu deseo agregando más escrapeadores para diferentes sitios web, y el bot tuiteará el contenido proveniente de todos los escrapeadores de forma rotatoria y en los intervalos de tiempo que desees.

Conclusión

En este tutorial, construiste un bot básico de Twitter con Python y escrapeaste parte del contenido de la web para que tu bot lo pusiera en Twitter. Hay muchas ideas bot para probar; También puedes implementar tus propias ideas para la utilidad de un bot.

Puedes combinar las funcionalidades versátiles que ofrece la API de Twitter y crear algo más complejo. Para obtener una versión de un bot de Twitter más sofisticado, echa un vistazo a  chirps , un framework de bot de Twitter que utiliza algunos conceptos avanzados como multihilo para hacer que el bot haga varias cosas simultáneamente.

También hay algunos bots de ideas divertidas, como misheardly. No hay límites en la creatividad que uno puede usar al crear bots de Twitter. Es esencial encontrar los puntos finales API adecuados para la implementación de tu bot.

Por último, es importante tener en cuenta la etiqueta del bot o (“botiquette “) cuando construyas tu próximo bot. Por ejemplo, si tu bot incorpora un retweet, hags que el texto de todos los tweets pase a través de un filtro para detectar un lenguaje abusivo antes de reenviarlos.

Puedes implementar dichas funciones utilizando expresiones regulares y procesamiento de lenguaje natural. Además, mientras buscas fuentes para escrapear, sigue tu criterio y evita las que difunden información errónea.