2012-12-05 6 views
9

पार्स करने के लिए PHP के साथ एक्सपैथ का उपयोग करना मैं वर्तमान में एक मंच से कुछ डेटा पार्स करने की कोशिश कर रहा हूं। यहाँ कोड है:एचटीएमएल

$xml = simplexml_load_file('https://forums.eveonline.com'); 

$names = $xml->xpath("html/body/div/div/form/div/div/div/div/div[*]/div/div/table//tr/td[@class='topicViews']"); 
foreach($names as $name) 
{ 
    echo $name . "<br/>"; 
} 

वैसे भी, समस्या यह है कि मैं उपयोग कर रहा हूँ गूगल xpath विस्तार मुझे पथ प्राप्त करने में मदद करने के लिए है, और मेरा अनुमान है कि यह है कि गूगल एचटीएमएल बदल रहा है पर्याप्त बनाने के लिए इसे नहीं आते जब मैं इस खोज को करने के लिए अपनी वेबसाइट का उपयोग करता हूं। क्या कोई तरीका है कि मैं मेजबान को Google क्रोम के माध्यम से साइट पर देख सकता हूं ताकि उसे सही कोड मिल सके? आप क्या सुझाव देंगे?

धन्यवाद!

+1

क्या आपने अपने वेबब्रोसर में जावास्क्रिप्ट को अक्षम करने का प्रयास किया था? आपका PHP इसका उपयोग नहीं करेगा, इसलिए वेबसाइट पर जावास्क्रिप्ट द्वारा किए गए किसी भी बदलाव सर्वर पर नहीं होंगे। –

+0

XPath एक्सएमएल के लिए है, HTML के लिए नहीं। – GolezTrol

+1

जेएस उस पृष्ठ पर नहीं चल रहा है जिसे मैं चला रहा हूं। मैं समझता हूं कि XPath एक्सएमएल के लिए है, लेकिन Google खोजों के माध्यम से मैंने जो देखा है, उससे HTML के लिए भी उपयोग करना लोकप्रिय है। – VixenSoul

उत्तर

3

एक डबल '/' xpath खोज करेगा। तो यदि आप xpath '// table' का उपयोग करेंगे तो आपको सभी टेबल मिलेंगे। आप xpath 'html/body/div/div/form' के अंतर्गत सभी टेबल प्राप्त करने के लिए 'x html/body/div/div/form // table' जैसे अपने xpath संरचना में इस गहराई का उपयोग भी कर सकते हैं।

इस तरह आप एचटीएमएल स्रोत में बदलाव के खिलाफ अपना कोड थोड़ा अधिक लचीला बना सकते हैं।

यदि आप इसका उपयोग करना चाहते हैं तो मैं xpath के बारे में कुछ सीखने का सुझाव देता हूं। कॉपी पेस्ट केवल आपको अभी तक ले जाता है।

सिंटैक्स के बारे में एक साधारण स्पष्टीकरण http://www.w3schools.com/xpath/xpath_syntax.asp

36

में पाया जा सकता मेरे सुझाव, हमेशा DOMDocument उपयोग करने के लिए के रूप में SimpleXML करने का विरोध किया है, क्योंकि यह के साथ काम करने के लिए एक बहुत अच्छा इंटरफ़ेस है और कार्य एक बहुत अधिक सहज ज्ञान युक्त बनाता है।

निम्नलिखित उदाहरण आपको दिखाता है कि HTML को DOMDocument ऑब्जेक्ट में कैसे लोड करें और XPath का उपयोग करके DOM से पूछें। तुम सब वास्तव में क्या करने की जरूरत सभी टीडी topicViews के एक वर्ग के नाम और इस वसीयत उत्पादन nodeValue सदस्यों में से प्रत्येक DOMNodeList इस XPath क्वेरी द्वारा लौटाए में पाया साथ तत्वों लगता है।

/* Use internal libxml errors -- turn on in production, off for debugging */ 
libxml_use_internal_errors(true); 
/* Createa a new DomDocument object */ 
$dom = new DomDocument; 
/* Load the HTML */ 
$dom->loadHTMLFile("https://forums.eveonline.com"); 
/* Create a new XPath object */ 
$xpath = new DomXPath($dom); 
/* Query all <td> nodes containing specified class name */ 
$nodes = $xpath->query("//td[@class='topicViews']"); 
/* Set HTTP response header to plain text for debugging output */ 
header("Content-type: text/plain"); 
/* Traverse the DOMNodeList object to output each DomNode's nodeValue */ 
foreach ($nodes as $i => $node) { 
    echo "Node($i): ", $node->nodeValue, "\n"; 
}