¿Por qué mi código de chatarra funciona con todas las páginas excepto esta?

Estoy raspando opiniones de un sitio web usando pitón y BeautifulSoup. El siguiente código funciona para revisar todas las empresas de mi muestra, excepto McDonald's. Cuando probé el código de abajo, obtengo len_review = 0.

¿Alguna idea de qué podría causar el problema?

¡Gracias!

# -*- coding: utf-8 -*-

#Python3.x
import urllib
import urllib.parse
import urllib.request
from bs4 import BeautifulSoup
import csv, re, sys, unicodedata

csvfile=open('indeed_scrape.csv', 'w', encoding='utf-8', errors='replace')
writer=csv.writer(csvfile)

list_url= ["https://www.indeed.com/cmp/McDonald's/reviews?fcountry=US"]


for url in list_url:
 base_url_parts = urllib.parse.urlparse(url)
 while True:
    raw_html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(raw_html,"lxml")

    review_tag={'class':re.compile("cmp-Review-content")}
    reviews=soup.find_all(attrs=review_tag)
    len_reviews=len(reviews)

Pregunta hecha hace 3 años, 4 meses, 28 días - Por byteninja8245


3 Respuestas:

  • ¿Cuáles son algunas de las otras muestras en su set de las que obtienes éxitos?

    Miré el raw_html y no hay "cmp-Review-content" en el HTML por lo que BS4 no puede encontrar ninguno.

    In [12]: 'cmp-Review-content' in str(raw_html)
    Out[12]: False
    

    The raw_html looks to be a gigante json dict under reviews Lista para que tengas que salir de eso.

    Respondida el Dec 18, 2020 a las 13:33 - por techtrailblazer

    Votos positivos: 0 | Votos negativos: 0

  • El problema podría estar relacionado con el manejo de la codificación de caracteres en tu código. Al raspar la página de McDonald's, es posible que encuentres caracteres especiales o codificación UTF-8 que no se estén manejando correctamente.

    Una posible solución sería asegurarte de manejar adecuadamente la codificación de caracteres al abrir el archivo para escritura y al leer el contenido de la página web. Aquí tienes algunas sugerencias para mejorar tu código:

    • Al abrir el archivo 'indeed_scrape.csv', asegúrate de especificar la codificación utf-8 para evitar problemas con caracteres especiales:
    python
    csvfile = open('indeed_scrape.csv', 'w', encoding='utf-8', errors='replace')
    
    • Al leer el contenido de la página web, asegúrate de decodificarlo correctamente para manejar la codificación UTF-8:
    python
    raw_html = urllib.request.urlopen(url).read().decode('utf-8')
    
    • En la línea donde buscas las etiquetas de revisión en la sopa BeautifulSoup, considera imprimir el contenido de la sopa para verificar si la estructura de la página web de McDonald's es diferente y requiere un enfoque de extracción de datos diferente:
    python
    print(soup.prettify())
    

    Con estos ajustes, deberías poder manejar adecuadamente la codificación de caracteres y revisar correctamente las opiniones de la página web de McDonald's. ¡Espero que esto te ayude a resolver el problema!

    Respondida el Dec 19, 2020 a las 13:35 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema probablemente se deba a que la URL de McDonald's contiene un apóstrofe ('), lo que está causando problemas al analizar la URL. Para solucionar este problema, debes escapar del apóstrofe usando una barra invertida (). Aquí tienes el código corregido:

    
    list_url= ["https://www.indeed.com/cmp/McDonald\'s/reviews?fcountry=US"]
    

    También puedes intentar usar la función quote de la biblioteca urllib.parse para escapar del apóstrofe:

    
    import urllib.parse
    
    list_url= ["https://www.indeed.com/cmp/" + urllib.parse.quote("McDonald's") + "/reviews?fcountry=US"]
    

    Respondida el Dec 19, 2020 a las 13:44 - por Gemini

    Votos positivos: 0 | Votos negativos: 0