Scraping Redes Sociales
Scraping Redes Sociales
Scraping Redes Sociales
2022-10
https://hdl.handle.net/11673/54962
Downloaded de Peumo Repositorio Digital USM, UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA
DEPARTAMENTO DE INFORMÁTICA
VALPARAÍSO - CHILE
MATÍAS FAJARDO
Octubre - 2022
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
DEDICATORIA
Para mi amada familia, amados amigos y todos que fueron parte de este proceso y camino. Nada
de esto sería posible sin el apoyo incondicional de ustedes. Gracias totales <3.
Página 2 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
AGRADECIMIENTOS
En primer lugar quiero dedicar este proyecto a mis padres Cecilia e Iván por el apoyo
incondicional durante todo este tiempo que estuve en la universidad a mis hermanos
Sebastián y Jacqueline también por sus consejos, mención especial a mi madrina Yeny que
me apoya constantemente y como siempre digo, es mi segunda mamá y yo me siento como
un hijo más.
Por otro lado, dedicar esto también a los “Malayas” que ya no son sólo compañeros de
universidad, sino más bien amigos para toda la vida, Diego, Cristóbal (Teté), Jorge, Álvaro
(Rusio), Roberto (Payo), Chris, Nico, Joan, Mauri y Bryan, fueron parte más que esencial en
este proceso formamos una familia durante estos casi 6 años hubieron buenos y malos
momentos y siempre supimos apoyarnos entre todos, independiente si a día de hoy siguen
en la universidad. Agradecer también a los chicos que conocí en este camino que también
considero amigos con los cuales seguimos compartiendo diversas actividades y momentos,
Guille, Raúl, Bernal, Gianni, entre otras increíbles personas que conocí.
Imposible no dar mención honrosa a Diego y Teté que prácticamente estuvimos durante
todos los ramos, proyectos y actividades juntos, nos apoyamos como hermanos, sólo
nosotros sabemos lo que costó, imposible no acordarse de la “remontada épica” de la feria
de software, desde ese momento supimos que nada nos detenía.
En fin, dar las gracias a todas las personas que influyeron de alguna manera en este largo
proceso, a los profesores también por la calidad de enseñanza entregada.
Página 3 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
RESUMEN
Resumen— La Policía de investigaciones constantemente se enfrenta a investigaciones
relacionadas a las redes sociales, ya que estas, son muy utilizadas por todo tipo de
personas, el problema es que a día de hoy esto se realiza de manera manual evidentemente
esto implica un consumo de tiempo muy grande, ya que implica la obtención y manipulación
de información, para esto se desarrolló una aplicación basada en la técnica scraping que
automatiza este proceso significando una disminución notable en cuanto al proceso de
extracción de información, con ello apoyar en las labores investigativas y éstas sólo sean
enfocadas al análisis de la data obtenida.
ABSTRACT
Abstract— PDI constantly confronts investigations related to social media, because, they
are widely used por every people, the problem today is the investigations is done manually
evidently this implies a lot of resources and time, because implies the obtention and
manipulation of information, this is why we made an application base on scraping technique
that automate this process, this made a disminution of time extracting of information, and
with that support the investigative work, and this resources just focus in the analysis of the
obtained data.
Página 4 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
GLOSARIO
API: Application Programming Interface, es una vía de comunicación entre dos aplicaciones.
Url: Uniform Resource Locator, mecanismo usado por los navegadores para obtener
cualquier recurso publicadon en la web
Página 5 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
ÍNDICE DE CONTENIDOS
AGRADECIMIENTOS 3
RESUMEN 4
ABSTRACT 4
GLOSARIO 5
CAPÍTULO 1: DEFINICIÓN DEL PROBLEMA 10
1.1 Objetivo General: 12
1.2 Objetivos Específicos: 12
CAPÍTULO 2: MARCO CONCEPTUAL 13
2.1. OSINT 13
2.1.1. Fases de la metodología OSINT 14
2.1.2 Problemas de la metodología OSINT 15
2.1.3 Herramientas 15
2.2 Técnica Scraping 17
2.2.1 Scraping automático utilizando python 17
2.2.2 Legalidad del Scraping 20
2.3 Redes sociales 20
Facebook 20
Twitter 21
2.3.1 Realidad nacional respecto a redes sociales 21
CAPÍTULO 3: PROPUESTA DE SOLUCIÓN 25
3.1 Antecedentes 25
3.1.1 Facebook 28
3.1.2 Twitter 28
3.2 Precedentes 29
CAPÍTULO 4: VALIDACIÓN DE LA SOLUCIÓN 37
4.1 Flujo de la solución 30
4.2 Interfaz Gráfica 31
4.2.1 Flujo de la aplicación para Facebook 33
4.2.2 Flujo para Twitter 34
Página 6 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
4.3 Limitaciones 34
4.4 Resultados preliminares 35
4.5 Tiempos de extracción 38
4.6 Dashboard 41
4.6.1 Facebook 41
4.6.1.1 Information 41
4.6.1.2 People 42
4.6.1.3 Posts 42
4.6.1.4 Profile 44
4.6.1.5 Images 44
4.6.2 Twitter 45
4.6.2.1 Information 45
4.6.2.2 Profile 45
4.6.2.3 Tweets 46
4.6.2.4 Images 46
CAPÍTULO 5: CONCLUSIONES 46
5.1 Conclusiones generales 46
5.2 Cumplimiento de objetivos 47
5.3 Futuras mejoras 48
5.3.1 Bloqueos temporales 48
5.3.2 Interfaz web 48
ANEXOS 51
ÍNDICE DE FIGURAS
Figura 1: Proceso Osint. Fuente: Elaboración Propia. ...................................................................................... 14
Figura 2: Proceso de la aplicación. Fuente: Elaboración propia ....................................................................... 18
Figura 3: Prueba de concepto. Fuente: Elaboración propia ............................................................................. 19
Figura 4: El uso de las redes sociales. Fuente: (Kemp,2021) ............................................................................ 22
Figura 5: Cantidad de personas que utiliza Facebook. Fuente: (Kemp,2021) .................................................. 23
Figura 6: El uso de Twitter. Fuente: (Kemp,2021) ............................................................................................ 23
Figura 7: Divulgación de pornografía infantil. Fuente: Twitter ........................................................................ 24
Figura 8: robots.txt Facebook. Fuente: Facebook ............................................................................................ 28
Figura 9: Robots.txt Twitter. Fuente: Twitter ................................................................................................... 29
Página 7 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Figura 10: Estructura de la aplicación. Fuente: Elaboración propia ................................................................. 31
Figura 11: Selección de modo. Fuente: Elaboración propia ............................................................................. 32
Figura 12: Flujo de facebook. Fuente: Elaboración propia ............................................................................... 33
Figura 13: Flujo de Twitter. Fuente: Elaboración Propia. ................................................................................. 34
Figura 14: Estructura prototipo. Fuente: Elaboración propia .......................................................................... 37
Figura 15: Data_extracted.txt. Fuente: Elaboración propia ............................................................................. 42
Figura 16: Interacción de las personas. Fuente: Elaboración propia ................................................................ 42
Figura 17: Ejemplo de post. Fuente: Elaboración propia ................................................................................. 43
Figura 18: Interfaz profile. Fuente: Elaboración propia.................................................................................... 44
Figura 19: Seguidos y seguidores. Fuente: Elaboración propia ........................................................................ 45
Página 8 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
ÍNDICE DE TABLAS
Tabla 1: Información extraída de Facebook, Fuente: Elaboración Propia ........................................................ 26
Tabla 2: Información del perfil de Facebook, Fuente: Elaboración propia ....................................................... 27
Tabla 3: Información extraída del perfil de Twitter. Fuente: Elaboración Propia ............................................ 27
Tabla 4: Información obtenida de Twitter. Fuente Elaboración Propia ........................................................... 28
Tabla 5: Resultados preliminares. Fuente: Elaboración Propia. ....................................................................... 39
Tabla 6: Resultados preliminares Twitter. Fuente: Elaboración Propia. .......................................................... 40
INTRODUCCIÓN
Durante el último tiempo las redes sociales se han transformado en un aspecto
fundamental de nuestras vidas, formando parte tanto en la cotidianidad como en el trabajo
para algunas personas . Ahora bien, es sabido que también existen personas que utilizan las
redes sociales para ámbitos negativos, ya sea para cometer delitos (Bigas & Jiménez, 2020)
o para jactarse de estos (Canal 13, 2018). Es por ello, que estas se han transformado en un
Página 9 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
punto de investigación bastante relevante hoy en día , pudiendo utilizarse como prueba
irrefutable en contra de una persona (Kelly, 2012).
Junto con estos antecedentes cabe destacar que, en la actualidad, tanto Facebook como
Twitter se han mantenido como las principales redes sociales que utilizan no sólo los
chilenos, si no que, el resto del mundo (Fernández, 2022).
De esta forma, podemos observar a las redes sociales como un punto fuerte en las
investigaciones realizadas por la policía de investigaciones de Chile (Kelly, 2012) , ahora
bien, estas investigaciones son realizadas de manera manual perdiendo por consiguiente
mucho tiempo y recursos tal como mencionan en la sección 3.1 de este documento, para
solventar esto es que se busca con este proyecto automatizar y optimizar el proceso de la
búsqueda de información, con el fin de agilizar los procesos investigativos y que se espera
que la policía de investigaciones lo utilice para evitar el trabajo manual que a día de hoy se
realiza.
Para llevar a cabo este proyecto, luego de una serie de reuniones con la PDI, se lograron
recabar los suficientes antecedentes y requerimientos que necesitaban para lograr una
aplicación que les sea realmente útil. Con todos los antecedentes a disposición se procede
a llevar a cabo este proyecto con la finalidad de brindar apoyo a las labores investigativas.
Finalmente, se pudo contrastar y probar que la solución aportaría no sólo en tiempo, sino
que además apoyaría en términos de métricas y de otra serie de informaciones que a día
de hoy era muy difícil o costaba mucho tiempo obtener.
Esta memoria urge realizarla, ya que, como se ha expuesto en el punto anterior, la forma
que hoy en día se realiza la extracción, podría ser comprendida como poco óptima, poco
eficiente, entre otros. Lo que podría provocar que la recabación de evidencia sobre algún
delito o sospechoso quede en libertad por falta de pruebas, algo que hoy en día, es muy
común y ocurre precisamente por falta de herramientas (Venturini & Díaz, 2014). Es por
esto, que el principal interés de hacer esta memoria yace precisamente para crear
herramientas útiles para el desarrollo del país y ser un aporte en el área de la ciberseguridad
y el análisis de datos.
Sin embargo, este proyecto no es el primero que utiliza la tecnología OSINT1, ya que existen
otras herramientas tales como, Maltego (Maltego for Professional Investigators and Small
Teams, 2022), Foca (Alonso, 2017), web preverser (Pagefreezer, 2022), entre otras, que
precisamente utilizan esta metodología en sus labores principales, en donde mediante una
interfaz bastante intuitiva y sencilla, se pueden realizar labores investigativas, que van,
desde una investigación forense, es decir, IP’S, DNS2, análisis de enlaces, entre otras, hasta
investigaciones en redes sociales, las cuales dejan en evidencia conexiones que tienen las
personas. Es decir, con estas conexiones podríamos recolectar información con respecto a
la vida social del sujeto, como por ejemplo, familia, ciudad en la que vive, su trabajo, entre
otras. De forma que finalmente se pueda conocer la reputación online de una persona física
o jurídica (Fernandéz, 2021).
Por otra parte, Foca es una herramienta complementaria a Maltego utilizada en el análisis
de metadatos en Microsoft Office, Open Office o PDF. Con esta herramienta se podrán
1 OSINT (Open Source Intelligence), traducido como Inteligencia de Fuentes Abiertas, hace referencia al
conjunto de técnicas y herramientas para recopilar información pública, analizar los datos y correlacionarlos
convirtiéndolos en conocimiento útil.
2 DNS : Sistema de nombres de dominio.
Página 11 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
analizar hasta el lugar más recóndito de la ofimática3.
Por otro lado, web preserver (WebPreserver, 2022), se utiliza en complemento con el
navegador Chrome, y es utilizada para recabar información en tiempo real sobre algún perfil
de Facebook, sin embargo, para realizar esto también se necesita del pago del servicio para
poder utilizar todas las funcionalidades que esta provee, a su vez es importante destacar
que para utilizar esta herramienta se debe ingresar de forma manual al perfil para ir
rescatando la información. Lo que no es tan óptimo el uso de esta herramienta para labores
investigativas, es por esta razón que la herramienta desarrollada surge como solución a la
problemática encontrada.
2.1. OSINT
Traducido al español Inteligencia de Fuentes Abiertas, esta metodología hace referencia a
un conjunto de técnicas y herramientas para recopilar información pública, analizar los
datos correlacionarlos convirtiéndolos en conocimiento útil, en nuestro caso, en
conocimiento para una investigación futura o en curso.
Página 13 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
archivos de configuración, contraseñas, etc…
● Se utiliza para ingeniería social7, como por ejemplo, buscar toda la información
sobre un usuario( en redes sociales, documentos, etc.) buscando ser consciente de
los datos disponibles para evitar ataques phishing.
● Prevención de ciberataques, obtener información acerca de la organización de
forma de estar alerta y/o prevenir cualquier potencial ataque de filtración de
datos, etc.
● Cualquier tipo de investigación que se pueda resolver utilizando las herramientas
disponibles y metodologías.
Requisitos:
en esta fase se establecen los requerimientos que se deben cumplir, es decir, aquellas
7 La ingeniería social se refiere a la manipulación psicológica de las personas para realizar acciones que
impliquen la divulgación de contenido confidencial
Página 14 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
condiciones que de alguna u otra manera deben satisfacerse para cumplir el objetivo.
2.1.3 Herramientas
En esta sección dividiremos las herramientas utilizadas por esta metodología en Buscadores
habituales y especializados.
Buscadores habituales
Google Dork
Mediante estos parámetros se pueden conocer entre otras cosas, información sensible,
páginas de registro, localización de servicios, etc.
Buscadores Especializados
Tineye: es un servicio que, partiendo de una imagen, indica en qué sitios web aparece. Es
similar a la búsqueda por imagen que incorpora Google Imágenes. -
Existen muchísimas otras herramientas para realizar esta metodología. En este proyecto,
sin embargo, nos enfocamos en las redes sociales por lo que estas herramientas podrían
ser un complemento al software que se busca desarrollar.
Página 16 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Durante el proceso del web scraping, se extrae información de páginas web para
analizarlas o utilizar sus datos en otra parte, para realizar este proceso se simula una
navegación a un sitio web y de esa forma acceder a distintos recursos de la propia web. En
nuestro caso, y para el propósito de este proyecto se utilizarán las redes sociales como
fuente de información pública, es decir, perfiles públicos, en los cuales se puedan extraer
información para realizar investigaciones que necesite realizar la policía de investigaciones
de Chile.
Hoy en día la policía, utiliza esta técnica de forma manual según las reuniones previas con
la gente de la PDI, es decir, se utiliza demasiado tiempo y recursos en buscar la
información, es por esta razón que nace el objetivo de esta memoria, que es utilizar
herramientas automatizadas para rescatar la mayor cantidad de información útil en un
corto lapso de tiempo, priorizando así el tiempo y los recursos limitados que posee la
policía de investigaciones.
Python es un lenguaje que posee una gran cantidad de bibliotecas para realizar scraping
en las redes sociales más importantes para obtener información OSINT (edureka, 2022).
Página 17 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Por último mencionar las ventajas de realizar este tipo de técnica por sobre las manuales,
es importante destacar que cuando una persona realiza este tipo de investigación sobre
algún perfil de Facebook, Twitter, etc. Puede perder de vista cierta información que podría
ser relevante, sin embargo, los scraper automáticos extraen toda la información que el
usuario exige sin excepción, es por esto que claramente, el scraping es una técnica
muchísimo más valiosa que una técnica manual. Pero no sólo eso, las personas que están
detrás de este proyecto miembros de la brigada de cibercrimen comentaban que
“usualmente las personas eliminan publicaciones con el fin de no ser investigadas”, es por
Página 18 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
ello que un scraper que en poco tiempo es capaz de obtener esta información de forma
silenciosa toma aún más valor puesto que permitiría obtener y almacenar esta
información de forma de poder comparar en algún tiempo posterior si efectivamente
hubieron publicaciones eliminadas, lo que abre muchas puertas y opciones que se podrían
realizar con este sistema, como por ejemplo, mediante tareas cron realizar el
procedimiento cada cierto tiempo de forma de ir almacenando cambios que tuvo esta
persona en cuanto a sus publicaciones y/o imágenes en el último tiempo.
A día de hoy se han realizado pruebas de concepto con respecto a Facebook, de forma
poder demostrar el uso y el avance de este sistema, obteniendo la siguiente información:
Estos datos fueron obtenidos de un pequeño script realizado en Python el cual realiza un
scraping hacía un perfil de Facebook, en este caso, se utilizó el propio.
Página 19 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Hoy en día las redes sociales son una herramienta utilizada por la mayoría de las personas
en todas partes del mundo (Martín & Fernández, 2020), existen diversas redes sociales
que son utilizadas para distintos fines, es por ello que en este subcapítulo se buscará
mencionar las más importantes y que serán relevantes para nuestra investigación.
Facebook
Esta red social es por lejos la más conocida y la más utilizada durante mucho tiempo
(Fernández, 2022), llegó como una red social que permitía vincularse con otras personas
del mundo, formar eventos, grupos, etc. Hoy en día, Facebook ha diversificado sus usos
permitiendo hasta incluso vender productos o encontrar pareja.
Provocó que en poco tiempo, la mayoría de acciones cotidianas que hacíamos en nuestro
Página 20 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
día a día, ahora se convertían a Facebook, tales como, publicar lo que hiciste en el día,
publicar con quien estabas, etc. Todos estos cambios que se produjeron en tan poco
tiempo, llevaron al ser humano a una era digital, “sin darse cuenta”.
Facebook es uno de los principales eslabones de este proyecto, ya que, es una de las
fuentes de información que más se sigue utilizando para cometer delito o jactarse de
alguno, no es de sorprenderse que a día de hoy, se siga atrapando a delincuentes que
deciden jactarse de alguna fechoría en esta red social (Canal 13, 2018), sin embargo, hay
ciberdelincuentes que han ido más lejos utilizando palabras en clave para comunicarse
dificultando así la extracción de información o que sean atrapados (Bigas & Jiménez,
2020). Sin embargo, la policía está al tanto de ello, es por esto, que la información pública
que nos permita la privacidad del usuario extraer podrá ser filtrada y analizada por las
personas de la brigada de cibercrimen de la policía de investigaciones de Chile.
Twitter
Esta red social, si bien, no es tan universalmente utilizada como Facebook, sigue siendo
una de las más utilizadas a nivel mundial (BOUISSIERE, 2021), a diferencia de Facebook,
Twitter permite solo publicaciones de no más de 280 carácteres.
A día de hoy, Twitter permite reflejar lo que se está hablando o lo más popular en Chile
mediante las tendencias populares, en las cuales se puede observar que es lo que más se
está twitteando a día de hoy, esto provoca que en cuanto a carácter investigativo sea
interesante realizar análisis de sentimientos cuando ocurren sucesos importantes en el
país como por ejemplo, las elecciones.
Chile no se queda lejos de este fenómeno, incrementando según un estudio hecho por
Data Reportal (Kemp, 2021), en el cual plasma la realidad nacional y cuantifica el número
de personas que a día de hoy utilizan las redes sociales. De acuerdo al estudio la cantidad
de personas que utiliza redes sociales creció en un 6,71% respecto al año pasado (2020),
eso significa alrededor de un millón de personas, también se indica que el 98,8% de esas
personas las utiliza mediante algún dispositivo móvil.
Página 21 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Según el estudio entre tantas posibilidades de redes sociales que existen, Facebook es quien
lidera las preferencias con una audiencia cerca del 81,1% como se indica en la siguiente
figura:
Página 22 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Muy de cerca sigue Youtube que percibe alrededor del 80,6% de los usuarios activos.
El objetivo de nuestro estudio radica también en Twitter que si bien, en otros países es muy
utilizada en Chile desde el año pasado ha perdido alrededor de 50.000 usuarios quedándose
por debajo de otras redes sociales como Instagram.
Cabe destacar que también a día de hoy Twitter y otras redes sociales sufren de grupos de
pederastas que comparten información y divulgan contenido sensible sobre pornografía
Infantil.
Como se puede observar en la imagen los ciberdelincuentes utilizan palabras en clave para
evitar dar sospechas de sus delitos, en la imagen se puede observar la utilización de siglas
como “Caldo de Pollo”, que hace referencias por sus acrónimos a “CP” que es children porn.
(Bigas & Jiménez, Abuso sexual en internet: El lenguaje secreto de los pedófilos en la red:
así funcionan, 2020)
Página 24 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
CAPÍTULO 3: PROPUESTA DE SOLUCIÓN
La siguiente propuesta de solución se desarrolló bajo la primicia de que las investigaciones
por parte de la PDI era muy poco eficiente y requería de muchos esfuerzos para encontrar
algún resultado interesante. Ante esto, se requiere de una solución que permita de forma
eficaz obtener datos en perfiles de redes sociales obteniendo resultados en el corto plazo
de forma rápida.
3.1 Antecedentes
De las reuniones que se tuvo con el cliente se pueden extraer varios puntos claves para el
desarrollo de la solución, de los cuales se pueden desprender los siguientes:
Si bien este es un aspecto que escapa de nuestro alcance, se pudo desarrollar una
aplicación capaz de solventar este problema guardando cada proceso de
extracción con una timestamp correspondiente. Ahora bien, esto implica que tanto
como las imágenes como los posts son almacenados y si la imagen en un futuro o
la publicación llega a ser eliminada esta ya se almacenó, por ende, se puede
investigar de todas formas.
8
CLI: Command Line Interface, Linea de comandos.
Página 25 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
● Se necesita una interfaz sencilla que todos puedan usar.
Para ello desarrolló una interfaz que pide poca información para realizar el
proceso, además que es sencilla de utilizar, por otro lado, la información que se
extrae también posee una interfaz sencilla de utilizar y de visualizar para futuras
investigaciones. Estas se pueden observar en la sección 4.2.
En base a estos 4 criterios obtenidos, se puede desarrollar un prototipo que cumpla con
los estándares mínimos exigidos por el cliente.
De acuerdo a lo investigado se concluyó que las dos redes sociales en donde más
información se puede obtener tanto por las configuraciones de privacidad, así también
por el uso masivo de estas y sus respectivas leyes, son Facebook y Twitter.
Para el caso de Twitter se definieron los siguientes campos de información del perfil:
3.1.1 Facebook
Como se mencionó en el capítulo 2.3.1, Facebook ha sido una de las redes sociales que
más se han utilizado en Chile durante muchos años, esto es un claro indicador que para
obtener una buena data es necesario procesar los datos obtenidos de esta red social para
realizar alguna investigación.
Se observa que se necesita un permiso especial por parte de Facebook para poder realizar
el scraping, ante esto se dificulta el proceso de realizarlo, sin embargo, en este proyecto
se desarrollará una herramienta capaz de obtener información básica, y con tiempos
acotados de forma de poder no realizar acciones ilegales, recordando que se utiliza la
metodología OSINT, es decir, obtener información de fuentes abiertas (públicas), por lo
que en simples palabras busca reemplazar lo que haría una persona de manera manual.
Cabe mencionar, que Facebook en la década de 2010 estuvo en el punto de mira debido al
escándalo de Cambridge Analytica (bbc, 2018), este caso fue sumamente relevante ya que
deja de entrever la forma en que Facebook maneja los datos de casi 87 millones de
usuarios. Por lo que hoy en día, si bien se puede obtener información de forma segura y
rápida, si existen bastantes limitaciones para realizar el proceso, lo cual podría afectar de
alguna manera los tiempos de ejecución de este programa.
3.1.2 Twitter
Para el caso de twitter, si bien no hay una nota expresa que nos prohíba realizar scraping,
mediante nuestras investigaciones se obtuvo que fue muy complicado realizar las
Página 28 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
investigaciones sin el uso de su API9, por lo cual, se tuvo que utilizar su API para
desarrollar la solución. Con esto, podemos obtener información como sus seguidores y
seguidos, obteniendo una información mucho más fidedigna y que pueda reemplazar a la
investigación manual. Ahora bien, twitter también posee el archivo “robots.txt”, el cual
posee la siguiente información:
3.2 Precedentes
Se hizo una investigación de acuerdo a los antecedentes mencionados anteriormente y
también a las redes sociales escogidas, y se llegó a la conclusión que python era uno de los
mejores lenguajes para realizar este proyecto, así también el que más librerías de scraping
tenia permitiéndonos realizar un proyecto que cumpla con las expectativas y así también
que logre cumplir el objetivo.
Hoy en día, el scraping es una técnica muy utilizada pero también que la redes sociales se
han encargado de regularizar de buena manera, en su mayoría restringiendo el uso de
Junto con ello, se realizó un estudio acerca de las librerías que se podían utilizar con python
para poder realizar el proceso de extracción de información. Se probaron distintos tiempos
y configuraciones para poder evitar las limitaciones que se encontraron durante el
desarrollo.
Para ello se desarrolló el siguiente flujo de trabajo el cual muestra como el programa
funcionará en su totalidad.
Página 30 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Como se mencionó en el capítulo anterior existen varios alcances a tener en cuenta sobre
todo en ambas redes sociales, estas consideraciones son básicamente el tiempo, dado
que, uno de los objetivos es ser más eficaces que cualquier investigación manual. Pero
este limitante es precisamente lo más problemático de este proyecto, puesto que ambas
redes sociales han puesto bastantes restricciones para extraer su información de forma
automática.
Página 31 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
En esta primera etapa, se debe seleccionar a qué tipo de red social realizar la obtención de
datos. Para ello, se debe ingresar el número que corresponde.
Página 32 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
3.4.1 Flujo de la aplicación para Facebook
En este paso, se deberá entregar la información que el programa exige, en este caso, son 3
puntos:
● A qué tipo de perfil está dirigido la investigación, si para usuarios o para grupos de
facebook.
● El nombre de este perfil.
● Y las páginas que se desean extraer, es importante destacar que entre más páginas
se deseen extraer más tiempo demorara la extracción, esto es un punto importante
a destacar, puesto que, como mencionamos en el subcapítulo anterior es relevante
el tiempo en este trabajo.
Una vez entregados los inputs, el programa empezará a extraer la información del perfil de
la persona o grupo dependiendo de lo que se haya escogido.
Página 33 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
3.4.2 Flujo para Twitter
En este paso, tal como con Facebook se deberá entregar la información que la aplicación
pide, estos son:
● Nombre del objetivo, es decir, el nombre del perfil de Twitter de la persona a la cual
queremos extraer la información.
● Número de tweets, en este caso deberemos entregar la cantidad de tweets que
deseamos extraer del objetivo.
3.5 Limitaciones
Durante el desarrollo de la solución se encontraron diversas limitaciones, tales como:
Página 34 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
● Tiempo de scraping, esto quiere decir, que debemos limitar la cantidad y el tiempo
con el que la extracción de información se hace, dado que, Facebook posee una muy
fuerte restricción sobre esto, recordemos que es una red social muy popular y
poderosa.
● Uso de cookies10, para poder extraer de forma eficaz la información es necesario
poseer una cuenta de Facebook, y por esto, es necesario tener los cookies de estas
sesiones para realizar este procedimiento.
● Bloqueos temporales, durante el desarrollo se debieron probar distintos tiempos
para poder evitar estos bloqueos, por lo que, como se comentará más adelante se
diseñó una solución para este problema evitando este error.
● Limitaciones para la extracción en Twitter, en esta red social también hubieron
complicaciones en el tiempo de extracción para los seguidores y seguidos, esta
información es manejada por la propia API de Twitter y para la investigación se
utilizó una cuenta gratuita, por lo que, por razones obvias contiene bastantes
limitaciones a la hora de extraer esta información (Twitter, 2022), por lo que, la
cantidad de seguidores y seguidos podría ser menor a la que es originalmente, de
todas formas, lo que se pudo obtener queda almacenado en un archivo llamado
“Profile”.
● People, esta carpeta contiene la información de todas las personas que han
reaccionado en algún post del perfil, junto con el número de interacciones y su
propio perfil, de forma que sea más sencillo realizar un segundo procedimiento
únicamente copiando ese nombre, y también para saber qué tan frecuente es que
la persona interactúe con el objetivo.
10 Cookies: pequeña información enviada por un sitio web y almacenada en el navegador del usuario
Página 35 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
● Images, esta carpeta contiene todas las imágenes que se han podido extraer del
perfil y cada nombre corresponde al post desde donde se obtuvo, para poder
evaluar toda la información relacionada.
● Information, esta carpeta contiene la información de la duración del procedimiento
de forma de poder saber los tiempos en que la aplicación demoró en obtener esa
información, contiene también, el número de amigos del perfil, los posts extraídos
y una estampilla de tiempo para saber cuando se hizo.
● Profile, esta carpeta contiene la información del perfil en sí, es decir, contiene la
biografía de Facebook o de Twitter de la persona, también se almacena ahí la foto
de perfil de forma de poder reconstruir el perfil.
● Posts, esta carpeta contiene la información de los posts del perfil.
Página 36 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
En este punto, somos capaces de extraer información y poder almacenarla, de esta forma
logramos mantener un orden y eficacia a la hora de analizar perfiles de Facebook o de
Twitter.
En primer lugar, destacar que para realizar estas pruebas se utilizó la siguiente plataforma:
Página 37 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Procesador: Intel(R) Core(TM) i5-8300H CPU @ 2.30GHz 2.30 GHz
Ram: 16,0 GB
Y las cuentas utilizadas para realizar este proceso fueron cuentas creadas este año. Con el
propósito de observar alguna diferencia entre cuentas de amigos o cuenta desconocidas y
poder corroborar que la extracción de información sea posible.
Facebook:
Usuario 19 10 1
Página 38 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Como se puede observar los tiempos varían muy poco de acuerdo a la cantidad de posts
que se extraen, lo cual se podría relacionar al objetivo de la eficacia, que se presenta en el
inicio de este documento, esto porque dada la cantidad de información capaz de extraer en
los tiempos expuestos es claro notar la diferencia a que si esto se hiciera de manera manual
tal como se sigue haciendo.
Es relevante destacar que mediante los timeouts, se evitaron los bloqueos de forma
temporal, sin embargo, aún está la opción de aplicar distintas cuentas de Facebook para
poder evitar este problema.
Es importante destacar también que los tiempos pueden variar por muchos factores, entre
ellos:
● Cantidad de Imágenes.
● Cantidad de comentarios y/o reactores.
● Timeout.
● Cantidad de publicaciones.
Sin embargo, tal como se puede observar, esto hace variar los tiempos de extracción pero
no de forma relevante para el caso.
Twitter:
Página 39 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Usuario 40 0.11
Usuario 60 0.18
Tal como se observa en la tabla los tiempos son muy cortos en relación a la cantidad de
información extraída, lo cual se podría relacionar al objetivo de la eficacia, que se presentó
al inicio del documento, esto porque como pasó con Facebook los tiempos son claramente
menores a que si este proceso se hiciera de forma manual.
Entre los factores que podrían diferenciar la cantidad de tiempos que se demore la
extracción, se pueden destacar:
● Cantidad de Imágenes.
● Cantidad de Tweets.
● Políticas de Twitter, en este punto, se requiere destacar que esta red social tiene
políticas estrictas de acuerdo a las herramientas automatizadas de extracción de
información, como se menciona en la sección 3.1.7 de este documento.
Este último factor en particular explica la razón de porque hay una diferencia abrumante
entre ambas redes sociales, ya que, si bien se extrae información de forma mucho más
rápida si está mucho más limitado la información que se extrae de esta. Ahora bien, esto no
significa que la información obtenida no sea relevante para una investigación, al ser tiempos
tan cortos y además se extraigan alrededor de 100 o más Tweets, de los cuales se puedan
obtener un patrón o realizar análisis a las palabras obtenidas los hace relevante para
elaborar pruebas.
Limitaciones:
A partir de las pruebas realizadas existen algunos parámetros que se deben modificar para
evitar bloqueos temporales en ambas redes sociales, para ello se elaboró la siguiente tabla
en la cual se indica que parámetros se deben variar en cada red social.
Facebook:
Timeout 60 segundos
Post_per_page 25(máximo)
Tabla 7: Limitaciones Facebook. Fuente: Elaboración Propia
Página 40 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
A partir de la tabla se puede notar que el Timeout se refiere a la cantidad de tiempo de
espera entre que el rastreador navegará por página, es decir, entre cada página habrá un
tiempo de espera.
Por otro lado, el post_per_page se definió de forma de que el rastreador como máximo
obtendrá 25 posts de una página.
Seguidos 20
Seguidores 20
Tabla 8: Limitaciones Twitter. Fuente: Elaboración propia
4.6 Dashboard
Como se mencionó en la sección 3.1 de antecedentes se pidió un dashboard en donde se
muestra la información que se extrajo para ello se desarrolló la siguiente interfaz web en la
cual se puede observar la información extraída:
4.6.1 Facebook
4.6.1.1 Information
En este documento de texto se puede observar los tiempos, lo que se extrajo, el número de
amigos, entre otra información. Es clave para generar métricas de extracción observar los
tiempos y la cantidad de información que se extrae, esto se ve de la siguiente manera:
Página 41 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Figura 15: Data_extracted.txt. Fuente: Elaboración propia
4.6.1.2 People
En este documento se puede observar todas las personas que interactúan con el perfil en
cuestión, de esta forma se puede realizar nuevamente el proceso considerando las personas
que más interactúan con el perfil y así poder obtener la mayor información posible. Esto se
puede ver de la siguiente forma:
Se puede observar que cada una de las personas contiene el nombre del perfil de Facebook,
de esta forma se puede realizar nuevamente el proceso de scraping solo tomando en cuenta
este nombre, luego también se observa el número de interacciones que es la cantidad de
comentarios, likes, reacciones, entre otras interacciones que tuvo esta persona con el perfil
en cuestión.
4.6.1.3 Posts
En esta interfaz se pueden observar todos los posts que pudieron ser extraídos, y toda la
Página 42 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
información obtenida de cada uno de ellos, en donde como consideración adicional,
nuevamente se puede observar las personas que reaccionaron o que interactuaron con los
posts que publicó el perfil en cuestión.
Página 43 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Este es un ejemplo de cómo se vería un post extraído, como se puede observar existen
distintos puntos de información para poder realizar una investigación.
4.6.1.4 Profile
En esta interfaz se puede observar toda la información del perfil disponible.
4.6.1.5 Images
En la sección 3.1 antecedentes se pidió observar el caso en que algunas personas eliminen
publicaciones o fotografías de sus perfiles para su conveniencia, en ese contexto se
soluciona descargando todas las imágenes de todos los posts y con esto se puede rescatar
imágenes que pudieran ser eliminadas en un futuro. Con esto se pueden realizar
Página 44 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
investigaciones incluso sobre imágenes que ya no están.
4.6.2 Twitter
4.6.2.1 Information
Tal como se hizo en Facebook, en este documento de texto se observa la información acerca
de los tiempos de extracción y la información que se obtuvo de forma de poder generar
métricas que sirvan para las investigaciones futuras.
4.6.2.2 Profile
En Twitter existe una limitante respecto a la extracción de información sobre los seguidores
y seguidos, es por ello que se utilizó la api oficial de Twitter para realizar este proceso, ahora
bien, esto implica ciertas limitaciones propias de Twitter y su api, ante esto, se hicieron
pruebas de concepto de forma de poder visualizar cómo sería si no existiesen estas
limitantes.
Como se mencionó anteriormente Twitter posee restricciones para extraer este tipo de
información por lo que se utilizó la api oficial la cual posee limitantes en cuanto a la cantidad
y al tiempo de extracción, de esta manera, para no influir en el flujo de la aplicación se
realizó esta prueba de concepto en la cual se puede observar como se distribuye esta
información, lo relevante de esto es que con los nombres de usuario se puede realizar un
nuevo proceso de extracción de forma de poder realizar una investigación más exhaustiva.
Página 45 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
4.6.2.3 Tweets
En esta sección se observan los tweets correspondientes a cada perfil junto con información
relevante para su posterior investigación.
Como se puede observar, en Twitter la extracción automática está bastante limitada y por
ende, no se puede observar tanta información como en Facebook, es por esto que se
realiza de forma mucho más rápida pero con menos detalle.
4.6.2.4 Images
Tal como se hizo con Facebook, las imágenes son rescatadas en su totalidad dando la opción
de observar imágenes que pudieran ser eliminadas, almacenándose en carpetas con su
respectivo nombre.
CAPÍTULO 5: CONCLUSIONES
5.1 Conclusiones generales
En esta memoria se desarrolló un sistema capaz de extraer la información pública en perfiles
Página 46 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
de redes sociales utilizando técnicas de web scraping en conjunto con python. Con esto se
logró apoyar y optimizar el proceso que a día de hoy la PDI realizaba a mano, considerando
los tiempos y los recursos que se gastan día a día realizando las investigaciones se puede
concluir que la aplicación logró el principal objetivo.
Por otro lado, es importante concluir que las redes sociales hoy en día contienen
información que como usuarios no nos damos cuenta que estamos entregando, pudiendo
obtener una serie de información relacionada a cada persona, y además con la personas
que más interactúan con uno. Esta información claramente es de suma importancia cuando
se realizan investigaciones.
Es importante destacar las redes sociales seleccionadas para realizar este proyecto, tanto
Facebook como Twitter, a día de hoy son muy utilizadas por millones de personas a diario,
y por consiguiente es un flujo inmenso de información que se consigue todos los días. Es
más, según (Fernández, 2022) Facebook encabeza el ranking de las redes sociales más
utilizadas con más de 2900 millones de usuarios activos.
Finalmente es importante notar que como usuarios de una red social debemos tener
cuidado con las publicaciones que hacemos o las imágenes que subimos, ya que, no todos
tienen una configuración pertinente en sus perfiles los cuales podrían asegurarse sobre
quien ve su perfil y quien accede a cierta información, de esta forma podemos regular las
personas que son capaces de acceder a nuestro perfil.
Bigas, N., & Jiménez, A. (20 de December de 2020). Abuso sexual en internet: El lenguaje secreto de los
pedófilos en la red: así funcionan. Recuperado el 7 de September de 2022, de La Vanguardia:
https://www.lavanguardia.com/vivo/lifestyle/20201220/49533241030/senales-pederastia-
pedofilia-redes.html
Bigas, N., & Jiménez, A. (20 de December de 2020). Abuso sexual en internet: El lenguaje secreto de los
pedófilos en la red: así funcionan. Recuperado el 7 de September de 2022, de La Vanguardia:
https://www.lavanguardia.com/vivo/lifestyle/20201220/49533241030/senales-pederastia-
pedofilia-redes.html
BOUISSIERE, Y. (2021). Número de usuarios de Twitter ™ y cifras clave de Twitter ™ 2021 (2020) •.
Recuperado el 7 de September de 2022, de Proinfluent: https://www.proinfluent.com/es/numero-
de-usuarios-de-twitter/
Canal 13. (3 de January de 2018). Jóvenes delincuentes se jactan en redes sociales de sus delitos. Recuperado
el 7 de September de 2022, de Canal 13:
https://www.13.cl/programas/bienvenidos/noticias/jovenes-delincuentes-se-jactan-en-redes-
sociales-de-sus-delitos
Ecija. (13 de September de 2017). Web Scraping: ¿legal o ilegal? - ECIJA. Recuperado el 7 de September de
2022, de Ecija Abogados: https://ecija.com/web-scraping-legal-ilegal/
Fernández, R. (28 de July de 2022). • Usuarios mundiales de las redes sociales líderes en 2022. Recuperado el
6 de September de 2022, de Statista: https://es.statista.com/estadisticas/600712/ranking-mundial-
de-redes-sociales-por-numero-de-usuarios/
Kemp, S. (27 de January de 2021). Digital 2021: Global Overview Report — DataReportal – Global Digital
Insights. Recuperado el 7 de September de 2022, de DataReportal:
https://datareportal.com/reports/digital-2021-global-overview-report
Maltego for Professional Investigators and Small Teams. (2022). Recuperado el 7 de September de 2022, de
Maltego: https://www.maltego.com/maltego-for-pro/
Página 49 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
Mapfre. (2020). ¿Cuánta información se genera y almacena en el mundo? Recuperado el 7 de September de
2022, de Fundación MAPFRE: https://www.fundacionmapfre.org/blog/cuanta-informacion-se-
genera-y-almacena-en-el-mundo/
Martín, A., & Fernández, C. (9 de December de 2020). Las Redes Sociales más utilizadas: cifras y estadísticas.
Recuperado el 7 de September de 2022, de IEBS: https://www.iebschool.com/blog/medios-
sociales-mas-utilizadas-redes-sociales/
Octoparse. (14 de October de 2020). Los 3 Usos Más Prácticos de Herramienta de Web Scraping de Datos de
Comercio Electrónico. Recuperado el 7 de September de 2022, de Octoparse:
https://www.octoparse.es/blog/3-usos-pr%C3%A1cticos-de-herramientas-de-web-scraping-de-
datos-de-comercio-electr%C3%B3nico
Twitter. (2022). About Twitter's APIs. Recuperado el 7 de September de 2022, de Twitter Help Center:
https://help.twitter.com/en/rules-and-policies/twitter-api
Venturini, J., & Díaz, M. (2014). La PDI está revisando tu Facebook, parte II. Recuperado el 7 de September
de 2022, de Derechos Digitales: https://derechosdigitales.tumblr.com/post/89806043126/la-pdi-
est%C3%A1-revisando-tu-facebook-parte-ii
Página 50 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
ANEXOS
Anexo Main
from statistics import mode
from facebook_scraper import *
import nest_asyncio
import json
from soupsieve import match
import twint
from json2html import *
import time
import os
import wget
from os import path
from pathlib import Path
from instascrape import *
from tkinter import *
import twitter_module as twt
import facebook_module as fb
import json
import time
path_handler = 'C:\\Users\\matia\\proyectos\\' # Parámetro que
modifica la ruta en donde se almacenará la información obtenida
def get_input():
print("Saved!")
if(len(sys.argv)) == 5: # Función que permite utilizar la cron tab
mode = sys.argv[1]
if int(mode) == 1:
mode_fb= sys.argv[2]
profile = sys.argv[3]
pages = sys.argv[4]
fb.fb_scraping(mode_fb,profile,pages)
elif int(mode) == 2:
target = sys.argv[2]
tweets = sys.argv[3]
twt.Twitter_scraper(target,tweets)
else:
print("Help :\n To use Facebook mode, '1 nameprofile type
pages'\n To use Twitter mode, '2 nameprofile tweets'")
else: #Permite utilizar la interfaz gráfica
window = Tk("Selecting Social Media to scrap")
window.geometry("300x300")
label1 = Label(window,text='Select Mode: \n 1. Facebook \n 2.
Twitter')
label1.pack()
label1.config(justify = CENTER)
var4 = StringVar()
Página 51 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
entry1 = Entry(window,width=30,textvariable=var4)
entry1.pack()
button1 = Button(window, text = 'submit')
button1.pack()
button1.config(command = get_input)
window.mainloop()
select_mode = int(var4.get())
if(select_mode == 1):
if(os.path.exists(path_handler+'\\Facebook\\') == False):
os.mkdir(path_handler + '\\Facebook\\')
window = Tk("Facebook Scraping")
window.geometry("300x300")
label1 = Label(window,text='Enter the mode of the
scraping: \n 1. User profile \n 2. Group Profile')
label1.pack()
label1.config(justify = CENTER)
var1=StringVar()
var2=StringVar()
var3=StringVar()
entry1 = Entry(window,width=30,textvariable=var1)
entry1.pack()
label2 = Label(window,text='Enter the name of the
profile')
label2.pack()
label2.config(justify = CENTER)
entry2 = Entry(window,width=30,textvariable=var2)
entry2.pack()
label3 = Label(window,text='Enter the pages to scraping
:')
label3.pack()
label3.config(justify = CENTER)
entry3 = Entry(window,width=30,textvariable=var3)
entry3.pack()
button1 = Button(window, text = 'submit')
button1.pack()
button1.config(command = get_input)
window.mainloop()
scraper = var1.get()
profile = var2.get()
pages = int(var3.get())
fb.fb_scraping(scraper,profile,pages) #Comienza el proceso
en Facebook
elif(select_mode == 2):
if(os.path.exists(path_handler+'\\Twitter\\') == False):
os.mkdir(path_handler + '\\Twitter\\')
window = Tk("Twitter Scraping")
window.geometry("300x300")
label1 = Label(window,text='Enter the name of the target')
label1.pack()
Página 52 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
label1.config(justify = CENTER)
var1=StringVar()
var2=StringVar()
var3=StringVar()
var4 = StringVar()
entry1 = Entry(window,width=30,textvariable=var1)
entry1.pack()
label2 = Label(window,text='Enter the number of tweets')
label2.pack()
label2.config(justify = CENTER)
entry2 = Entry(window,width=30,textvariable=var2)
entry2.pack()
button1 = Button(window, text = 'submit')
button1.pack()
button1.config(command = get_input)
window.mainloop()
username = var1.get()
n_tweets = int(var2.get())
output = var4.get()
twt.Twitter_scraper(username,n_tweets,output) #Comienza el
proceso en Twitter
Página 53 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
path_handler = 'C:\\Users\\matia\\proyectos\\Facebook\\'
#Guardar la información relacionada con Facebook
def profiles_user(name,pages): #Función para rescatar la
información del perfil
time_start = time.time()
data_profile = get_profile(name,cookies =
"cookies.txt", friends = True,timeout=90)
data_profile_friends = data_profile['Friends']
friends = []
for friend in data_profile_friends:
friends.append(friend['name'])
posts = []
for post in get_posts(name,pages = pages,timeout =
60,options={"comments":True,"reactors":True,"posts_per_p
age":25}):
posts.append(post)
image_download(posts,name)
output = []
output,xmloutput = parse(posts,data_profile,name)
soup_parse(output,name)
xml_parse(xmloutput,name,False)
information_profile(data_profile,name)
total_posts = len(posts)
total_friends = len(friends)
et = time.time()
total_time = et - time_start
total_time_minute = total_time / 60.0
timestr = time.strftime("%Y-%m-%d-%H-%M-%S")
file_posted = 'Data_extracted_' + name + timestr
+'.txt'
if (os.path.exists(path_handler + name) == False):
os.mkdir(path_handler + name)
if(os.path.exists(path_handler + name +
'\\Information') == False):
os.mkdir(path_handler + name + '\\Information')
file = open(path_handler + name +'\\Information\\' +
file_posted,'w',encoding="utf-8")
message = 'Posts Extracted\n' + str(total_posts) +
'\n' + 'Friends Number\n' + str(total_friends) +'\n'
+'Time elapsed in minutes\n' + str(total_time_minute)
+'\n' +'Timestamp\n' + timestr+'\n'
Página 54 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
file.write(message)
file.close()
window = Tk("Information Obtained")
window.geometry("300x300")
label1 = Label(window,text='Posts extracted :')
label1.pack()
label1.config(justify = CENTER)
label2 = Label(window,text=total_posts)
label2.pack()
label2.config(justify = CENTER)
friends_reactor = []
friends_interacction = {}
for i in posts:
if(i['reactors'] == None):
continue
friends_reactor.append(i['reactors'])
print(type(friends_reactor))
friends_name = []
friends_total = {}
for j in friends_reactor:
for k in j:
friends_name.append(k.get('name'))
string2 = k.get('link').split('?')[0]
string3 = string2.split('/')[3]
friends_interacction[k.get('name')] =
(string3)
countabilizer = dict((i,friends_name.count(i)) for i
in friends_name)
for key in friends_interacction:
for key2 in countabilizer:
if(key == key2):
friends_total[key] =
(friends_interacction[key],'Numero de interacciones : '
+ str(countabilizer[key2]))
json_object = json.dumps(friends_total)
jsonparse = json2html.convert(json_object)
friendsparse(jsonparse,name)
label2 = Label(window,text='El usuario tiene la
lista de amigos privada')
label2.pack()
Página 55 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
label2.config(justify = CENTER)
label6 = Label(window,text='Friends number :')
label6.pack()
label6.config(justify = CENTER)
label3 = Label(window,text=total_friends)
label3.pack()
label3.config(justify = CENTER)
label4 = Label(window,text='Time elapsed')
label4.pack()
label4.config(justify = CENTER)
label5 = Label(window,text=total_time)
label5.pack()
label5.config(justify = CENTER)
window.after(10000,lambda:window.destroy())
window.mainloop()
def friendsparse(output,name): #Rescatar los amigos
timestr = time.strftime("%Y-%m-%d-%H-%M-%S")
if (os.path.exists(path_handler + name) == False):
os.mkdir(path_handler + name)
if(os.path.exists(path_handler + name + '\\People')
== False):
os.mkdir(path_handler + name + '\\People')
filename = "People_Interaction - " + name +"--"+
timestr + '.html'
savepath = name
path_name = path_handler + savepath + '\\People'
+'\\' + filename
file = open(path_name,'w',encoding="utf-8")
inicio = """<html>
<head></head>
<body>"""
fin= """
</body>
</html>"""
message = inicio + output + fin
file.write(message)
file.close()
def soup_parse(output_lists,profile): #Creación del html
con los posts
timestr = time.strftime("%Y-%m-%d-%H-%M-%S")
string_entero = ''
Página 56 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
if (os.path.exists(path_handler + profile) ==
False):
os.mkdir(path_handler + profile)
if(os.path.exists(path_handler + profile +
'\\Posts\\') == False):
os.mkdir(path_handler + profile + '\\Posts\\')
for i in output_lists:
string_entero = string_entero + "<div> ---Nuevo
Post--- </div>" + i
filename = timestr + '.html'
savepath = '\\' + profile + '\\Posts\\'
path_name = path_handler + savepath + '\\' +
filename
file = open(path_name,'w',encoding="utf-8")
inicio = """<html>
<head></head>
<body>"""
fin= """
</body>
</html>"""
message = inicio + string_entero + fin
file.write(message)
file.close()
def xml_parse(xml,profile,status): #Creación en formato
xml de los posts
timestr = time.strftime("%Y-%m-%d-%H-%M-%S")
if (os.path.exists(path_handler + profile) ==
False):
os.mkdir(path_handler + profile)
if (os.path.exists(path_handler + profile) ==
False):
os.mkdir(path_handler + profile)
if(os.path.exists(path_handler + profile +
'\\Posts\\') == False):
os.mkdir(path_handler + profile + '\\Posts\\')
if status == True:
filename = profile + '.xml'
else:
filename = timestr + '.xml'
savepath = '\\' + profile + '\\Posts\\'
path_name = path_handler + savepath + '\\' +
Página 57 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
filename
file = open(path_name,'wb')
message = xml
file.write(message)
file.close()
def image_download(posts,profile): #Funcion que descarga
las imagenes
for i in posts:
url = i['image']
print(url)
if (os.path.exists(path_handler + profile) ==
False):
os.mkdir(path_handler + profile)
if(os.path.exists(path_handler + profile +
'\\Images') == False):
os.mkdir(path_handler + profile +
'\\Images')
out = path_handler + profile + '\\Images\\' +
i['post_id'] + '.jpg'
try:
wget.download(url,out)
except:
print("No hay url")
def parse(posts,data_profile,profile): #Función que
retorna la listas de los posts
outputs_lists = []
output_xmllists=[]
xml = dicttoxml.dicttoxml(posts)
for i in posts:
del i['images_lowquality']
del i['image_lowquality']
del i['video_quality']
del i['is_live']
del i['was_live']
del i['image_ids']
del i['video_thumbnail']
del i['video_width']
del i['factcheck']
del i['image_id']
del i['video_height']
del i['images_lowquality_description']
Página 58 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
del i['video_duration_seconds']
del i['w3_fb_url']
del i['available']
output = json2html.convert(json = i)
outputs_lists.append(output)
return outputs_lists,xml
def information_profile(data_profile,name): #Parsea la
información del perfil en formato html
output = json2html.convert(data_profile)
xml = dicttoxml.dicttoxml(data_profile)
status = True
xml_parse(xml,name,status)
timestr = time.strftime("%Y-%m-%d-%H-%M-%S")
if (os.path.exists(path_handler + name) == False):
os.mkdir(path_handler + name)
if(os.path.exists(path_handler + name + '\\Profile')
== False):
os.mkdir(path_handler + name + '\\Profile')
filename = "Profile_" + name +"--"+ timestr +
'.html'
savepath = name
path_name = path_handler + savepath + '\\Profile'
+'\\' + filename
file = open(path_name,'w',encoding="utf-8")
inicio = """<html>
<head></head>
<body>"""
fin= """
</body>
</html>"""
message = inicio + output + fin
file.write(message)
if (os.path.exists(path_handler + name) == False):
os.mkdir(path_handler + name)
if(os.path.exists(path_handler + name + '\\Profile')
== False):
os.mkdir(path_handler + name +'\\Profile')
out = path_handler + name + '\\Profile'
try:
url = data_profile['profile_picture']
except:
Página 59 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
pass
try:
wget.download(url,out)
except:
print("No hay url")
file.close()
def group_profile(name,pages): #Obtiene la información
de los grupos
time_start = time.time()
data_profile = get_group_info(name, cookies =
"cookies.txt",timeout=60)
posts = []
for post in
get_posts(group=name,options={"comments":True,"reactors"
:True,"posts_per_page":25},timeout = 60):
posts.append(post)
if (len(posts) == 0):
print("Grupo Privado")
total_posts = len(posts)
friends_reactor = []
friends_interacction = {}
for i in posts:
if(i['reactors'] == None):
continue
friends_reactor.append(i['reactors'])
friends_name = []
friends_total = {}
for j in friends_reactor:
for k in j:
friends_name.append(k.get('name'))
string2 = k.get('link').split('?')[0]
string3 = string2.split('/')[3]
friends_interacction[k.get('name')] =
(string3)
countabilizer = dict((i,friends_name.count(i))
for i in friends_name)
for key in friends_interacction:
for key2 in countabilizer:
if(key == key2):
friends_total[key] =
(friends_interacction[key],'Numero de interacciones : '
Página 60 de 66
Extracción de datos públicos en redes sociales mediante técnicas de web scraping
+ str(countabilizer[key2]))
json_object = json.dumps(friends_total)
jsonparse = json2html.convert(json_object)
friendsparse(jsonparse,name)
image_download(posts,name)
output = []
output,_ = parse(posts,data_profile,name)
soup_parse(output,name)
information_profile(data_profile,name)
et = time.time()
total_time = et - time_start
total_time_minute = total_time / 60.0
timestr = time.strftime("%Y-%m-%d-%H-%M-%S")
file_posted = 'Data_extracted_' + name + timestr
+'.txt'
if (os.path.exists(path_handler + name) == False):
os.mkdir(path_handler + name)
if(os.path.exists(path_handler + name +
'\\Information') == False):
os.mkdir(path_handler + name + '\\Information')
file = open(path_handler + name +'\\Information\\' +
file_posted,'w',encoding="utf-8")
message = 'Posts Extracted\n' + str(total_posts) +
'\n' +'\n' +'Time elapsed in minutes\n' +
str(total_time_minute) +'\n' +'Timestamp\n' +
timestr+'\n'
file.write(message)
file.close()
#for i in posts:
# print(i)
def get_input():
print("Saved!")
def fb_scraping(scraper,profile,pages):
if(scraper == "1"):
print("Doing the Scrap ...")
profiles_user(profile,pages)
elif(scraper == "2"):
print("Doing the Scrap ...")
group_profile(profile,pages)
Tiempos SCT
Página 66 de 66