Primeros pasos con el raspado web

Web Scraping en Python (usando BeautifulSoup)

Al realizar tareas de ciencia de datos, es común querer usar datos que se encuentran en Internet. Por lo general, podrá acceder a estos datos a través de una interfaz de programación de aplicaciones (API) o en otros formatos. Sin embargo, hay ocasiones en las que solo se puede acceder a los datos que desea como parte de una página web. En casos como este, entra en escena una técnica llamada web scraping. Para aplicar esta técnica para obtener datos de páginas web, necesitamos tener conocimientos básicos sobre la estructura de la página web y las etiquetas utilizadas en el desarrollo de la página web (es decir, <html>,<li>,<div> etc.,). Si eres nuevo en el desarrollo web, puedes aprenderlo aquí.

Entonces, para comenzar con el desguace web, usaremos un sitio web simple. Usaremos el módulo requests para obtener el contenido de la página web O el código fuente.

import requests
page = requests.get("http://dataquestio.github.io/web-scraping-pages/simple.html")
print (page.content) ## shows the source code

Ahora usaremos el módulo bs4 para desechar el contenido y obtener los datos útiles.

from bs4 import BeautifulSoup
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify()) ##shows source in html format

Puede encontrar las etiquetas requeridas usando la herramienta inspeccionar elemento en su navegador. Ahora digamos que desea obtener todos los datos almacenados con la etiqueta <li>. Luego puede encontrarlos con el script

soup.find_all('li')
# you can also find all the list items with class='ABC'
# soup.find_all('p', class_='ABC')
# OR all elements with class='ABC'
# soup.find_all(class_="ABC")
# OR all the elements with class='ABC'
# soup.find_all(id="XYZ")

Luego puede obtener el texto en la etiqueta usando

for i in range(len(soup.find_all('li'))):
    print (soup.find_all('li')[i].get_text())

Todo el guión es pequeño y bastante simple.

import requests
from bs4 import BeautifulSoup

page = requests.get("http://dataquestio.github.io/web-scraping-pages/simple.html") #get the page
soup = BeautifulSoup(page.content, 'html.parser') # parse according to html
soup.find_all('li') #find required tags

for i in range(len(soup.find_all('li'))):
    print (soup.find_all('li')[i].get_text())