[SOLUCIONADO] Script en C para obtener contenido de paginas WEB

Iniciado por Bartz, Marzo 06, 2019, 11:16:37 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Marzo 06, 2019, 11:16:37 PM Ultima modificación: Marzo 08, 2019, 11:32:36 AM por Gabriela
Hola a todos !

Estoy comenzando a investigar para hacer un script, al cual le pueda pasar una url y que me devuelva datos que esten dentro de la misma

Por ejemplo, pasarle la URL de este post y que habiendolo definido previamente me diga

"Dueño del post: Bartz"
"Cantidad de comentarios: n "
"Usuarios que comentaron: user1, user2, user3,"
"etc"

Mi consulta no va sobre la logica del codigo, sino que, con que herramienta se hace esto ?? sera con curl o con que ? (de verdad se me dificulta buscar material sin saber bien que es lo que estoy buscando y me salen muchisimas cosas de C# y C++ intentando buscar sobre C... es frustrante xD )

Desde ya gracias por la ayuda!




Con la fuerza del mar, con la paz del rio


Marzo 07, 2019, 06:41:03 AM #1 Ultima modificación: Marzo 07, 2019, 06:42:48 AM por animanegra
yo tiraria de scripts en bash y sed, awk y curl es mucho mas directo. Voy poniendo comandos utiles y ya si eso vas mirando cada comando como se usa para hacer lo que quieras. Se que lo que voy poniendo de ejemplo no será exactamente lo que deseas hacer, pero implica hacer el mismo tipo de operaciones que deseas hacer. Pongo una muy breve explicación, si crees que debería hacer una guia me comentáis por aqui lo que deséais aprender y hago una entrada sobre ello con diversos ejemplos.

Para la peticion de la pagina puedes tirar de curl:
Código: text

curl URL -x POST -d "var1=value1&var2=value2"

En URL va la url de la pagina que deseas obtener, en -x puedes poner el método utilizado para la lectura de variables de esa página (POST o GET) y en -d van los pares variable valor separados por &.
Lo que obtienes es la pagina sin procesar, evidentemente, en html. Ahora dependerá de lo que desees hacer con esa pagina. Usando las pipes empiezas a hacer cosas.

grep permite filtrar lineas, por ejemplo si pongo:
Código: text

curl https://www.eldiario.es/ | grep "<img"


Imagina que solo queremos el src de las lineas con img porque queremos una base de datos con las imagenes de una página pues podemos usar sed.
sed permite sustituir las apariciones de ciertas palabras por otras y permite usar wilcards para expresar dichas palabras.

vamos a cambiar con sed la salida anterior para que todo lo que vaya antes de la palabra src nos lo comamos y la palabra src incluida.

Código: text

curl https://www.eldiario.es/ | grep "<img" | sed s/".*src"/""/


como vemos la salida es algo asi:

Código: text

....
="https://www.eldiario.es/fotos/Ray-Loriga-Sabado-entrevista-eldiarioes_EDIIMA20190227_0423_22.jpg" width="643" height="362" alt="Ray Loriga presenta 'S&aacute;bado, domingo', su nueva novela, en una entrevista con eldiario.es." /></noscript>
="https://www.eldiario.es/fotos/Caricatura-anonima-Emilio-Pardo-Bazan_EDIIMA20190304_0476_10.jpg" width="311" height="175" alt="Caricatura an&oacute;nima de Emilio Pardo Baz&aacute;n" /></noscript>
="https://www.eldiario.es/fotos/Maria-Sanchez-autora-Tierra-mujeres_EDIIMA20190303_0332_10.jpg" width="311" height="175" alt="Mar&iacute;a S&aacute;nchez, autora de 'Tierra de mujeres'" /></noscript>
="https://www.eldiario.es/fotos/Courtney-Love-Straight-to-Hell_EDIIMA20190301_0883_22.jpg" width="145" height="157" alt="Courtney Love en Straight to Hell (1987)" /></noscript>
="/bbtfile/18010_20160831Ph8xAs.jpg" width="313" height="50" alt="" /></noscript>
="https://www.eldiario.es/fotos/Herstoricas-Time-Out_EDIIMA20190304_0372_17.jpg" width="141" height="78" alt="Herstoricas Time Out" /></noscript>
="https://www.eldiario.es/fotos/Maria-Hervas-Time-Out_EDIIMA20190304_0369_17.jpg" width="141" height="78" alt="Mar&iacute;a Herv&aacute;s Time Out" /></noscript>
="https://www.eldiario.es/fotos/Libros-feministas-Time-Out_EDIIMA20190304_0370_17.jpg" width="141" height="78" alt="Libros feministas Time Out" /></noscript>
="https://www.eldiario.es/fotos/corbeau_EDIIMA20190214_0838_23.jpg" width="311" height="175" alt="Le corbeau 2" /></noscript>
="https://www.eldiario.es/fotos/mujer-conoce-capitan-Hoggie_EDIIMA20190301_0761_21.jpg" width="311" height="175" alt="Una mujer conoce al capit&aacute;n Hoggie" /></noscript>
....


imaginemos que ahora solo nos interesan de ahí las fotos de tipo jpg, pues toca el turno al grep otra vez:

Código: text

curl https://www.eldiario.es/ | grep "<img" | sed s/".*src"/""/ | grep jpg


Y ahora deseamos quitar todo lo que siga a jpg porque en realidad queremos solo el nombre de la imagen con su extension.

Código: text

curl https://www.eldiario.es/ | grep "<img" | sed s/".*src"/""/ | grep jpg | sed s/"jpg.*"/"jpg"/


nos devuelve esto:

Código: text

="/bbtfile/18010_20160831Ph8xAs.jpg
="https://www.eldiario.es/fotos/Herstoricas-Time-Out_EDIIMA20190304_0372_17.jpg
="https://www.eldiario.es/fotos/Maria-Hervas-Time-Out_EDIIMA20190304_0369_17.jpg
="https://www.eldiario.es/fotos/Libros-feministas-Time-Out_EDIIMA20190304_0370_17.jpg
="https://www.eldiario.es/fotos/corbeau_EDIIMA20190214_0838_23.jpg
="https://www.eldiario.es/fotos/mujer-conoce-capitan-Hoggie_EDIIMA20190301_0761_21.jpg
="https://www.eldiario.es/fotos/Solange-Knowles_EDIIMA20190304_0368_22.jpg
="https://www.eldiario.es/fotos/Bake-Off_EDIIMA20190307_0057_19.jpg
="https://www.eldiario.es/fotos/Venda_EDIIMA20190307_0060_19.jpg
="https://www.eldiario.es/fotos/Vazquez_EDIIMA20190306_0111_19.jpg


Pero solo queremos el nombre de la imagen con su extension!!!, pues vamos a usar el awk diciendole que lo que separa las palabras es el caracter "/" y nos quedamos con la última palabra:

Código: text

curl https://www.eldiario.es/ | grep "<img" | sed s/".*src"/""/ | grep jpg | sed s/"jpg.*"/"jpg"/ | awk -F "/" '{print $NF}'


con lo que tenemos esto:

Código: text

eco-frente-crisis_EDIIMA20190306_0979_19.jpg
Evacuada-Universidad-Glasgow-detectarse-sospechoso_EDIIMA20190306_0771_21.jpg
escuela-trato-censurada-Policia-brasilena_EDIIMA20190305_0639_23.jpg
India-Pakistan-cines-pantalla_EDIIMA20160930_0643_21.jpg
Mensaje-cuenta-Bolsonaro-Twitter-preguntando_EDIIMA20190306_0597_21.jpg
Ray-Loriga-Sabado-entrevista-eldiarioes_EDIIMA20190227_0423_22.jpg
Caricatura-anonima-Emilio-Pardo-Bazan_EDIIMA20190304_0476_10.jpg
Maria-Sanchez-autora-Tierra-mujeres_EDIIMA20190303_0332_10.jpg
Courtney-Love-Straight-to-Hell_EDIIMA20190301_0883_22.jpg
18010_20160831Ph8xAs.jpg
Herstoricas-Time-Out_EDIIMA20190304_0372_17.jpg
Maria-Hervas-Time-Out_EDIIMA20190304_0369_17.jpg
Libros-feministas-Time-Out_EDIIMA20190304_0370_17.jpg
corbeau_EDIIMA20190214_0838_23.jpg
mujer-conoce-capitan-Hoggie_EDIIMA20190301_0761_21.jpg
Solange-Knowles_EDIIMA20190304_0368_22.jpg
Bake-Off_EDIIMA20190307_0057_19.jpg
Venda_EDIIMA20190307_0060_19.jpg
Vazquez_EDIIMA20190306_0111_19.jpg


Y imaginate que ademas queremos numerar el numero de imagenes, pues podemos usar el nl:

Código: text

curl https://www.eldiario.es/ | grep "<img" | sed s/".*src"/""/ | grep jpg | sed s/"jpg.*"/"jpg"/ | awk -F "/" '{print $NF}' | nl


Y tenemos esto:

Código: text

.....
    81 Caricatura-anonima-Emilio-Pardo-Bazan_EDIIMA20190304_0476_10.jpg
    82 Maria-Sanchez-autora-Tierra-mujeres_EDIIMA20190303_0332_10.jpg
    83 Courtney-Love-Straight-to-Hell_EDIIMA20190301_0883_22.jpg
    84 18010_20160831Ph8xAs.jpg
    85 Herstoricas-Time-Out_EDIIMA20190304_0372_17.jpg
    86 Maria-Hervas-Time-Out_EDIIMA20190304_0369_17.jpg
    87 Libros-feministas-Time-Out_EDIIMA20190304_0370_17.jpg
    88 corbeau_EDIIMA20190214_0838_23.jpg
    89 mujer-conoce-capitan-Hoggie_EDIIMA20190301_0761_21.jpg
    90 Solange-Knowles_EDIIMA20190304_0368_22.jpg
    91 Bake-Off_EDIIMA20190307_0057_19.jpg
    92 Venda_EDIIMA20190307_0060_19.jpg
    93 Vazquez_EDIIMA20190306_0111_19.jpg


Y ahora por ejemplo queremo que la salida en lugar de ser así sea algo asi como la imagen X es esta nombrefichero, pues de nuevo awk:

Código: text

curl https://www.eldiario.es/ | grep "<img" | sed s/".*src"/""/ | grep jpg | sed s/"jpg.*"/"jpg"/ | awk -F "/" '{print $NF}' | nl | awk '{print "La imagen " $1 " es esta " $2 }'


Con lo que la salida sería esta:

Código: text

...
La imagen 74 es esta Dimas-Gimeno-nombres-posibilidades-Alvarez_EDIIMA20140914_0349_20.jpg
La imagen 75 es esta eco-frente-crisis_EDIIMA20190306_0979_19.jpg
La imagen 76 es esta Evacuada-Universidad-Glasgow-detectarse-sospechoso_EDIIMA20190306_0771_21.jpg
La imagen 77 es esta escuela-trato-censurada-Policia-brasilena_EDIIMA20190305_0639_23.jpg
La imagen 78 es esta India-Pakistan-cines-pantalla_EDIIMA20160930_0643_21.jpg
La imagen 79 es esta Mensaje-cuenta-Bolsonaro-Twitter-preguntando_EDIIMA20190306_0597_21.jpg
La imagen 80 es esta Ray-Loriga-Sabado-entrevista-eldiarioes_EDIIMA20190227_0423_22.jpg
La imagen 81 es esta Caricatura-anonima-Emilio-Pardo-Bazan_EDIIMA20190304_0476_10.jpg
La imagen 82 es esta Maria-Sanchez-autora-Tierra-mujeres_EDIIMA20190303_0332_10.jpg
La imagen 83 es esta Courtney-Love-Straight-to-Hell_EDIIMA20190301_0883_22.jpg
La imagen 84 es esta 18010_20160831Ph8xAs.jpg
La imagen 85 es esta Herstoricas-Time-Out_EDIIMA20190304_0372_17.jpg
La imagen 86 es esta Maria-Hervas-Time-Out_EDIIMA20190304_0369_17.jpg
La imagen 87 es esta Libros-feministas-Time-Out_EDIIMA20190304_0370_17.jpg
La imagen 88 es esta corbeau_EDIIMA20190214_0838_23.jpg
La imagen 89 es esta mujer-conoce-capitan-Hoggie_EDIIMA20190301_0761_21.jpg
La imagen 90 es esta Solange-Knowles_EDIIMA20190304_0368_22.jpg
La imagen 91 es esta Bake-Off_EDIIMA20190307_0057_19.jpg
La imagen 92 es esta Venda_EDIIMA20190307_0060_19.jpg
La imagen 93 es esta Vazquez_EDIIMA20190306_0111_19.jpg

Lo siento, no contesto dudas por MP, si tienes dudas las planteas en el foro.

Muchisimas gracias animanegra !!!

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
yo tiraria de scripts en bash y sed, awk y curl es mucho mas directo.

Seguro que es mas directo, pero la preferencia de hacerlo en C es que estoy empezando la uni, y C es el primer lenguaje que se aprende.

Asique aprovechando que las bases de la programación ya las aprendi quiero aprovechar para utilizar los trabajos entregables para hacer algunos scripts que me sean utiles (y subirlos al foro obviamente :D )

De nuevo gracias saludos !




Con la fuerza del mar, con la paz del rio