<jupyter_start><jupyter_text>Este jupyter notebook nos ayudará a entender qué es hacer web scraping en una página web desde un punto de vista práctico. El contenido de este jupyter notebook ha sido adaptado del capítulo 8 del libro de texto ***Getting Started with Beautiful Soup*** de <NAME> (2014).  Primer Paso:  Definir cuál es la página web desde donde vamos a extraer los datosAquí vamos a utilizar la página web [packtpub.com](https://www.packtpub.com/). Sobre esta página el scraper que construiremos nos permitirá extraer los datos del precio de una lista de libros vendidos en esa página web y buscar en otras páginas como [amazon.com](www.amazon.com) o [barnes and nobles](www.barnesandnobles.com) empleando el ISBN de cada libro (el ISBN de un libro es el equivalente a la cédula de identidad de una persona. Ayuda a identificar inequívocamente al libro).  Segundo Paso: Explorar el contenido de la página web En este caso, solo vamos a concentrarnos en el título de cada libro, su precio de venta y su ISBN. Para explorar el contenido, primero ingresamos a la página web con un navegador y miramos su contenido como lo hacemos usualmente.<jupyter_code>import urllib.request
import re
from bs4 import BeautifulSoup
packtpub_url = 'www.packtpub.com/all-products/all-books/'
def get_bookurls(url):
    page = urllib.request.urlopen(url)
    soup_packtpage = BeautifulSoup(page, 'lxml')
    page.close()
    next_page_li = soup_packtpage.find("li", class_="pager-nextlast")
    if next_page_li is None:
        next_page_url = None
    else:
            next_page_url = packtpub_url+next_page_li.a.get('href')
            
    return next_page_url
start_url = "www.packtpub.com/all-products/all-books/"
continue_scrapping = True
books_url = [start_url]
while continue_scrapping:
    next_page_url = get_bookurls(start_url)
    if next_page_url is None:
        continue_scraping = False
    else:
        books_url.append(next_page_url)
    start_url = next_page_url
def get_bookdetails(url):
    page = urllib2.urlopen(url)
    soup_packtpage = BeautifulSoup(page,"lxml")
    page.close()
    all_books_table = soup_packtpage.find("table",class_="views-view-grid")
    all_book_titles =all_books_table.find_all("div",class_="views-field-title")
    isbn_list = []
    for book_title in all_book_titles:
        book_title_span = book_title.span
        print("Title Name:"+book_title_span.a.string)
        print("Url:"+book_title_span.a.get('href'))
        price = book_title.find_next("div",class_="views-field-sell-price")
        print("PacktPub Price:"+price.span.string)
        isbn_list.append(get_isbn(book_title_span.a.get('href')))
    return isbn_list
def get_isbn(url):
    book_title_url = packtpub_url + url
    page = urllib2.urlopen(book_title_url)
    soup_bookpage = BeautifulSoup(page,"lxml")
    page.close()
    isbn_tag = soup_bookpage.find('b',text=re.compile("ISBN :"))
    return isbn_tag.next_sibling<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0889487870619946, 'fraction_numerical': 0.0026954177897574125, 'mean_word_length': 4.236331569664903, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 6, 'https://': 1, 'lorem ipsum': 0, 'www.': 5, 'xml': 3}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '583692', 'license': 'MIT', 'n_tokens_mistral': 1025, 'n_tokens_neox': 1034, 'n_words': 274, 'path': 'Web scraping packpub.ipynb', 'repo_name': 'jcorrean/mypythonadventure', 'size': '2977'}