Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/107: Рейтинг темы: голосов - 107, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 22

Написать парсер контента - получить гороскоп на сегодня по конкретному знаку зодиака

19.08.2013, 11:01. Показов 21728. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Решил написать небольшой парсер контента, нужно выдернуть гороскоп на сегодня по конкретному знаку зодиака, сам новичок в php, только начинаю его изучать, посмотрел форумы, и нашел вот такой скрипт, но не могу понять почему не задаются начальные и конечные границы парсинга, он мне весь текст страницы парсит.
Подскажите в чем я ошибся?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
$url = 'http://www.taishet.ru/horoscope/';
$start = '<br><br><b>БЛИЗНЕЦЫ (22 мая - 21 июня)</b><br>';
$finish = '<br><br><b>РАК (22 июня - 23 июля)</b><br>';
function parser($url,$start,$finish) {
 $content = file_get_contents($url);
$position = strpos($content, $start);
$content = substr($content, $position);
$position = strpos($content, $finish);
$content = substr($content, $position);
$content = strip_tags($content, '<p><a>');
//echo nl2br($content);
echo ($content);
return $content;
}
 
parser($url, $start, $finish);
 
?>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.08.2013, 11:01
Ответы с готовыми решениями:

Написать программу, которая по введенной дате рождения человека определит кто он по знаку зодиака
Известно, что астрологи делят год на 12 периодов и каждому из них ставят в соответствие один из знаков Зодиака: Период Знак...

Гороскоп: определить знак Зодиака по дате
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; ...

Составить гороскоп для 12 знаков Зодиака
Составить гороскоп для 12 знаков Зодиака. Предсказания для каждого знака находятся в различных файлах. На экране представить меню с датами...

14
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
19.08.2013, 11:24
Используйте curl

Добавлено через 27 секунд
http://www.koz1024.net/curl-site-parser/
0
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 22
19.08.2013, 11:38  [ТС]
Цитата Сообщение от illya05 Посмотреть сообщение
Используйте curl

Добавлено через 27 секунд
http://www.koz1024.net/curl-site-parser/
Спасибо за подсказку, попробую реализовать через курл
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
19.08.2013, 11:59

Не по теме:

Цитата Сообщение от illya05 Посмотреть сообщение
Используйте curl
точно!
- у меня сгорела оперативка
- купите новый процессор


ili,
PHP
1
2
3
4
5
6
7
8
9
$data = file_get_contents('http://www.taishet.ru/horoscope/');
$data = iconv('cp1251', 'utf-8', $data); // уберите эту строчку, если не используете utf-8
preg_match_all('#<br><br><b>([^<]*+)</b><br>(?>(.*?)(?=<br><br>))#sS', $data, $matches, PREG_SET_ORDER);
//print_r($matches); -- раскоментируйте, чтобы узнать что получилось в массиве
$nl = PHP_SAPI === 'cli' ? "\n" : '<br>'; // это нафиг уберите когда на сервере запускать будете.
foreach ($matches as $m) {
    echo trim($m[1]) . $nl;
    echo trim($m[2]) . $nl . $nl;
}
Добавлено через 15 минут
Цитата Сообщение от ili Посмотреть сообщение
Спасибо за подсказку, попробую реализовать через курл
не ведитесь на это. curl -- просто транспорт, которым можно гибко управлять. отправлять кастомные заголовки, куки, управлять keep-alive соединениями, а возможно он и pipelining умеет.
Если вы не совсем понимаете, что это значит, то представьте себе автомобиль, в котором вы можете приделать новый руль, переделать двигатели, даже крылья (как в Такси-3), колеса поменять... Но зачем все это, если вам нужно просто доехать до ближайшего магазина? не, вы конечно можете, это не возбраняется. Но продукты, которые вы купите в магазине будут одними и теми же, -- они не изменятся. И готовить еду придется в точно такой же последовательности, как если бы вы ехали хоть на гоночной машине, хоть на запорожце, хоть на танке. На конечный результат в данном случае это не влияет.
file_get_contents -- одна строчка, curl -- 5, и подлиннее. выбирать вам, что использовать. в конечном счете результат будет одинаков: вам вернется та же самая страница, что и от file_get_contents. А вот когда у вас будет задача авторизироваться на сервисе, чтобы что-то оттуда вытянуть, или вам нужно по 1000 запросов в секнуду делать будет -- вот тогда уже без curl-я будет тяжеловато
2
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 22
19.08.2013, 14:54  [ТС]
Спасибо за развернутое объяснение, вечером попробую этот скрипт в деле.

Добавлено через 2 часа 52 минуты
NEbO, спасибо огромное, парсер работает отлично, вот я тоько не понял, как мне на странице вывести не весь список полученых гороскопов, а только один знак зодиака? какие переменные мне нужно поменять?
0
 Аватар для Gori4ka
