Парсер моего блога

категория: Python 3
Разбирался с BeautifulSoup и решил для фана спарсить все статьи своего блога и засунуть все данные в Excel. Оказалось это довольно простой задачей и очень даже интересной. В этой задаче мне помогли библиотеки Requests, BeautifulSoup и csv, поставим их в окружение питона 3:
pip install requests beautifulsoup4
С моего блога стащить инфу очень просто, на странице архива записей есть все ссылки на мои статьи. Поэтому остается только зайти по ссылке и извлечь информацию. 1. С помощью requests.get() вытягиваю html страницы "Архив статей" 2. С помощью BeautifulSoup() преобразую html в объект bs4 3. Дальше в цикле захожу по всем ссылкам и вытягиваю "Название", "Категория", "Текст" с помощью обычных методов bs 4. Записую список с данными в файл формата .csv Залью весь код сюда, он довольно понятен (я так думаю), если будут вопросы - спрашивайте.
#! coding: utf-8
import csv
#
from requests import get
from bs4 import BeautifulSoup
#
#
def get_soup():
    """
    Return soup object
    """
    r = get('http://www.acman.ru/blog/archive/')
    return BeautifulSoup(r.text)
#
#
def get_title(url):
    """
    Return title of the article
    """
    return url.string
#
#
def get_category(link_soup):
    """
    Return category name
    """
    all_a = link_soup.find_all('a')
    for a in all_a:
        if a.parent.name == 'h3':
            return a.string
#
#
def get_text(link_soup):
    """
    Return text of the article
    """
    text = ''
    all_p = link_soup.find_all('p')
    for p in all_p:
        if p.find_parent('div', "entry"):
            text += p.text
    return text
#
#
def parser():
    """
    Return list of title,
    category and text of all articles
    """
    data = [['№', 'Название', 'Категория', 'Текст'], ]
    soup = get_soup()
    for url_index, url in enumerate(soup.select('#content a')):
        link = url.get('href')
        if link:
            # I dont make absolute urls then :)
            article = 'http://acman.ru/%s' % link
            link_soup = BeautifulSoup(get(article).text)
            data.append([url_index+1,
                         get_title(url),
                         get_category(link_soup),
                         get_text(link_soup)])
    return data
#
#
def write2csv():
    """
    Write data to csv file
    """
    with open('acman.csv', 'w') as f:
        writer = csv.writer(f, delimiter=',')
        writer.writerows(parser())
#
if __name__ == '__main__':
    write2csv()


blog comments powered by Disqus