|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 64397.8568 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
17.11.2011, 04:05
|
#1
|
главный злодей гофака
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953648
|
WP выдрать посты
Может кто писал аналогичную функцию. Как без лишнего мусора выдрать чисто текст последних 10 постов с главной страницы ? (учитывая, что фид отдаёт только обрезанный вариант)
__________________
|
|
|
17.11.2011, 04:20
|
#2
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
в теории и при худшем раскладе нужны:
1) сайт-кравлер с правилами сбора ссылок на посты
2) xpath-парсер
при лучшем:
1) for($pageid=1; $pageid<1000; $pageid++)
2) regexp-парсер
|
|
|
17.11.2011, 04:24
|
#3
|
главный злодей гофака
Регистрация: 18.06.2007
Сообщений: 5,760
Бабло: $953648
ТС -->
|
ТС
где начало поста можно понять по куску текста из фида, а вот конец походу придется искать перебором списка тегов
__________________
|
|
|
17.11.2011, 04:43
|
#4
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Цитата:
Сообщение от sspy
где начало поста можно понять по куску текста из фида, а вот конец походу придется искать перебором списка тегов
|
да нее, там один родительский тег будет, что-то типа: <div class="entry-content">
на xpath'е это будет примерно так:
Код:
/html/body/div/div/div/div/article/div
или даже так:
Код:
//div[@class="entry-content"]
только предварительно надо причесать html, например, с помощью tidy
ну кто-то регекспами мучается, но там тоже не особо сложно, если знаешь название класса дива и теги, рядом с которым он закрывается - там комменты, они тоже имею свои идентификаторы. Но если на сайте сильный анти-парс, то придется писать парсер по типу того, что в моем соседнем топике )
|
|
|
17.11.2011, 09:50
|
#5
|
Senior Member
Регистрация: 25.06.2011
Сообщений: 1,804
Бабло: $371785
|
Цитата:
Сообщение от chesser
да нее, там один родительский тег будет, что-то типа: <div class="entry-content">
на xpath'е это будет примерно так:
Код:
/html/body/div/div/div/div/article/div
или даже так:
Код:
//div[@class="entry-content"]
|
не, там проблема в том, что в каждом шаблоне у WP свои теги, каждый лепит во что горазд, поэтому под каждый блог приходится парсер заново настраивать. он правильно сказал, что для начала поста лучше всего отталкиваться от первого предложение из RSS, только надо еще учитывать, что некоторые плагины формируют мета-теги (keywords и desc например) тоже исходя из первых нескольких слов поста.
|
|
|
17.11.2011, 10:48
|
#6
|
Особый статус
Регистрация: 19.02.2009
Сообщений: 117
Бабло: $34435
|
удали все теги которые для разметки текста . вырежи мусор .
собери содержимое оставшихся тегов в массив . выбери самый крупный кусок текста . % на 98 это и есть статья . название из тайтла или h1 возьми. остальное подпили в процессе использования.
|
|
|
17.11.2011, 11:15
|
#7
|
Senior Member
Регистрация: 28.05.2009
Сообщений: 1,321
Бабло: $164090
|
Цитата:
Сообщение от business-net
удали все теги которые для разметки текста . вырежи мусор .
собери содержимое оставшихся тегов в массив . выбери самый крупный кусок текста . % на 98 это и есть статья . название из тайтла или h1 возьми. остальное подпили в процессе использования.
|
Бля, ты вообще читал посты выше? о_0
|
|
|
17.11.2011, 12:03
|
#8
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Цитата:
Сообщение от den2099
не, там проблема в том, что в каждом шаблоне у WP свои теги, каждый лепит во что горазд, поэтому под каждый блог приходится парсер заново настраивать. он правильно сказал, что для начала поста лучше всего отталкиваться от первого предложение из RSS, только надо еще учитывать, что некоторые плагины формируют мета-теги (keywords и desc например) тоже исходя из первых нескольких слов поста.
|
это решаемо, т.к. текстовый процессор вп все равно придерживается структуры и можно будет сделать по типу:
//div[*[contains(text(), 'текст из rss')]]
ну несколько шаблончиков забацать, пусть пусть перебирает.
PHP код:
<?php $text = file_get_contents('http://chesser.ru/blog/'); $doc = new DOMDocument(); @$doc->loadHTML($text); $xpath = new DOMXpath($doc); $nodes = $xpath->query("//div[*[contains(text(),'вопросам и предложениям воспользуйтесь')]]"); if($nodes->length > 0) echo $nodes->item(0)->nodeValue; else echo 'ХУЙ';
работает, хуле alcy:
|
|
|
17.11.2011, 12:07
|
#9
|
Senior Member
Регистрация: 25.06.2011
Сообщений: 1,804
Бабло: $371785
|
Цитата:
Сообщение от chesser
это решаемо, т.к. текстовый процессор вп все равно придерживается структуры и можно будет сделать по типу:
//div[*[contains(text(), 'текст из rss')]]
ну несколько шаблончиков забацать, пусть пусть перебирает.
|
а если шаб не на дивах?
|
|
|
17.11.2011, 12:43
|
#10
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
Цитата:
Сообщение от den2099
а если шаб не на дивах?
|
их меньше, в основном все на дивах.
я не пытаюсь доказать, что можно и очень просто создать универсальный парсер, который будет парсить любой вордпресс, или по любому сайту определять, что это вордпресс и тд. Это уже задачи из разряда распознавания образов. но к примеру выдернуть нужный текст, которого сосредоточено много в одном месте - вполне решаемая задача даже на произвольном сайте
|
|
|
|