17 / 17 / 6
Регистрация: 08.05.2013
Сообщений: 107
19.08.2013, 16:48
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$data = file_get_contents('http://www.taishet.ru/horoscope/');
$data = iconv('cp1251', 'utf-8', $data); // уберите эту строчку, если не используете utf-8
preg_match_all('#<br><br><b>([^<]*+)</b><br>(?>(.*?)(?=<br><br>))#sS', $data, $matches, PREG_SET_ORDER);
//print_r($matches); -- раскоментируйте, чтобы узнать что получилось в массиве
$nl = PHP_SAPI === 'cli' ? "\n" : '<br>'; // это нафиг уберите когда на сервере запускать будете.
//print_r($matches[2]);
/*
в массиве $matches записаны зодиаки
$matches[2] //близнецы
$matches[2][1]// Название
$matches[2][2]// Описание
*/
echo $matches[2][1];
echo "<br/>" . $matches[2][2];
2
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 22
19.08.2013, 18:00  [ТС]
Gori4ka, спасибо за помощь, все работает.

Добавлено через 44 минуты
Цитата Сообщение от Gori4ka Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$data = file_get_contents('http://www.taishet.ru/horoscope/');
$data = iconv('cp1251', 'utf-8', $data); // уберите эту строчку, если не используете utf-8
preg_match_all('#<br><br><b>([^<]*+)</b><br>(?>(.*?)(?=<br><br>))#sS', $data, $matches, PREG_SET_ORDER);
//print_r($matches); -- раскоментируйте, чтобы узнать что получилось в массиве
$nl = PHP_SAPI === 'cli' ? "\n" : '<br>'; // это нафиг уберите когда на сервере запускать будете.
//print_r($matches[2]);
/*
в массиве $matches записаны зодиаки
$matches[2] //близнецы
$matches[2][1]// Название
$matches[2][2]// Описание
*/
echo $matches[2][1];
echo "<br/>" . $matches[2][2];
Более подробно посмотрел и проверил, и оказалось что последний знак зодиака не парсится, из-за отсутствия тегов </b><br> после гороскопа, как можно это исправить?

Добавлено через 15 минут
Все, спасибо, я разобрался, все работает
0
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
19.08.2013, 22:33
ещё вариант:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$url = 'http://www.taishet.ru/horoscope/';
$start = '<br><br><b>БЛИЗНЕЦЫ (22 мая - 21 июня)</b><br>';
$finish = '<br><br><b>РАК (22 июня - 23 июля)</b><br>';
function parser($url,$start,$finish) {
    $content = file_get_contents($url);
    $position1 = strpos($content, $start);
    $position2 = strpos($content, $finish);
    $content = substr($content, $position1, $position2-$position1);
    $content = strip_tags($content, '<p><a>');
    //echo nl2br($content);
    echo ($content);
    return $content;
}
 
