Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Парсинг страницы в цикле
Форумы портала PHP.SU » PHP » Регулярные выражения » Парсинг страницы в цикле

Страниц (1): [1]
 

1. GFox - 22 Марта, 2010 - 03:52:25 - перейти к сообщению
Доброго времени суток, уважаемые
Помогите пожалуйста решить задачу.
В базе хранятся id пользователей, нужно подставить из это базы id в ссылку которая потом парсится. Скрипт должен в цикле пропарсить всех пользователей (страничка ода id в ссылке разные) и записать данные в другую базу, где id совпадает с id, который вставлялся в ссылку для парсинга
Собственно я все написал, у меня проблема с циклом и добавление id пользователя в ссылку для парсинга, в первый раз такое делаю
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. include ("passwd/connect.php");/*Соединяемся с базой*/
  4. if (isset($_GET['idp'])) {$idp = $_GET['idp'];}
  5. if (!isset($idp))
  6.  
  7. $result = mysql_query ("SELECT idp FROM users");
  8. $myrow = mysql_fetch_array($result);
  9. do {
  10.  
  11. $html = file_get_contents(http://www.ganjawars.ru/info.php?id=%s)",$myrow["idp"]);
  12. }
  13. while ($myrow = mysql_fetch_array ($result));
  14.  
  15.  
  16. preg_match_all ('|<font color=#990000>(\d+.+)\((.*?)\)|', $html, $ma);
  17. preg_match_all ('|<b>(\d+.+)\((.*?)\)|', $html, $maa);
  18.  
  19.  
  20.  
  21.  
  22.  
  23. list($bu)=$maa[1][1];
  24. list($bo)= $maa[2][1];
  25. list($eu)= $maa[1][2];
  26. list($eo)=$maa[2][2];
  27. list($pu)=$maa[1][3];
  28. list($po)=$maa[2][3];
  29. list($vpistolu)=$ma[1][0];
  30. list($vpistolo)=$ma[2][0];
  31. list($vgrenu)=$ma[1][1];
  32. list($vgreno)=$ma[2][1];
  33. list($vavtou)=$ma[1][2];
  34. list($vavtoo)=$ma[2][2];
  35. list($vpulu)=$ma[1][3];
  36. list($vpulo)=$ma[2][3];
  37. list($vdrobu)=$ma[1][4];
  38. list($vdrobo)=$ma[2][4];
  39. list($vsnipu)=$ma[1][5];
  40. list($vsnipo)=$ma[2][5];
  41.  
  42. if (isset($_POST['idp']))  {$idp = $_POST['idp'];}
  43. if (isset($_POST['nik']))  {$nik = $_POST['nik'];}
  44. if (isset($_POST['bu ']))  {$bu = $_POST['bu'];}
  45. if (isset($_POST['bo']))   {$bo = $_POST['bo'];}
  46. if (isset($_POST['eu']))   {$eu = $_POST['eu'];}
  47. if (isset($_POST['eo']))   {$eo = $_POST['eo'];}
  48. if (isset($_POST['pu']))   {$pu = $_POST['pu'];}
  49. if (isset($_POST['po']))   {$po = $_POST['po'];}
  50. if (isset($_POST['vpistolu']))   {$vpistolu = $_POST['vpistolu'];}
  51. if (isset($_POST['vpistolo']))   {$vpistolo = $_POST['vpistolo'];}
  52. if (isset($_POST['vgrenu']))  {$vgrenu = $_POST['vgrenu'];}
  53. if (isset($_POST['vgreno']))  {$vgreno = $_POST['vgreno'];}
  54. if (isset($_POST['vavtou']))   {$vavtou = $_POST['vavtou'];}
  55. if (isset($_POST['vavtoo']))   {$vavtoo = $_POST['vavtoo'];}
  56. if (isset($_POST['vpulu']))   {$vpulu = $_POST['vpulu'];}
  57. if (isset($_POST['vpulo']))   {$vpulo = $_POST['vpulo'];}
  58. if (isset($_POST['vdrobu']))  {$vdrobu = $_POST['vdrobu'];}
  59. if (isset($_POST['vdrobo']))  {$vdrobo = $_POST['vdrobo'];}
  60. if (isset($_POST['vsnipu ']))   {$vsnipu = $_POST['vsnipu'];}
  61. if (isset($_POST['vsnipo ']))   {$vsnipo = $_POST['vsnipo'];}
  62.  
  63. if ( isset($bu) && isset($bo) && isset($eu)&& isset($eo) && isset($pu)&& isset($po) && isset($vpistolu)&& isset($vpistolo) && isset($vgrenu)&& isset($vgreno)
  64. && isset($vavtou)&& isset($vavtoo)&& isset($vpulu)&& isset($vpulo)&& isset($vdrobu)&& isset($vdrobo)&& isset($vsnipu)&& isset($vsnipo)&& isset($idp)&& isset($nik))
  65. {
  66. $result = mysql_query ("UPDATE ratings SET idp='$idp', nik='$nik',bu='$bu', bo='$bo',eu='$eu',eo='$eo',pu='$pu', po='$po',vpistolu='$vpistolu', vpistolo='$vpistolo',vgrenu='$vgrenu', vgreno='$vgreno',vavtou='$vavtou', vavtoo='$vavtoo',vpulu='$vpulu', vpulo='$vpulo',vdrobu='$vdrobu',vdrobo='$vdrobo',vsnipu='$vsnipu',vsnipo='$vsnipo' WHERE idp='$idp'");
  67.  
  68. if ($result == 'true') {echo "<p>Все отлично</p>";}
  69. else {echo "<p>Нифига</p>";}
  70. }
  71. else {echo "<p>Вы заполнили не все поля, изменения не будут сохранены.</p>";}
  72.  
  73. ?>
  74.  


при использовании вышенаписанного вылезают ошибки

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. Notice: Undefined variable: html in T:\home\localhost\456\test3.php on line 11
  5. = file_get_contents(http://www.ganjawars.ru/info.php?id=135397)
  6. Notice: Undefined variable: html in T:\home\localhost\456\test3.php on line 11
  7. = file_get_contents(http://www.ganjawars.ru/info.php?id=255324)
  8. Notice: Undefined variable: html in T:\home\localhost\456\test3.php on line 11
  9. = file_get_contents(http://www.ganjawars.ru/info.php?id=123)
  10. Notice: Undefined variable: html in T:\home\localhost\456\test3.php on line 11
  11. = file_get_contents(http://www.ganjawars.ru/info.php?id=456)
  12. Notice: Undefined variable: html in T:\home\localhost\456\test3.php on line 16
  13.  
  14. Notice: Undefined variable: html in T:\home\localhost\456\test3.php on line 17
  15.  
  16. Notice: Undefined offset: 1 in T:\home\localhost\456\test3.php on line 23
  17.  
  18. Notice: Undefined offset: 1 in T:\home\localhost\456\test3.php on line 24
  19.  
  20. Notice: Undefined offset: 2 in T:\home\localhost\456\test3.php on line 25
  21.  
  22. Notice: Undefined offset: 2 in T:\home\localhost\456\test3.php on line 26
  23.  
  24. Notice: Undefined offset: 3 in T:\home\localhost\456\test3.php on line 27
  25.  
  26. Notice: Undefined offset: 3 in T:\home\localhost\456\test3.php on line 28
  27.  
  28. Notice: Undefined offset: 0 in T:\home\localhost\456\test3.php on line 29
  29.  
  30. Notice: Undefined offset: 0 in T:\home\localhost\456\test3.php on line 30
  31.  
  32. Notice: Undefined offset: 1 in T:\home\localhost\456\test3.php on line 31
  33.  
  34. Notice: Undefined offset: 1 in T:\home\localhost\456\test3.php on line 32
  35.  
  36. Notice: Undefined offset: 2 in T:\home\localhost\456\test3.php on line 33
  37.  
  38. Notice: Undefined offset: 2 in T:\home\localhost\456\test3.php on line 34
  39.  
  40. Notice: Undefined offset: 3 in T:\home\localhost\456\test3.php on line 35
  41.  
  42. Notice: Undefined offset: 3 in T:\home\localhost\456\test3.php on line 36
  43.  
  44. Notice: Undefined offset: 4 in T:\home\localhost\456\test3.php on line 37
  45.  
  46. Notice: Undefined offset: 4 in T:\home\localhost\456\test3.php on line 38
  47.  
  48. Notice: Undefined offset: 5 in T:\home\localhost\456\test3.php on line 39
  49.  
  50. Notice: Undefined offset: 5 in T:\home\localhost\456\test3.php on line 40
  51.  
  52. Вы заполнили не все поля, изменения не будут сохранены.


Не понимаю в чем ошибки, что я не так делаю? Помогите пожалуйста Улыбка
(Добавление)
Забыл сказать, если убрать цикл и вставить id вручную все отлично работает, данные вносятся в базу.
2. kroks - 22 Марта, 2010 - 08:07:58 - перейти к сообщению
Насколько я понял идет обращение к тому, чего не существует. попробуй для начала на строке 22 написать

и от этого уже плясать нужно....
Еще надо бы
PHP:
скопировать код в буфер обмена
  1. curl()
применять
3. GFox - 22 Марта, 2010 - 12:37:32 - перейти к сообщению
kroks пишет:
Насколько я понял идет обращение к тому, чего не существует. попробуй для начала на строке 22 написать

и от этого уже плясать нужно....
Еще надо бы
применять


Не помогло, если я не ошибаюсь print_r это вывод на экран, этот скрипт будет использняться по расписанию сам и открывать его в браузере не будут.

curl()

Можно поподробнее?
4. Viper - 22 Марта, 2010 - 13:57:03 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. printf ("$html = file_get_contents(http://www.ganjawars.ru/info.php?id=%s)",$myrow["idp"]);


это что за бред?
5. GFox - 22 Марта, 2010 - 14:15:04 - перейти к сообщению
Viper пишет:
PHP:
скопировать код в буфер обмена
  1. printf ("$html = file_get_contents(http://www.ganjawars.ru/info.php?id=%s)",$myrow["idp"]);


это что за бред?


Вывожу в цикле тот раздел, который загружает страничку и парсит её, а потом записывает данные в базу где id (который подставляется из базы в ссылку для парсинга) соответствует
6. Viper - 22 Марта, 2010 - 14:36:31 - перейти к сообщению
GFox а не лучше ли сначала получить данные, а потом парсить? тем более что присвоение результата функции в переменную делается до... в вашем случае, а не во время...

что делает код в строке 5? просто для красоты эксперимента?

цикл я бы переписал на for. быстрее будет.
если не хотите возится с curl(там читать мануалы к примеру) используйте класс Snoopy. там за вас уже написанно все, вам останется указать адрес и разобрать данные.
7. GFox - 22 Марта, 2010 - 15:48:32 - перейти к сообщению
Viper пишет:
GFox а не лучше ли сначала получить данные, а потом парсить? тем более что присвоение результата функции в переменную делается до... в вашем случае, а не во время...


Не понял

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $idp=$myrow["idp"];
  3. /*Получаем страничку с данными*/
  4. $html = file_get_contents("http://www.ganjawars.ru/info.php?id=+$idp");
  5. /*Парсим её*/
  6. preg_match_all ('|<font color=#990000>(\d+.+)\((.*?)\)|', $html, $ma);
  7. preg_match_all ('|<b>(\d+.+)\((.*?)\)|', $html, $maa);
  8. Загоняем значения массива в переменные
  9.  
  10. list($bu)=$maa[1][1];
  11. list($bo)=$maa[2][1];
  12. list($eu)=$maa[1][2];
  13. list($eo)=$maa[2][2];
  14. ....
  15.  

Так и получается, сначала получаем данные, потом парсим.

Если я в первом варианте все не правильно сделал, тагда помогите, пожалуйста, сделать цикл.

Вот так все работает отлично, но данные вносятся только по 1 id из базы, как это запихнут в цикл, что бы отпарсить странички по всем указанным в базе пользователям и записать каждые данные в свое место?

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. include ("passwd/connect.php");/*Соединяемся с базой*/
  4.  
  5.  
  6. if (isset($_POST['idp']))  {$idp = $_POST['idp'];}
  7. if (isset($_POST['nik']))  {$nik = $_POST['nik'];}
  8. if (isset($_POST['bu ']))  {$bu = $_POST['bu'];}
  9. if (isset($_POST['bo']))   {$bo = $_POST['bo'];}
  10. if (isset($_POST['eu']))   {$eu = $_POST['eu'];}
  11. if (isset($_POST['eo']))   {$eo = $_POST['eo'];}
  12. if (isset($_POST['pu']))   {$pu = $_POST['pu'];}
  13. if (isset($_POST['po']))   {$po = $_POST['po'];}
  14. if (isset($_POST['vpistolu']))   {$vpistolu = $_POST['vpistolu'];}
  15. if (isset($_POST['vpistolo']))   {$vpistolo = $_POST['vpistolo'];}
  16. if (isset($_POST['vgrenu']))  {$vgrenu = $_POST['vgrenu'];}
  17. if (isset($_POST['vgreno']))  {$vgreno = $_POST['vgreno'];}
  18. if (isset($_POST['vavtou']))   {$vavtou = $_POST['vavtou'];}
  19. if (isset($_POST['vavtoo']))   {$vavtoo = $_POST['vavtoo'];}
  20. if (isset($_POST['vpulu']))   {$vpulu = $_POST['vpulu'];}
  21. if (isset($_POST['vpulo']))   {$vpulo = $_POST['vpulo'];}
  22. if (isset($_POST['vdrobu']))  {$vdrobu = $_POST['vdrobu'];}
  23. if (isset($_POST['vdrobo']))  {$vdrobo = $_POST['vdrobo'];}
  24. if (isset($_POST['vsnipu ']))   {$vsnipu = $_POST['vsnipu'];}
  25. if (isset($_POST['vsnipo ']))   {$vsnipo = $_POST['vsnipo'];}
  26.  
  27. $result = mysql_query ("SELECT idp FROM users");
  28. $myrow = mysql_fetch_array($result);
  29.  
  30. $idp=$myrow["idp"];
  31. $html = file_get_contents("http://www.ganjawars.ru/info.php?id=+$idp");
  32. preg_match_all ('|<font color=#990000>(\d+.+)\((.*?)\)|', $html, $ma);
  33. preg_match_all ('|<b>(\d+.+)\((.*?)\)|', $html, $maa);
  34.  
  35.  
  36. list($bu)=$maa[1][1];
  37. list($bo)=$maa[2][1];
  38. list($eu)=$maa[1][2];
  39. list($eo)=$maa[2][2];
  40. list($pu)=$maa[1][3];
  41. list($po)=$maa[2][3];
  42. list($vpistolu)=$ma[1][0];
  43. list($vpistolo)=$ma[2][0];
  44. list($vgrenu)=$ma[1][1];
  45. list($vgreno)=$ma[2][1];
  46. list($vavtou)=$ma[1][2];
  47. list($vavtoo)=$ma[2][2];
  48. list($vpulu)=$ma[1][3];
  49. list($vpulo)=$ma[2][3];
  50. list($vdrobu)=$ma[1][4];
  51. list($vdrobo)=$ma[2][4];
  52. list($vsnipu)=$ma[1][5];
  53. list($vsnipo)=$ma[2][5];
  54.  
  55. if ( isset($bu) && isset($bo) && isset($eu)&& isset($eo) && isset($pu)&& isset($po) && isset($vpistolu)&& isset($vpistolo) && isset($vgrenu)&& isset($vgreno)
  56. && isset($vavtou)&& isset($vavtoo)&& isset($vpulu)&& isset($vpulo)&& isset($vdrobu)&& isset($vdrobo)&& isset($vsnipu)&& isset($vsnipo))
  57. {
  58. $result = mysql_query ("UPDATE ratings SET bu='$bu', bo='$bo',eu='$eu',eo='$eo',pu='$pu', po='$po',vpistolu='$vpistolu', vpistolo='$vpistolo',vgrenu='$vgrenu', vgreno='$vgreno',vavtou='$vavtou', vavtoo='$vavtoo',vpulu='$vpulu', vpulo='$vpulo',vdrobu='$vdrobu',vdrobo='$vdrobo',vsnipu='$vsnipu',vsnipo='$vsnipo' WHERE idp='$idp'");
  59.  
  60. if ($result == 'true') {echo "<p>Новость отредактирована</p>";}
  61. else {echo "<p>Ошибка редактировани</p>";}
  62. }
  63. else {echo "<p>Вы заполнили не все поля, изменения не будут сохранены.</p>";}
  64.  
  65. ?>
  66.  
  67.  
8. Viper - 22 Марта, 2010 - 16:01:36 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. for ($i=0; $i<count($myrow); $i++) {
  2.         $html = file_get_contents('http://www.ganjawars.ru/info.php?id='.$idp);
  3.         // делаем проверки
  4.         // пишем в базу
  5. }
9. GFox - 22 Марта, 2010 - 16:05:37 - перейти к сообщению
Viper , спасибо большое, все работает Улыбка
(Добавление)
Viper , опять не работает, почему то данные обновляются только по 1 пользователю(

Уже не знаю где искать причину(

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. include ("passwd/connect.php");/*Соединяемся с базой*/
  4. if (isset($_GET['idp'])) {$idp = $_GET['idp'];}
  5.  
  6.  
  7.  
  8. if (isset($_POST['bu ']))  {$bu = $_POST['bu'];}
  9. if (isset($_POST['bo']))   {$bo = $_POST['bo'];}
  10. if (isset($_POST['eu']))   {$eu = $_POST['eu'];}
  11. if (isset($_POST['eo']))   {$eo = $_POST['eo'];}
  12. if (isset($_POST['pu']))   {$pu = $_POST['pu'];}
  13. if (isset($_POST['po']))   {$po = $_POST['po'];}
  14. if (isset($_POST['vpistolu']))   {$vpistolu = $_POST['vpistolu'];}
  15. if (isset($_POST['vpistolo']))   {$vpistolo = $_POST['vpistolo'];}
  16. if (isset($_POST['vgrenu']))  {$vgrenu = $_POST['vgrenu'];}
  17. if (isset($_POST['vgreno']))  {$vgreno = $_POST['vgreno'];}
  18. if (isset($_POST['vavtou']))   {$vavtou = $_POST['vavtou'];}
  19. if (isset($_POST['vavtoo']))   {$vavtoo = $_POST['vavtoo'];}
  20. if (isset($_POST['vpulu']))   {$vpulu = $_POST['vpulu'];}
  21. if (isset($_POST['vpulo']))   {$vpulo = $_POST['vpulo'];}
  22. if (isset($_POST['vdrobu']))  {$vdrobu = $_POST['vdrobu'];}
  23. if (isset($_POST['vdrobo']))  {$vdrobo = $_POST['vdrobo'];}
  24. if (isset($_POST['vsnipu ']))   {$vsnipu = $_POST['vsnipu'];}
  25. if (isset($_POST['vsnipo ']))   {$vsnipo = $_POST['vsnipo'];}
  26.  
  27. $result = mysql_query ("SELECT idp FROM ratings");
  28. $myrow = mysql_fetch_array($result);
  29. $idp=$myrow["idp"];
  30. for ($i=0; $i<count($myrow); $i++) {
  31. $html = file_get_contents('http://www.ganjawars.ru/info.php?id='.$idp);
  32. preg_match_all ('|<font color=#990000>(\d+.+)\((.*?)\)|', $html, $ma);
  33. preg_match_all ('|<b>(\d+.+)\((.*?)\)|', $html, $maa);
  34.  
  35.  
  36. list($bu)=$maa[1][1];
  37. list($bo)=$maa[2][1];
  38. list($eu)=$maa[1][2];
  39. list($eo)=$maa[2][2];
  40. list($pu)=$maa[1][3];
  41. list($po)=$maa[2][3];
  42. list($vpistolu)=$ma[1][0];
  43. list($vpistolo)=$ma[2][0];
  44. list($vgrenu)=$ma[1][1];
  45. list($vgreno)=$ma[2][1];
  46. list($vavtou)=$ma[1][2];
  47. list($vavtoo)=$ma[2][2];
  48. list($vpulu)=$ma[1][3];
  49. list($vpulo)=$ma[2][3];
  50. list($vdrobu)=$ma[1][4];
  51. list($vdrobo)=$ma[2][4];
  52. list($vsnipu)=$ma[1][5];
  53. list($vsnipo)=$ma[2][5];
  54.  
  55. if ( isset($bu) && isset($bo) && isset($eu)&& isset($eo) && isset($pu)&& isset($po) && isset($vpistolu)&& isset($vpistolo) && isset($vgrenu)&& isset($vgreno)
  56. && isset($vavtou)&& isset($vavtoo)&& isset($vpulu)&& isset($vpulo)&& isset($vdrobu)&& isset($vdrobo)&& isset($vsnipu)&& isset($vsnipo)&& isset($vsnipo)&& isset($vsnipo))
  57. {
  58. $result = mysql_query ("UPDATE ratings SET bu='$bu', bo='$bo',eu='$eu',eo='$eo',pu='$pu', po='$po',vpistolu='$vpistolu', vpistolo='$vpistolo',vgrenu='$vgrenu', vgreno='$vgreno',vavtou='$vavtou', vavtoo='$vavtoo',vpulu='$vpulu', vpulo='$vpulo',vdrobu='$vdrobu',vdrobo='$vdrobo',vsnipu='$vsnipu',vsnipo='$vsnipo' WHERE idp='$idp'");
  59.  
  60. if ($result == 'true') {echo "<p>Все отлично</p>";}
  61. else {echo "<p>Нифига</p>";}
  62. }
  63. else {echo "<p>Вы заполнили не все поля, изменения не будут сохранены.</p>";}
  64. }
  65. ?>
  66.  


и не менял ничего (

Если поставить всем записям одинаковый 'idp' тогда все обновляются.
(всем записываются одинаковые данные)
10. Viper - 23 Марта, 2010 - 07:46:49 - перейти к сообщению
GFox ну так у вас id записи за циклом. а нужно в цикле их подставлять.
11. GFox - 24 Марта, 2010 - 23:09:29 - перейти к сообщению
Viper пишет:
GFox ну так у вас id записи за циклом. а нужно в цикле их подставлять.


Простите за долгое отсутствие, провайдер подарил несколько неприятных моментов, в самый разгар работы интернет отключился..

Поменял местами – не помогает, при использовании скрипта выводится сообщение :
Все отлично Все отлично (а должно было быть 3 прохода так как три пользователшя в базе), можно понять что цикл состоялся два раза но запись все равно была добавлена только по первому пользователю.
12. GFox - 25 Марта, 2010 - 19:33:32 - перейти к сообщению
Все настроили, все работает, всем Спасибо за помощь Улыбка

 

Powered by ExBB FM 1.0 RC1