[php] xpath paden werken niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mazz
  • Registratie: November 2004
  • Laatst online: 08-06 13:48
Ik heb een spider die via xpath data van site haalt. (Hier hebben we toestemming voor)
Nu is het probleem dat de xpath paden niet werken. De paden zoek ik op met een tooltje als xpe, of xpath finder en xpather. Met geen enkel pad lukt het om die data te krijgen. Terwijl sites die er al reeds instaan wel werken. Dus lijkt het alsof de simple xml van php andere paden wil hebben?

De functie die over de data gaat is als volgt
code:
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
function ScanForData($fielddefs)
    {
        $fielddata = Array();
        if($this->IsValid())
        {
            reset($fielddefs);
            //print("\n");
            while (list($fieldname, $xpath) = each($fielddefs))
            {
                //print("$fieldname=$xpath\n");
                $data = "";
                $nodelist = $this->simple_xml_element->xpath($xpath);
                if($nodelist !== FALSE)
                {
                    foreach($nodelist as $node)
                    {
                        if(!empty($data))
                        {
                            $data .= " ";
                        }
                        $data .= trim(strtr(strip_tags($node->asXML()), "\n\r", "  "));
                    }
                }
                if(!empty($data))
                {
                    $fielddata[$fieldname] = $data;
                }
            }
        }
        return $fielddata;
    }


Om een voorbeeldje te geven deze site:
http://www.verkopen.nl/?p...page2=ad&id=94&adid=13700

Hier moet bijvoorbeeld de titel worden gepakt Complete Loods met Sandwich dak van 320m2 (staat in grote letters bovenaan)

Met de ene tool kom ik op dit pad: id('center')/table/tbody/tr/td/font/b
En met de andere op dit pad /html/body/div/div/div/div/table/tbody/tr/td
En het derde pad is dit: /html/body/div[@id='back']/div[@id='backtop']/div[@id='pagina']/div[@id='center']/table/tbody/tr/td/font/b

Heeft iemand enig idee of dit gewoon zou moeten werken met de simple_xml_elements xpath functie van php? Ik ben erg benieuwd

20 jaar, en wat had ik bereikt?


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Jeetje wat een brakke teringsite is dat zeg :X

Zo uit het hoofd (niet getest):
PHP:
1
xpath("div[@id='center']/table/tr/td/font/b");

Maar het is moeilijk te zeggen met zo'n onzinsite.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • mazz
  • Registratie: November 2004
  • Laatst online: 08-06 13:48
Hmm dit lijkt helaas ook niet te werken.
Zou je misschien hem ff goed kunnen checken zodat je zeker weet dat die goed is, dan kan ik even testen.

Als iemand ondertussen nog een goed tooltje weet hoor ik dat graag

20 jaar, en wat had ik bereikt?


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Err.. nee. Die site waar je de data vanaf wil halen is zo brak opgezet, dat ik daar niet aan ga beginnen. Daarbij hoef ik jouw werk niet te doen, tenzij ik ook jouw salaris er voor krijg (of een factuur mag sturen).

[ Voor 34% gewijzigd door MueR op 29-01-2009 10:49 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Heerlijke site. :p Als ik Firebug eens aanzet krijg ik uit mijn hoofd:
code:
1
string(id('center')/table/tbody/tr/td/table/tbody/tr/td/b[1])

2 tables dus, ik vraag me af waarom die tools dat niet zien. Die tbody's staan vast niet echt in de source...

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Mag je uberhaupt die data eraf halen? :)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Snake schreef op woensdag 28 januari 2009 @ 23:50:
Mag je uberhaupt die data eraf halen? :)
Ik heb een spider die via xpath data van site haalt. (Hier hebben we toestemming voor)

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

PHP:
1
xpath('/html/body/div/div/div/div[3]/table/tr/td/font/b');
zegt mijn firebug

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

mazz schreef op woensdag 28 januari 2009 @ 22:04:
Hmm dit lijkt helaas ook niet te werken.
Zou je misschien hem ff goed kunnen checken zodat je zeker weet dat die goed is, dan kan ik even testen.
Pardon? Je kán natuurlijk ook gewoon je eigen werk doen. ;) We doen hier suggesties op basis van de informatie die en topicstarter ons geeft, kant en klare oplossingen zijn er idealiter zelden tot nooit bij. We verwachten toch wel een beetje dat een topicstarter zelf aan de slag kan met de suggesties die hij of zij krijgt. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • mazz
  • Registratie: November 2004
  • Laatst online: 08-06 13:48
Ahh bedankt. Het lijkt dat firebug de juiste xpath weergeeft.

20 jaar, en wat had ik bereikt?


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

MueR schreef op donderdag 29 januari 2009 @ 08:27:
PHP:
1
xpath('/html/body/div/div/div/div[3]/table/tr/td/font/b');
zegt mijn firebug
Zo zou ik het niet doen, dat is niet erg robust lijkt me.

Misschien kan je beter op de eerste img tag zoeken met attribuut src="images/dot2.png" en dan de text van de eerste b tag. Dat is wel iets trager waarschijnlijk, maar een stuk robuster voor site veranderingen. Op die andere manier, als ze dan besluiten een advertentie banner in te voegen vind je niks meer. Ik denk dat je beter een bottom-up achtige manier van zoeken kan gebruiken dan volledig top-down. Het is wel trager, maar echt veel zal dat niet uitmaken.

Bijvoorbeeld (zeer waarschijnlijk niet de beste):

code:
1
"//img[@src = 'images/dot2.png']/following-sibling::font/b/text()"

[ Voor 8% gewijzigd door Zoijar op 29-01-2009 15:20 ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Misschien iets als:

code:
1
//div[@id='center']//font/b


Wellicht wil je nog de size=3 opnemen in je font tag.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1