Por alguna razón mi codigo corre sin ningun error, pero al momento que me crea la carpeta que es donde se supone que se guardaran los arc...

Alex Dario Portilla Chungandro

Alex Dario Portilla Chungandro

Pregunta
student
hace 5 años

Por alguna razón mi codigo corre sin ningun error, pero al momento que me crea la carpeta que es donde se supone que se guardaran los archivos .txt estos no aparecen, la carpeta queda totalmente vacía. Alguien sabe como solucionarlo??. Les dejo mi codigo

import requests import lxml.html as html import os import datetime HOME_URL = 'https://www.larepublica.co/' XPATH_LINK_TO_ARTICLE = '//div/h2/a/@href' XPATH_TITLE = '//h2[@style="font-size: 49px; line-height: 53px;"]/a/text()' XPATH_SUMMARY = '//div[@class="lead"]/p/text()' XPATH_BODY = '//div[@class="autoArticle" or @class="html-content"]/p/text()' def parse_notice(link, today): try: response= requests.get(link) if response.status_code == 200: notice = response.content.decode('utf-8') parsed = html.fromstring(notice) try: title = parsed.xpath(XPATH_TITLE)[0] title = title.replace('\"','') summary = parsed.xpath(XPATH_SUMMARY)[0] body = parsed.xpath(XPATH_BODY) except IndexError: return with open(f'{today}/{title}.txt', 'w', encoding='utf-8') as f: f.write(title) f.write('\n\n') f.write(summary) f.write('\n\n') for p in body: f.write(p) f.write('\n') else: raise ValueError(f'Error: {response.status_code}') except ValueError as ver: print(ve) def parse_home(): try: response = requests.get(HOME_URL) if response.status_code == 200: home = response.content.decode('utf-8') parsed = html.fromstring(home) links_to_notices = parsed.xpath(XPATH_LINK_TO_ARTICLE) today = datetime.date.today().strftime('%d-%m-%Y') if not os.path.isdir(today): os.mkdir(today) for link in links_to_notices: parse_notice(link, today) else: raise ValueError(f'Error: {response.status_code}') except ValueError as ve: print(ve) def run(): parse_home() if __name__=="__main__": run()
10 respuestas
para escribir tu comentario
    Massimo Di Berardino

    Massimo Di Berardino

    student
    hace 5 años

    ¡Hola Alex! Validaste que el contenido de las variables title, summary y body esté llegando de manera correcta, puede ser que estas variables no estén tomando los valores y por eso no se escribe nada en el archivo.

    Alex Dario Portilla Chungandro

    Alex Dario Portilla Chungandro

    student
    hace 5 años

    Hola si, yo tambien pense que ese podría ser el causante del porque no se guardan mis archivos, pero al revisar los xpath estos si me regresaban el texto, los verifique usando el .map(x => x.wholeText) para ver si realmente me regresaban el texto y efectivamente estos si me traen el texto que solcite.

    Francisco Javier Suarez Verdugo

    Francisco Javier Suarez Verdugo

    student
    hace 5 años

    Buenas tardes Alex, yo tenía el mismo problema. Lo que hice para solucionarlo fue revisar cada uno de los campos de la noticia por medio de un print en el archivo scraper.   

    try: title = parsed.xpath(XPATH_TITLE)[0] title = title.replace('\"','') print(title) summary = parsed.xpath(XPATH_SUMMARY)[0] print(summary) body = parsed.xpath(XPATH_BODY) print(body)

      

    De esto noté que el title no contenía información, así que lo hice fue ver el código HTML del enlace de la noticia al hacer print de notice:   

    if response.status_code == 200: notice = response.content.decode('utf-8') print(notice) parsed = html.fromstring(notice)

      

    Revisándolo se observa que el title usa una etiqueta diferente a la que nos muestra el navegador llamada text-fill por lo tanto solo con cambiar en el xpath de title el h2 a text-fill me funciono.

    Antes:

    XPATH_TITLE = '//div[@class="mb-auto"]/h2/a/text()'

    Despues:

    XPATH_TITLE = '//div[@class="mb-auto"]/text-fill/a/text()'

    Espero que esta información te sirva

    Diego Hernández Delgado

    Diego Hernández Delgado

    student
    hace 5 años

    Yo tenía el mismo problema... ¡gracias Ulzahk!

    Antonio Cerda

    Antonio Cerda

    student
    hace 5 años

    Wow muchísimas gracias, llevaba horas revisando mi código, esto me fué muy útil amigo!

    Eduard Steven Arias Briceño

    Eduard Steven Arias Briceño

    student
    hace 4 años

    Ulzahk, estoy siguiendo el paso a paso de tus respuesta, pero no me aparecen los archivos en la carpeta

    Moisés Manuel Morín Hevia

    Moisés Manuel Morín Hevia

    student
    hace 4 años

    Uff pueden ser muchisimas cosas, has una busqueda binaria para encontar donde falla. Lo más probable sea en el inicio al declarar los XPath

    Cesar Hernández Ramírez

    Cesar Hernández Ramírez

    student
    hace 4 años

    wtf moises en estos casos no sirve una busqueda binaria

    Cesar Hernández Ramírez

    Cesar Hernández Ramírez

    student
    hace 4 años

    Yo tengo el mismo problema, ya pude extraer todos los campos a la perfección, pero a la hora de crear el archivo dice que no se ha encontrado el archivo {con el titulo de la noticia}, pero se supone que lo tiene que crear, no abrirlo. Sí utilicé el modo escritura.

    Cesar Hernández Ramírez

    Cesar Hernández Ramírez

    student
    hace 4 años

    Ya lo solucioné compañeros, el problema no estaba en el título, estaba en mi variable {today}

Curso de Web Scraping con Python y Xpath

Curso de Web Scraping con Python y Xpath

Aprende las bases de la extracción de datos en Internet y descubre cómo funciona una aplicación de Web Scraping internamente. Desarrolla scripts a través de herramientas como Python y las DevTools del navegador y consigue tu siguiente trabajo en cualquier empresa de tecnología.

Curso de Web Scraping con Python y Xpath
Curso de Web Scraping con Python y Xpath

Curso de Web Scraping con Python y Xpath

Aprende las bases de la extracción de datos en Internet y descubre cómo funciona una aplicación de Web Scraping internamente. Desarrolla scripts a través de herramientas como Python y las DevTools del navegador y consigue tu siguiente trabajo en cualquier empresa de tecnología.