parser($url, $start, $finish);
0
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 22
26.08.2013, 10:00  [ТС]
phpk, спасибо за этот вариант, применил правда тот что изменил Gori4ka, я правда не моге разобраться в строке:
PHP
1
preg_match_all('#<br><br><b>([^<]*+)</b><br>(?>(.*?)(?=<br><br>))#sS', $data, $matches, PREG_SET_ORDER);
Что в ней за какую часть отвечает?
0
27 / 41 / 13
Регистрация: 15.05.2013
Сообщений: 1,313
27.08.2013, 13:21
PHP
1
#<br><br><b>([^<]*+)</b><br>(?>(.*?)(?=<br><br>))#sS
<br><br><b> - это переход на новую строку и выделение жирным шрифтом название зодиака.
([^<]*+) маска, означает все символы кроме < , т.е. название зодиака
(?>(.*?) - это уже описание зодиака
под этот шаблон попадают все знаки, не только Близнецы.
А выражение
PHP
1
2
echo $matches[2][1];
echo "<br/>" . $matches[2][2];
выводит информацию по Близнецам, так этот знак Зодиака записан в массиве [2]
0
3 / 3 / 0
Регистрация: 03.10.2013
Сообщений: 85
03.10.2013, 20:32
Цитата Сообщение от ili Посмотреть сообщение
Gori4ka, спасибо за помощь, все работает.

Добавлено через 44 минуты


Более подробно посмотрел и проверил, и оказалось что последний знак зодиака не парсится, из-за отсутствия тегов </b><br> после гороскопа, как можно это исправить?

Добавлено через 15 минут
Все, спасибо, я разобрался, все работает
Всем добрый день. Помогите разобраться с последним знаком зодиака. Я так и не понял как его парсить без тегов в </b><br> конце. Я еще присвоил каждому знаку картинку, а они вставляются по номеру массива:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$data = file_get_contents('http://www.taishet.ru/horoscope/');
$data = iconv('cp1251', 'utf-8', $data); 
preg_match_all('#<br><br><b>([^<]*+)</b><br>(?>(.*?)(?=<br><br>))#sS', $data, $matches, PREG_SET_ORDER);
preg_match_all('|<br><br><b>([^<]*+)</b><br>|sei', $data, $riba, PREG_SET_ORDER);
preg_match_all('|</b><br>([^<]*+)</td></tr></table>|sei', $data, $ro, PREG_SET_ORDER);
 
$g=-1;
while ($g++<10)
{
echo "<table width='100%' border='0' cellpadding='0'>
  <tr>
    <td><img class='imggrs' src='http://мойсайт/goroscop/$g.png'/></td>
    <td><span class='textgrs'><strong>".$matches[$g][1].'</strong>'.$matches[$g][2]. "</span></td>
  </tr>
</table>";
 
    } 
    echo "<table width='100%' border='0' cellpadding='0'>
  <tr>
    <td><img class='imggrs' src='http://мойсайт/goroscop/11.png'/></td>
    <td><span class='textgrs'><strong>".$riba[11][1].'</strong>'.$ro[0][1]. "</span></td>
  </tr>
</table>";
?>
Все что мне пришло в голову, это добавить 2 строки с preg_match_all для рыб.
preg_match_all('|<br><br><b>([^<]*+)</b><br>|sei', $data, $riba, PREG_SET_ORDER); для парсинга заголовка Рыб.
preg_match_all('|</b><br>([^<]*+)</td></tr></table>|sei', $data, $ro, PREG_SET_ORDER); для парсинга описания Рыб.
Как сделать правильно с Вашей точки зрения, так как я в PHP слаб.
Пример того как я сделал по схеме выше - http://i-grok.ru/goroskop
0
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 11
27.10.2016, 19:06
Ребят парсер СУПЕР - Так вот теперь вопрос такого характера как использовать данный скрипт 2-3-4 раза на одной странице php
Если просто тупо копировать и вставлять то страница уходит в ошибку.
0
2 / 2 / 3
Регистрация: 07.10.2016
Сообщений: 52
30.10.2016, 14:03
Цитата Сообщение от Stalker56 Посмотреть сообщение
Ребят парсер СУПЕР - Так вот теперь вопрос такого характера как использовать данный скрипт 2-3-4 раза на одной странице php
Если просто тупо копировать и вставлять то страница уходит в ошибку.
один вопрос - ЗОЧЕМ?
если правильно понял, ты по 2-3-4 раза парсить собрался одно и то же, что не есть хорошо.
Тебе нужно 1 раз спарсить страницу, а потом вывести результат
0
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 11
31.10.2016, 05:37
а вот для чего. что бы ниже указать стоимость с другого места.
С ДРУГОГО САЙТА.!!!
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[PHP]<table class="tftable"  border="2"  >
 
    <tr>
        <td>
            Заказ из *******- ****
        </td>
        <td>
            Доставка 1-3 дня
        </td>
    
        <td>
<?php
$url = 'http://*****************';
$start = '<div class="price price-big">';
$finish = '<div class="price price-small">';
function parser($url,$start,$finish) {
    $content = file_get_contents($url);
    $position1 = strpos($content, $start);
    $position2 = strpos($content, $finish);
    $content = substr($content, $position1, $position2-$position1);
    $content = strip_tags($content, '');
    //echo nl2br($content);
    echo ($content);
    return $content;
}
 
parser($url, $start, $finish) ;
?>
        </td>
        
        <td>
           Стоимость замены состовляет 1** руб.
        </td>
    </tr>
    
      
    
    <table class="tftable"  border="2"  >
<tr>
     <th>
         <p><img src="/********" width="300" height="200" title="********"></p>
    
     </th>
</tr>
</table>
</table>[/PHP]
0
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 11
01.11.2016, 15:23
В общем я так понял Ты мне ответил так от делать нечего!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2016, 15:23
Помогаю со студенческими работами здесь

Сортировка по по знаку зодиака
Необходимо сделать сортировку по знаку зодиака к данной программе Собственно код using System; using System.Collections.Generic;...

Гороскоп. По дате рождения определить знак зодиака, и в каком году родился пользователь
Привет всем в вба я новичок , и нужно сделать процедуру гороскоп которая спрашивала бы у пользователя дату рождения (день, месяц, год) и по...

Упорядочить записи по знаку зодиака
Здравствуйте, помогите пожалуйста упорядочить записи по знаку зодиака. Облазил все темы но до меня так и не дошло.#include&lt;iostream&gt; ...

Упорядочить строки в массиве по знаку зодиака
Такая программа: #include &lt;iostream.h&gt; class ZNAK { public: char familiya; char imya; char zodiak; int dniuha; ...

Определить какой год по знаку зодиака
Известно, что 2006 год - год Собаки. Вводится номер года от 2000 до 2023. Определить, какой это год по знаку Зодиака. (Использовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru