Здесь пробуем, как patterns парсит delicious. Вариант скрипта работает, но "на коленке". Пока надо осмыслить, что можно (и нужно ли) делать с разовой загрузкой RSS в пост.
По крайней мере, теперь можно собирать ссылки с разных компьютеров, а потом вставлять подборки ссылок в посты.
По крайней мере, теперь можно собирать ссылки с разных компьютеров, а потом вставлять подборки ссылок в посты.
По плану мне надо было бы попрактиковаться с PDB iPDB. Но организм ищет предлоги, чтобы не садится за компьютер..., а если уж сел, то смотреть видео..., а не кодировать...
Устал? Наверное... Последние недели я пытался "решить" (точнее освоить) инфраструктурные задачи. Мне пришлось "отвлечься" на установку Kali Persistence, книжку про Git..., дебаггинг и дебаггеры...
И все шло своим чередом, но предыдущую неделю все пришлось делать при нехватке кислорода (грипп, забитый нос, хрипящие бронхи...). Вчера я целый день занимался тем, что публиковал посты, которые накопились за две недели на двух компьютерах. Получилось около 20 "гриппозных постов" - достаточно отрывистых и неполных...
Я понимаю, что здесь я только учусь... и пишу эти посты для себя... Но и в этом случае желательно собрать все "базовые" материалы по теме в одном-двух постах.
А у меня (последние 10 дней) идет работа с двух компьютеров. И качество "учебных" постов снизилось. Надо срочно принимать новый стандарт оформления поста. Здесь я хочу попробовать возможности Patterns.
Устал? Наверное... Последние недели я пытался "решить" (точнее освоить) инфраструктурные задачи. Мне пришлось "отвлечься" на установку Kali Persistence, книжку про Git..., дебаггинг и дебаггеры...
И все шло своим чередом, но предыдущую неделю все пришлось делать при нехватке кислорода (грипп, забитый нос, хрипящие бронхи...). Вчера я целый день занимался тем, что публиковал посты, которые накопились за две недели на двух компьютерах. Получилось около 20 "гриппозных постов" - достаточно отрывистых и неполных...
Я понимаю, что здесь я только учусь... и пишу эти посты для себя... Но и в этом случае желательно собрать все "базовые" материалы по теме в одном-двух постах.
А у меня (последние 10 дней) идет работа с двух компьютеров. И качество "учебных" постов снизилось. Надо срочно принимать новый стандарт оформления поста. Здесь я хочу попробовать возможности Patterns.
Этот пост я написал неделю назад, а потом "забыл про него"..., и вспомнил случайно... не публиковал, поскольку надо было выдать "окончательный" вариант скрипта, а его "не было"... Точнее понимал, что такой скрипт показывать "стыдно", а времени на написание приличного не было... вот он - рефакторинг... как с ним быть?
Ееще один вопрос, как не терять эти мои полуфабрикаты? ... Issues, bugtrackers...? SCRUM... нужна система управления вопросами .... Почему не попробовать мою коллекцию планнеров?
Ееще один вопрос, как не терять эти мои полуфабрикаты? ... Issues, bugtrackers...? SCRUM... нужна система управления вопросами .... Почему не попробовать мою коллекцию планнеров?
Первоисточники¶
В этом блоге: Статья "Web Scraping" - заготовка для изучения библиотеки Patterns и ...
Pattern is a web mining module for the Python programming language
Репозиторий на GitHub
Pattern is a web mining module for the Python programming language
Репозиторий на GitHub
Установка¶
In []:
C:\Users\kiss\Anaconda>pip install pattern
Downloading/unpacking pattern
Running setup.py (path:c:\users\kiss\appdata\local\temp\pip_build_kiss\pattern\setup.py) egg_info for package pattern
Installing collected packages: pattern
Running setup.py install for pattern
Successfully installed pattern
Cleaning up...
C:\Users\kiss\Anaconda>
Разбираем пример из статьи "Web Scraping"¶
In [1]:
import pattern.web
url = 'http://rss.nytimes.com/services/xml/rss/nyt/World.xml'
results = pattern.web.Newsfeed().search(url, count=5)
results
print '%s \n\n %s \n\n %s \n\n' % (results[0].url, results[0].title, results[0].description)
In [6]:
from IPython.display import HTML, Image
In [7]:
HTML(results[0].description)
Out[7]:
Такое впечатление, что все работает... просто картинки здесь по 1 пикселу. Они все грузятся на страницу и "портят форматирование абзаца", поэтому мы и видим столько пустого места. Можно код посмотреть, но... Разбираться с ними лень. Лучше попробуем парсить фиды с delicious.
In [19]:
for i in [0,1,2,3,4]:
print results[i].title
Пробуем парсить RSS c закладками на Delicious¶
In [21]:
url_d = 'http://delicious.com/v2/rss/altersego2007/scraping'
results_d = pattern.web.Newsfeed().search(url_d, count=5)
results_d
print '%s \n\n %s \n\n %s \n\n' % (results_d[0].url, results_d[0].title, results_d[0].description)
In [22]:
results_d[1]
Out[22]:
In [51]:
str=''
for i in [0,1,2,3,4]:
str=str + '<a href='+ results_d[i].url + ' target="_blank">' + 'ref ' + results_d[i].title + '</a><br/>'
HTML(str)
Out[51]:
Первые ошибки парсинга выскакивают сразу же, но они очень "полезные"¶
Здесь выскочила ошибка - третья и пятая строки были отдельно от ссылок. Оказалось, что ссылки заканчивались на '/' (как в примере ниже - u'http://www.marketing2oh.com/scrape-serps-for-seo-analysis/') и в строчке получалось '/>', что тег ссылки закрывается раньше, чем начинается текст. Браузер при этом игнорировал "штатный" закрывающий тег ссылки... Вставил target="_blank" в конец строки...
In [45]:
results_d[2]
Out[45]:
Итак, все работает. Пока не удалось использовать возможности форматирования строк Python, но думаю, что в крайнем случае, сделаю так, как здесь
In [86]:
import pattern.web
# We have to determine 'tag1+tag2+tag3' for delicious
# And number of items for parsing from RSS
number=3
tags='scrapy'
url = 'http://delicious.com/v2/rss/altersego2007/' + tags
results = pattern.web.Newsfeed().search(url, count=number)
str=''
for i in [0,1,2]:
str = str + '<br/><a href='+ results[i].url + ' target="_blank">' + 'ref ' + results[i].title + '</a> ' + results[i].text
HTML(str)
Out[86]:
In [53]:
%debug
Итак, идея проверена, в 60 ячейке первая сборка всего вместе. Закоментировал заголовок. нельзя его вставлять в HTML(). Кроме того, надо знать точно, сколько элементов парсится с сайта. Если их меньше 5-ти, то выскакивает ошибка out of range... Словом, все сыро, но работает.
In [64]:
%gui ?
In [65]:
%qtconsole
После экспериментов с консолью я немного изменил код. По сути осталась только одна задача looping. Надо читать документацию. ...Не сдержался, почитал, вот как все просто:
In [101]:
str=''
for result in results:
str = str + '<br/><a href='+ result.url + ' target="_blank">' + 'ref ' + result.title + '</a> ' + result.text
Придумал переменную "result" и этого оказалось достаточно. Теперь проверим, что у нас получилось:
In [102]:
HTML(str)
Out[102]:
Вот "последний" вариант (но не окончательный) для копипаста в последующие посты¶
In []:
from IPython.display import HTML, Image
import pattern.web
# We have to determine 'tag1+tag2+tag3' for delicious
# And number of items for parsing from RSS
number=3
tags='scrapy'
url = 'http://delicious.com/v2/rss/altersego2007/' + tags
results = pattern.web.Newsfeed().search(url, count=number)
str=''
for result in results:
str = str + '<br/><a href='+ result.url + ' target="_blank">' + 'ref ' + result.title + '</a> ' + result.text
HTML(str)
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий