Div content remote!

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

Adytzoo
Junior Member
Mesaje: 35
Membru din: Vin Aug 01, 2008 11:27 am
Localitate: Rosiorii de Vede
Contact:

Div content remote!

Mesajde Adytzoo » Mie Noi 03, 2010 3:47 pm

Am site-ul zxczxczxczc.com de exemplu. cum fac sa extrag continutul div-ului cu id "div_div_div" in php, stiu ca e cu file get contents, dar cum se face, cu preg_match sau cum? nu vreau sa depind de chestia cu doc getelementbyid a php-ului pentru ca nu e suportata de toate serverele...



Avatar utilizator
matheuzzy
Senior Member
Mesaje: 383
Membru din: Dum Apr 26, 2009 4:42 pm
Localitate: Bucuresti

Mesajde matheuzzy » Mie Noi 03, 2010 3:53 pm

gresit!

getElementById este functie JavaScript.

cautare in stringuri, din PHP gasesti aici: http://php.net/manual/en/function.strpos.php

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Mie Noi 03, 2010 4:12 pm

matheuzzy scrie:cautare in stringuri, din PHP gasesti aici: http://php.net/manual/en/function.strpos.php

Extrage-mi si mie continutul div-ului #content cu functia sugerata de tine:

Cod: Selectaţi tot

<div id="header">
  <h1>Heading</h1>
  <div id="content">Content body</div>
</div>

Stiu ca nu spuneai sa folosesti doar o singura functie sa preiei informatiile, dar tot nu e destul. Nici cu functiile de string-uri ale PHP-ului, nici regex.

@Adytzoo, uite cateva variante mai bune:
1. http://www.php.net/manual/en/book.dom.php
2. http://code.google.com/p/phpquery/
3. http://querypath.org/
4. http://simplehtmldom.sourceforge.net/

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Mie Noi 03, 2010 4:43 pm

Cod: Selectaţi tot

<?php

$html =<<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<div id="header">
  <h1>Heading</h1>
  <div id="content">Content body</div>
</div>
HTML;

$dom= new DOMDocument();
$dom->loadHTML($html);

$content = $dom->getElementById("content")->nodeValue;

echo $content; // Content body

Opa. Io-te si "getElementById". NB: "getElementById" functioneaza doar daca documentul are un doctype declarat. Daca nu, iti regurgiteaza "null".
Abia acum am incercat DOM. Nu pare atat de greu acum, nu? Cu Simple HTML DOM mai mult (imi plac selectorii CSS3). Celelalte doua sunt recomandate de mai multi.
Ultima oară modificat Mie Noi 03, 2010 4:50 pm de către nevvermind, modificat de 2 ori în total.

Avatar utilizator
matheuzzy
Senior Member
Mesaje: 383
Membru din: Dum Apr 26, 2009 4:42 pm
Localitate: Bucuresti

Mesajde matheuzzy » Mie Noi 03, 2010 4:46 pm

aha. bine de stiut :)
eu l-am folosit doar pt XML-uri si n-am avut nevoie de functia asta.

multumim pentru research!

Adytzoo
Junior Member
Mesaje: 35
Membru din: Vin Aug 01, 2008 11:27 am
Localitate: Rosiorii de Vede
Contact:

Mesajde Adytzoo » Mie Noi 03, 2010 4:48 pm

am incercat cu simple html dom, dar vreau ceva foarte basic, asta e f general imi trebuie doar o functie mica, sa inteleg si eu procesu ca asa daca iau clasa si nu prea inteleg ce si cum de prin ea, ma incurc, stiam de getelementbyid din javascript nu mai sariti cu raspunsuri daca nu stiti ce intreb, exista si in php ceva asemanator.. eventual un substr, nu stiu ce sa folosesc sincer de asta am apelat aici... nu vreau clase , scripturi imprumutate, vreau o functie simpla, ar fi foarte util asa ceva si chiar am nevoie

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Mie Noi 03, 2010 4:59 pm

Adica tu vrei ceva simplu pentru ceva care are specificatii mai complexe decat creierul lui Britney Spears?
Sorry, nu exista asa ceva.

Daca iei date dintr-un HTML relativ constant ca format, atunci se mai poate face ceva.
Acele metode de "web scraping" nu sunt dificile in sine, ci tu nu stii sa lucrezi cu ele. Ia-o metodic si-ti garantez ca n-o sa ti se mai para intra-atat de urate.

Ok, nu vrei clase, scripturi imprumutate etc. Foloseste regex (preg_match). Aici se aplica zicala de pe Usenet: "I have a problem. I know, I'll use regular expressions! Now I have two problems". Daca nu te descurci, posteaza un model de html (daca e prea mare, foloseste pastebin.com) si vom incerca sa te ajutam cu niste regex.

last1devil
Average Member
Mesaje: 60
Membru din: Mar Sep 21, 2010 8:14 pm
Localitate: Spain
Contact:

Mesajde last1devil » Mie Noi 03, 2010 6:23 pm

Incearca cu:

Cod: Selectaţi tot

function get_between($content,$start,$end){
        $r = explode($start, $content);
        if (isset($r[1])){
            $r = explode($end, $r[1]);
            return $r[0];
        }
        return '';
    }

$content='<div id="header">
  <h1>Heading</h1>
  <div id="content">Content body</div>
</div>';
$start = '<div id="content">';
$end = '</div></div>';

echo get_between($content, $start, $end);


Nu l-am testat pe html-ul tau dar eu am folosit functia asta de mai multe ori in acelasi scop.
Be creative!

Fast2Web
PHPRomania Supporter
Mesaje: 27
Membru din: Joi Mar 11, 2010 12:43 pm
Localitate: Iasi
Contact:

Mesajde Fast2Web » Joi Noi 04, 2010 10:10 am

iei fisierul cu file_get_contents si ca sa extragi div-ul folosesi preg_match si expresii regulate cel mai usor. spor la treaba.

Adytzoo
Junior Member
Mesaje: 35
Membru din: Vin Aug 01, 2008 11:27 am
Localitate: Rosiorii de Vede
Contact:

Mesajde Adytzoo » Joi Noi 04, 2010 9:50 pm

ideea ar fi eu sa bag doar DIV ID, pentru ca ala daca are div id='lalala' style='zxczxc' class='zxczxcz' nu am cum sa-mi dau seama, ceva care sa recunoasca unde se incheie start-ul divului... nu stiu daca ma intelegi, ceva cu pred match

Cod: Selectaţi tot

<div%%%id=%%%''[0-9a-zA-Z]>$content /div

nevvermind
Senior Member
Mesaje: 1264
Membru din: Mar Iun 22, 2010 3:17 pm

Mesajde nevvermind » Joi Noi 04, 2010 10:11 pm

Intelege ca este o investitie proasta sa faci regex interpretand HTML, pentru simplul fapt ca HTML-ul NU este un limbaj regulat! Daca ar fi fost, putea fi intepretat corect de expresiile regulate.

Cum folosesti regex, daca ala are "<div id="footer">asdadasda<div>sdfsdfs</div></div>?

Programatorii cu ceva experienta (sau cei care au gasit articole anti-regex) iti vor spune mereu sa NU le folosesti pentru a interpreta HTML, ci alte unelte, precum cele mentionate de mine mai sus.

Si da codul ala HTML odata, ca sa-ti spunem cum sa folosesti regex daca tot o faci, nu tot completa dupa fiecare post.


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 12 vizitatori