Học BigData (BD) – Ngày 7

Crawling Oreilly books


import requests, re
import matplotlib.pyplot as plt
from bs4 import BeautifulSoup
from collections import Counter

def book_info(td):
    title = td.find("p", class_="title").a.text
    by_author = td.find('p', class_="note").text
    isbn_link = td.find("p", class_="title").a.get("href")
    date = td.find("p", class_="note date2").text.strip()
    return {"title": title, "author": by_author, "isbn_link": isbn_link, "date": date}
	
def scrape(num_pages=10):
    base_url = "https://ssearch.oreilly.com/?i=1;q=data&act=pg_2;page="
    books = []
    for page_num in range(1, num_pages + 1):
        print ("souping page", page_num)
        url = base_url + str(page_num)
        soup = BeautifulSoup(requests.get(url).text, 'lxml')
        contents = soup.find_all(attrs=("book_text"))
        for content in contents:
                books.append(book_info(content))
    return books
	
def get_year(book):
    temp = book["date"]
    length = len(temp.split())
    return int(book["date"].split()[length-1])
	
def get_year(book):
    return int(book["date"].split()[len(book["date"].split())-1])
	
def plot_years(plt, books):
    year_counts = Counter(get_year(book) for book in books if get_year(book) & get_year(book) <= 2016)
    years = sorted(year_counts)
    book_counts = [year_counts[year] for year in years]
    plt.bar([x - 0.5 for x in years], book_counts)
    plt.xlabel("year")
    plt.ylabel("# of data books")
    plt.title("Data is Big!")
    plt.show()
	
books = scrape()
plot_years(plt, books)

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s