Skocz do zawartości

[Curl] szukanie tekstu na stronie


PawelC

Rekomendowane odpowiedzi

Hej :)

Mam taki kod:

<?php

$ch = curl_init('https://www.strefa-seo.info/index.php');

curl_exec($ch);

curl_close($ch);

if(preg_match("/serwisami/", "$ch"))

echo("dobrze");

else

echo("źle");

?>

i chcę aby na stronie wyszukał, tekst z preg_match czyli serwisami, jednak niemoże on go znaleźć a jak zamiast $ch dam tekst gdzie użyje tego słowa, to jest wszystko ok, gdzie tutaj jest błąd? Z tego co się domyślam to jest gdzieś błąd z pobieraniem treści strony.

Odnośnik do komentarza
Udostępnij na innych stronach

A że tak spytam w zmiennej $ch masz treśc strony ?

Zrob echo i zobacz :)

pl.php.net/manual/pl/function.curl-exec.php

Nie przypisujesz wyników do zmiennej w której szukasz tekstu wiec go nie znajdziesz. Zmienna $ch to praqwdopodobnie liczba uchwyt do biblioteki curl w systemie na którym jest php i nie ma w nim tekstu.

<?php
$ch = curl_init('https://www.strefa-seo.info/index.php');
$str=curl_exec($ch);
curl_close($ch);
if(preg_match("/serwisami/", $str))
echo("dobrze");
else
echo("źle");
?>

Przynajmniej ja bym tak to zrobił :) z głowy więc może nie działać tak odrazu

Odnośnik do komentarza
Udostępnij na innych stronach

fakt nie mam, teraz już sobie poradziłem z pobraniem treści strony, ale mam kolejny problem, jak w preg_match wpisze słowo to jak jest na stronie to je znajdzie, natomiast jak chce przykładowo użyć wyrażenia regularnego np adresu email to już go nie znajduje choć jest na stronie. Wygląda to tak:

if(preg_match('/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/', $pobrane_zrodlo))

echo("Jest");

else

echo("i znowu niema");

i w jaki sposób mam wyświetlić wynik wyszukiwania, a dokładnie mojego maila którego znajdzie na stronie?

Odnośnik do komentarza
Udostępnij na innych stronach

tym razem inna strona pl.php.net/manual/pl/function.preg-match.php

wiec jak mniemam musisz:

if(preg_match('/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/', $pobrane_zrodlo, $znalezione))
{ echo("Jest"); print_r($znalezione);  }
else
echo("i znowu niema");

Od razu zobacz funkcję preg_match_all

Odnośnik do komentarza
Udostępnij na innych stronach

Tak mi niedziała, niewyświetla e-maila chociaż jest:

if(preg_match('/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/', $pobrane_zrodlo, $znalezione))

{ echo("Jest"); print_r($znalezione); }

else

echo("i znowu niema");

A tak działa:

if(preg_match('/adres@adres.pl/', $pobrane_zrodlo, $znalezione))

{ echo("Jest"); print_r($znalezione); }

else

echo("i znowu niema");

Czy tego napisu array idzie się pozbyć żeby wyświetlił tylko to co wyszuka? A nie array coś tam

Odnośnik do komentarza
Udostępnij na innych stronach

te wyrażenie które masz zawiera na początku znak ^ z tego co pamietam oznacza to początek linii wiec jak mail jest w środku to nie powinno znaleźć. Wiec dziala OK. Poszukaj gotowych przykładów, szukanie maila jest jedną z najpopularniejszych rzeczy jaka jest opisana w przykładach php

Print_r pokazuje tylko zawartość tablicy abyś mogł zobaczyc gdzie jest Twoj mail , jak sobie zrobisz echo $znalezione[indeks]; to bedzie bez napisu array. W sumie praktycznego zastosowania dla tej funkcji nie widze oprócz uruchamiania aplikacji w PHP i szukania błedów na etapie wdrażania.

Odnośnik do komentarza
Udostępnij na innych stronach

Teraz mam tak:

<?php

$adres="https://www.pawelcyki.prv.pl/";

$ch = curl_init(urldecode($adres));

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$pobrane_zrodlo = curl_exec($ch);

curl_close($ch);

if(preg_match_all('/[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/', $pobrane_zrodlo, $znalezione))

{ echo $znalezione[indeks]; }

else

echo("i znowu niema");

?>

I to samo:

i znowu niema

A to echo $znalezione[indeks]; mi wyświetli maila dopiero jak zamiast wyrażenia go wstawię. Dla mnie to jest dziwne.

Odnośnik do komentarza
Udostępnij na innych stronach

Wyjątkowo podam gotowe rozwiązanie.

oczywiscie ze strony pl2.php.net/preg_match_all

<?
//extract all emails from text

preg_match_all("/[-a-z0-9\._]+@[-a-z0-9\._]+\.[a-z]{2,4}/", file_get_contents('1.txt'), $email);
print_r ($email);
?>

Odnośnik do komentarza
Udostępnij na innych stronach

print_r wyświetla zawartość tablicy

echo wyświetla łańcuchy znaków/ liczby/ogolnie typy proste , jak mu podasz tablicę jako parametr to wyswietla array :)

musisz wtedy wybrać elemnt z tablicy który chesz wyswietlić np. tak echo $tablica[$indeks_elementu];

oczywiscie tablice moga być wielowymiarowe więc echo $tablica[$indeks_elementu]; tez może dać "array" i wtedy trzeba głębiej

echo $tablica[$indeks_elementu][$indeks2_elementu];

Odnośnik do komentarza
Udostępnij na innych stronach

Ok dzięki. Mam jeszcze kilka pytań, aby nie zaczynać nowego tematu.

Pająk powinien być widoczny

Kolejnym dobrym sposobem zapewnienia, że inni będą wiedzieli o naszym pająku, jest

zawarcie w klauzuli

User-Agent

pająka danych kontaktowych [sposób 11.]Może to

być adres poczty elektronicznej lub adres strony. Trzeba pamiętać potem o sprawdzaniu

tego adresu i zapewnieniu, że znajdą się pod nim oczekiwane informacje

czy jest możliwość ustawienia tego user agent w php, aby np po wejściu robota na stronie nie pisało gość tylko jego nazwa?

i kolejne pytanie, mój robot szuka danego tekstu tylko na stronie głównej, a jak wykonać aby wszedł również na podstrony? Świta mi coś w głowie, że powinien zebrać linki ze strony głównej i po nich wejść dalej, tylko jak to wykonać?

Odnośnik do komentarza
Udostępnij na innych stronach

1. Nagłówki przy zapytaniu do strony (czyli User-Agent: xyz) - albo odpowiednia opcja w curl, albo fsockopen..

2. Pomysł dobry, ale musisz pamiętać:

a) blędnych kodach stron www (czyil niedomnknięte tagi, nakładające się, itp. itd.)

:D różnych rodzajach adresow (wzgledne, bezwzgledne)

c) "zawrotach" (abc/../xyz.html)

d) faktu, ze href niekoniecznie musi byc pierwszy

e) tym, ze czasem js, a wtedy historia sie znacznie wydłuża..

..

ogólnie? Szukaj lepiej tam sitemap-y google :-)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności