Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana poczatku url na inny....
Forum PHP.pl > Forum > PHP
Randallmaster
Witam serdecznie.. Napisałem taki skrypt:

  1. <?php
  2.  
  3. $curl = curl_init();
  4. curl_setopt ($curl, CURLOPT_URL, "http://praca.gazetapraca.pl/0,4050,,,1,20,-postDate,,,,,,Kalisz,,,0,,,,,,,,133.html");
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  6.  
  7. $result = curl_exec ($curl);
  8. curl_close ($curl);
  9.  
  10.  
  11. //links
  12. if(preg_match_all("#<div class=\"c0\">(.*?)</div>#", $result, $links))
  13. {
  14. foreach($links[0] as $link)
  15. {
  16. if(preg_match_all("#<strong>(.*?)</strong>#", $result, $links))
  17. {
  18. foreach($links[0] as $link)
  19. {
  20. echo $link."<br />";}
  21. }
  22. }
  23.  
  24. }
  25.  
  26. ?>


Wyniki działania:
http://www.pracujkalisz.pl/dane.php

jedynie co źle wychodzi to link:

http://www.pracujkalisz.pl/200,4001,,76866...r+Naczelny.html

a powinno być tak:

http://praca.gazetapraca.pl/200,4001,,7686...r+Naczelny.html

jak zamienić początki linku??
to:
http://www.pracujkalisz.pl/
na:
http://praca.gazetapraca.pl/

prosze o pomoc
Ges
Ze względu na to, ze linki na stronie z której je pobierasz są linkami względnym, pronowałbym takie modyfikacje:

1. dogrzebanie się do hrefa wewnatrz tych linków (względne ścieżki linków)
2. dopisanie do niego prefixu w postaci bazowego urla
3. printowanie ich bez <strong> itd itp. tylko samemu dopisanie <a href="">

Poza tym myślę, że właśnie to chciałeś osiągnąć używając w wewnętrznym preg_match_all zapisu (.*?)
Tylko potem zrobiłeś błąd próbując printować $links[0]. Gdybyś uważniej przestudiował dokumentacje wpadłbyś na fakt, iż wyniki dopasowań zdefiniowane przez ( ) znadują się w indeksach od 1 w górę do ilości () w preg_match_all.

Kod który poprawia ten błąd i wyciągą ścieżki względne.

  1. <?php
  2.  
  3. $curl = curl_init();
  4. curl_setopt($curl, CURLOPT_URL, "http://praca.gazetapraca.pl/0,4050,,,1,20,-postDate,,,,,,Kalisz,,,0,,,,,,,,133.html");
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  6.  
  7. $result = curl_exec($curl);
  8. curl_close($curl);
  9.  
  10. //links
  11. $baseUrl = "http://praca.gazetapraca.pl/";
  12.  
  13. if (preg_match_all("#<div class=\"c0\">(.*?)</div>#", $result, $links))
  14. {
  15. foreach ($links[0] as $link)
  16. {
  17. if (preg_match_all("#<strong>.*<a href=\"(.*?)\".*</a></strong>#", $result, $links))
  18. {
  19. foreach ($links[1] as $link)
  20. {
  21. $href = $baseUrl . $link;
  22. print "<a href=\"$href\">$href</a><br />";
  23. }
  24. }
  25. }
  26.  
  27. }
  28.  
  29. ?>
Randallmaster
Zmieniło się ale wygląda to niezbyt ciekawie:

http://www.pracujkalisz.pl/gazetapraca.php

ale działa dobrze... A co zrobić żeby miało poprzedni wygląd?
Ges
Pomyśl smile.gif Wszystkie błędy zostały wytknięte i widzisz w jaki sposób zostało to naprawione...

Czemu wszyscy tu liczą na gotowce smile.gif
Randallmaster
teraz wszystko jest ze sobą powiązane sad.gif i jak mam wyodrębnić tamto jeżeli za miast tamtego wyświetla mi się<a href.....
Ges
Naprowadzę Cię :]

