Estoy haciendo el scrapping en la página de Infobae y en la página principal los artículos tienen links relativos. He intentado varias co...

Francisco Javier Márquez López

Francisco Javier Márquez López

Pregunta
studenthace 5 años

Estoy haciendo el scrapping en la página de Infobae y en la página principal los artículos tienen links relativos. He intentado varias cosas para agregarles el link absoluto (home + link artículo) pero no logro hacerlo porque. ¿Alguien sabe como?

4 respuestas
para escribir tu comentario
    Francisco Javier Márquez López

    Francisco Javier Márquez López

    studenthace 5 años

    Muchas gracias por su aporte. La verdad es que hace unos días logré resolver el problema utilizando la librería urllib y el método urljoin. Solo tuve que iterar dentro de la lista de url's relativos(XPATH_CATEGORIAS) y agregarle el Home (HOME_URL). Aquí les dejó el código para vean.

    def parse_home(): cats = [] try: response = requests.get(HOME_URL) if response.status_code == 200: home = response.content.decode('utf-8') parsed = html.fromstring(home) categorias = parsed.xpath(XPATH_CATEGORIAS) for i in categorias: sub = i.split(', ') sub = urljoin(HOME_URL, sub[0], allow_fragments=True) cats.append(sub) return cats except ValueError as ve: print(ve) print(parse_home())
    Alan Kevin Fuentes García

    Alan Kevin Fuentes García

    studenthace 5 años

    No te preocupes, puedes dejar el código como lo tiene el profe. En la siguiente clase crea una función que se llama

    parse_notice
    ahí solo tienes que modificar la línea donde hace la petición a tu sitio así:

    HOME_URL = "https://www.infobae.com/" XPATH_LINK_TO_ARTICLE = '(//div[@class="hidden_desktop"]/h2/a[@class="black_text"])[position() mod 2 = 0]/@href' XPATH_TITLE = '//h1[contains(@class, "article-headline")]/text()' XPATH_SUMMARY = '//h2[contains(@class, "article-subheadline")]/text()' def parse_notice(link, date): try: response = requests.get(f"{HOME_URL}{link}") # Uní el home con el enlace relativo, sin diagonal porque el link ya trae. if response.status_code == 200: notice = response.content.decode("utf-8") parsed = html.fromstring(notice) ... ... ...

    De forma que concatenes el

    HOME_URL
    con
    link
    y así podrás hacer la petición correctamente. No necesité usar ningún paquete de StackOverflow, aunque a futuro podría ser una buena práctica.

    Orlando Guillermo Quintero Calderón

    Orlando Guillermo Quintero Calderón

    studenthace 5 años

    Me pasa lo mismo, pero no entiendo muy bien lo que dicen en StackOverflow. No sé dónde agregar lo que dicen ni qué quitar y ya dañe el código varias veces

    Alan Kevin Fuentes García

    Alan Kevin Fuentes García

    studenthace 5 años

    Hola, igual intenté formar expresiones que pudieran darme ese resultado. No logré nada jaja. Un workaround puede ser obtener las rutas relativas como las obtiene de XPath y en Python agregarles el prefijo del home. En StackOverflow lo hacen de esta forma.

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.