Пост для пользователей Python и тех, кто занимается парсингом контента из интернета.
Недавно я показывал, как скачиваю / парсю вакансии с сайта ХХ.ру Как я скачиваю вакансии компаний с HH.ru (на примере Газпрома), сейчас я хочу показать, как можно скачивать тексты постов блогов платформы blogspot, т.е. как я могу скачать свой блог и покажу это на своем блоге.
Текст блога может быть использован в исследовании широкого класса задач, связанных с анализом текста.
Итак
Недавно я показывал, как скачиваю / парсю вакансии с сайта ХХ.ру Как я скачиваю вакансии компаний с HH.ru (на примере Газпрома), сейчас я хочу показать, как можно скачивать тексты постов блогов платформы 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))Здесь
- 1020819187099399113 - ID блога, который вы хотите скачать
- max-results=50 - я сделал 50, но максимальное значение 500. И это плохо для блогов, где более 500 постов, но для это есть гиперпараметр
- 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 г. Провокативный пост на самом деле.Я провож...Пользуйтесь на здоровье. Формат выгрузки можно менять, т.е. вместо переменной Дата можно поставить автора, а дату в другом формате, но это уже детали, их можно менять.
__________________________________________________________
На этом все, читайте нас в фейсбуке, телеграмме и вконтакте
Комментариев нет:
Отправить комментарий