Wyciągamy teraz z tych linków same hrefy, których dopasowania trafiają do $links[1], ponieważ jest to pierwszy "()" w naszym preg_match_all.
Potrzebowalibyśmy teraz wyciągnąć to co jest za linkiem poza hrefem.
Więc modyfikujemy preg_match_all.

  1. if (preg_match_all("#<strong>.*<a href=\"(.*)\" >(.*)</a></strong>#", $result, $links))


Co to daje ? Teraz wszystko co jest:

href=\"TUTAJ\" => trafia do $links[1]

A wszystko co jest pomiędzy:
<a>TUTAJ</a> => trafia do $links[2]

Więc to drugie umożliwa nam dostanie się do opisu linka :]

Teraz już pozostaje tylko sformatowanie danych, które mamy dostępne.
Na przykład w ten sposób:

  1. foreach ($links[1] as $index => $link)
  2. {
  3. $href = $baseUrl . $link;
  4. print "<a href=\"$href\">".$links[2][$index]."</a><br />";
  5. }


Cały kod wyglądałby tak:

  1. <?php
  2.  
  3. $curl = curl_init();
  4. curl_setopt($curl, CURLOPT_URL, "http://praca.gazetapraca.pl/0,4050,,,1,20,-postDate,,,,,,Kalisz,,,0,,,,,,,,133.html");
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  6.  
  7. $result = curl_exec($curl);
  8. curl_close($curl);
  9.  
  10. //links
  11. $baseUrl = "http://praca.gazetapraca.pl/";
  12.  
  13. if (preg_match_all("#<div class=\"c0\">(.*?)</div>#", $result, $links))
  14. {
  15. foreach ($links[0] as $link)
  16. {
  17. if (preg_match_all("#<strong>.*<a href=\"(.*)\" >(.*)</a></strong>#", $result, $links))
  18. {
  19. foreach ($links[1] as $index => $link)
  20. {
  21. $href = $baseUrl . $link;
  22. print "<a href=\"$href\">".$links[2][$index]."</a><br />";
  23. }
  24. }
  25. }
  26.  
  27. }
  28.  
  29. ?>
  30.  



Mam nadzieję, że wyniesiesz z tego posta coś więcej niż gotowy kod, który notabene przygotowali Ci ludzie z tego forum, bo widzę, że początkowy kod został stworzony też harytatywnie na Twoją prośbę w osobnym poście.
Randallmaster
To jest kod stworzony przez jednego z użytkowników:

  1. <?php
  2. $string = file_get_contents('http://praca.gazetapraca.pl/0,4050,,,1,10,-postDate,,,,,,Kalisz,,,0,,,,,,,,133.html');
  3. $tekst = "<body onload><table><tr><td>ala ma kota</td></tr></table></body>";
  4.  
  5. $result = preg_match_all('/<div class="c0">(.*?)<\/div>/s', $string, $match);
  6.  
  7. $links = array();
  8. foreach($match AS $value)
  9. {
  10. foreach($value AS $val)
  11. {
  12. $result2 = preg_match('/<strong>(.*?)<\/strong>/s', $val, $match2);
  13. $links[] = $match2[1];
  14. }
  15.  
  16. }
  17. $links = array_filter($links);
  18. print_r($links);
  19.  
  20. ?>



a to jest mój


  1. <?php
  2.  
  3. $curl = curl_init();
  4. curl_setopt ($curl, CURLOPT_URL, "http://praca.gazetapraca.pl/0,4050,,,1,20,-postDate,,,,,,Kalisz,,,0,,,,,,,,133.html");
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  6.  
  7. $result = curl_exec ($curl);
  8. curl_close ($curl);
  9.  
  10.  
  11. //links
  12. if(preg_match_all("#<div class=\"c0\">(.*?)</div>#", $result, $links))
  13. {
  14. foreach($links[0] as $link)
  15. {
  16. if(preg_match_all("#<strong>(.*?)</strong>#", $result, $links))
  17. {
  18. foreach($links[0] as $link)
  19. {
  20. echo $link."<br />";}
  21. }
  22. }
  23.  
  24. }
  25.  
  26. ?>



Fakt faktem robiłem go sam przez przerabianie innych skryptów ale zrobiłem go sam... dziękuję za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.