Extrayendo información de Stack Overflow con BeautifulSoup no arroja resultados.
Tengo el siguiente código aquí:
url = f"https://stackoverflow.com/search?q=%22python+help%22"
async def scrape():
async with aiohttp.ClientSession() as session:
async with session.get(url) as r:
soup = BeautifulSoup(await r.read(), features="lxml")
<pre><code>questions = soup.findAll("div", {"class": "flush-left js-search-results"})[0]
</code></pre>
<p>asyncio.run(scrape())
Pero devuelve un IndexError
para questions. Aunque cuando inspecciono la página, claramente tiene un div
con la clase flush-left js-search-results
.
davy.ai
El
IndexError
podría ser causado por:findAll
devolverá una lista vacía, lo que provocaría unIndexError
cuando intentamos acceder al primer elemento (índice 0).El índice está fuera de rango: si el método
soup.findAll
devuelve menos elementos que el índice al que estamos intentando acceder (en este caso, el índice 0), entonces obtendremos unIndexError
.Para solucionar el problema, podemos intentar:
questions
para ver si está vacía o no:Inspeccionar el HTML más de cerca para ver si hay alguna sutileza que hayamos pasado por alto. Por ejemplo, ¿el nombre de la clase es exactamente
"flush-left js-search-results"
o hay algún espacio en blanco u otros atributos que hayamos pasado por alto?Considerar el uso de un método diferente para extraer el elemento deseado, como
find
ofind_all
con diferentes argumentos, o usar un selector CSS.Si todo lo demás falla, buscar ayuda en la comunidad de Stack Overflow o en un colega con más experiencia en web-scraping.