Share |

четверг, 29 марта 2018 г.

Как скачивать / парсить тексты постов блога blogspot



Пост для пользователей Python и тех, кто занимается парсингом контента из интернета.
Недавно я показывал, как скачиваю / парсю вакансии с сайта ХХ.ру Как я скачиваю вакансии компаний с HH.ru (на примере Газпрома), сейчас я хочу показать, как можно скачивать тексты постов блогов платформы blogspot, т.е. как я могу скачать свой блог и покажу это на своем блоге.
Текст блога может быть использован в исследовании широкого класса задач, связанных с анализом текста.
Как скачивать / парсить тексты постов блога blogspot

Итак

Необходимые пакеты


import pandas as pd 
import feedparser
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
Вам надо будет установить библиотеки, которых нет по дефолту.

Сам парсинг

Первый шаг - нам необходимо получить урлы всех постов в блоге, а уже по ним скачивать содержание. И урлы мы скачиваем так.
urla = []
url = feedparser.parse('https://www.blogger.com/feeds/1020819187099399113/posts/default?redirect=false&start-index=1&max-results=50')
for x in url.entries:
    urla.append(str(x.link))
Здесь
  1. 1020819187099399113 - ID блога, который вы хотите скачать 
  2. max-results=50 - я сделал 50, но максимальное значение 500. И это плохо для блогов, где более 500 постов, но для это есть гиперпараметр 
  3. start-index=1 - если указано 1, значит вы с последнего поста начинаете отматывать парсинг, поэтому, когда вы скачали 500 постов, ставите 500 (или 501?) и продолжаете парсинг

urla = pd.Series(urla)
зачем то я полученный лист оборачиваю в формат series. И далее создаю переменную дата

Дата

date = []
# создаю переменную дата
for i, idbank in enumerate(urla):
    html = urlopen(idbank)
    bsObj = BeautifulSoup(html, "html.parser")
    nameList = bsObj.findAll("h2", { 'class':"date-header"  })
    date.append(nameList)
Нам надо очистить дату от тегов и прочего мусора, я это делаю так.
df = pd.DataFrame({'date':date})
df['date'] = df['date'].apply(lambda x: (re.sub(r'<.*?>', '', str(x))))
df['date'] =  df['date'].str.strip('[]')
df['date'] 
И мы получаем вот такой вид даты
0           вторник, 27 марта 2018 г.
1       воскресенье, 25 марта 2018 г.
2       понедельник, 19 марта 2018 г.
3       воскресенье, 18 марта 2018 г.
4           четверг, 15 марта 2018 г.
5           вторник, 13 марта 2018 г.
6       воскресенье, 11 марта 2018 г.
Это необязательная переменная, я ее добавил просто в качестве примера.


Текст постов

скачиваем так
art = []
for i, idbank in enumerate(urla):
    html = urlopen(idbank)
    bsObj = BeautifulSoup(html, "html.parser")
    nameList = bsObj.findAll("div", {"dir":"ltr", "style":"text-align: left;", "trbidi":"on"})
    art.append(nameList)
bsObj.findAll("div", {"dir":"ltr", "style":"text-align: left;", "trbidi":"on"}) - вот эта запись может быть не единственным вариантом скачивания / парсинга теста поста, я не придумал ничего более умного. И текст тоже надо причесать
df['text'] = art
df['text'] = df['text'].apply(lambda x: (re.sub(r'<.*?>', '', str(x))))
df['text'] = df['text'].str.strip('[]')
rem = {'\(adsbygoogle = window.adsbygoogle \|\| \[]\)\.push\({}\);': ''}
df['text'].replace(rem, regex=True, inplace=True)
df['text'] = df['text'].replace('\n', '', regex = True)
df['text']
Вот над этим шедевром я поработал основательно)) rem = {'\(adsbygoogle = window.adsbygoogle \|\| \[]\)\.push\({}\);': ''} в итоге получаем
0     Перевод статьи 3 Behaviors That Drive Successf...
1     Вдохновившись переводамистатей на тему Organiz...
2     Для тех, кто хочет погрузитьсяв статистическое...
3     Перевод статьи Case Study: Using ONA to Identi...
4          Провокативный пост на самом деле.Я провож...
5     Перевод статьи Consumer-goods giant Unilever h...
6     Перевод статьи The 4 Trends Changing How You H...
7          Провел опрос в телеграм канале HR-аналити...
Обращаю ваше внимание, что я ставил задачу парсить скачивать только текст постов, если вы хотите качать целые посты, то надо отказаться от очистки от тегов. Ну и т.п.
Ну или вместе это выглядит так
df
df
      date                                       text
0 вторник, 27 марта 2018 г.     Перевод статьи 3 Behaviors That Drive Successf...
1 воскресенье, 25 марта 2018 г. Вдохновившись переводамистатей на тему Organiz...
2 понедельник, 19 марта 2018 г. Для тех, кто хочет погрузитьсяв статистическое...
3 воскресенье, 18 марта 2018 г. Перевод статьи Case Study: Using ONA to Identi...
4 четверг, 15 марта 2018 г.     Провокативный пост на самом деле.Я провож...
Пользуйтесь на здоровье. Формат выгрузки можно менять, т.е. вместо переменной Дата можно поставить автора, а дату в другом формате, но это уже детали, их можно менять.



__________________________________________________________
На этом все, читайте нас в фейсбукетелеграмме и вконтакте

Комментариев нет:

Отправить комментарий

Популярные сообщения

п