with tutorial script scraping how from examples data python python-3.x web-scraping beautifulsoup bs4

python - tutorial - cómo usar todo el método de BS4 para raspar ciertas cadenas



web scraping tutorial (1)

<li class="sre" data-tn-component="asdf-search-result" id="85e08291696a3726" itemscope="" itemtype="http://schema.org/puppies"> <div class="sre-entry"> <div class="sre-side-bar"> </div> <div class="sre-content"> <div class="clickable_asdf_card" onclick="window.open(''/r/85e08291696a3726?sp=0'', ''_blank'')" style="cursor: pointer;" target="_blank">

Necesito tomar la cadena ''/ r / 85e08291696a3726? Sp = 0'' que ocurre en una página. No estoy seguro de cómo usar el método soup.find_all para hacer esto. Las cadenas que necesito siempre ocurren al lado de ''

Esto es lo que estaba pensando (abajo) pero obviamente estoy obteniendo los parámetros incorrectos. ¿Cómo formatearé el método find_all para devolver las cadenas ''/ r / 85e08291696a3726? Sp = 0'' a lo largo de la página?

for divsec in soup.find_all(''div'', class_=''clickable_asdf_card''): print(''got links'') x=x+1

Leí la documentación de bs4 y estaba pensando en usar find_all (''clickable_asdf_card'') para encontrar todas las apariciones de la cadena que necesito, pero ¿qué? ¿Hay alguna forma de ajustar los parámetros para devolver la cadena que necesito?


Use la búsqueda de expresiones regulares integrada de BeautifulSoup para buscar y extraer la subcadena deseada de un valor de atributo onclick :

import re pattern = re.compile(r"window/.open/(''(.*?)'', ''_blank''/)") for item in soup.find_all(onclick=pattern): print(pattern.search(item["onclick"]).group(1))

Si solo hay un elemento único que desea buscar, use find() lugar de find_all() .