2009-10-29 21 views
8

मैं एक PHP लाइब्रेरी की तलाश में हूं जो मुझे वेबपृष्ठों को स्क्रैप करने और सभी कुकीज़ के बारे में परवाह करने और डिफ़ॉल्ट मानों के साथ फ़ॉर्म को प्रीफ़िल करने की अनुमति देता है, जो मुझे सबसे ज्यादा परेशान करता है।PHP के लिए स्क्रैपिंग लाइब्रेरी - phpQuery?

मैं xpath के साथ प्रत्येक इनपुट तत्व से मिलान करने के थक गया हूं और अगर कुछ बेहतर अस्तित्व में है तो मुझे प्यार होगा। मैं phpQuery पर आया हूं लेकिन मैनुअल बहुत स्पष्ट नहीं है और मुझे पता नहीं है कि POST अनुरोध कैसे करें।

क्या कोई मेरी मदद कर सकता है? धन्यवाद।

@Jonathan Fingland:

() browserGet के लिए मैनुअल द्वारा प्रदान की हमारे पास उदाहरण में:

require_once('phpQuery/phpQuery.php'); 

phpQuery::browserGet('http://google.com/', 'success1'); 

function success1($browser) 
{ 
    $browser->WebBrowser('success2') 
    ->find('input[name=q]')->val('search phrase') 
    ->parents('form') 
    ->submit(); 
} 

function success2($browser) 
{ 
    echo $browser; 
} 

मैं सभी अन्य क्षेत्रों खत्म कर दिया जाता है लगता है और GET अनुरोध में वापस भेज , मैं phpQuery :: browserPost() विधि के साथ ऐसा करना चाहता हूं लेकिन मुझे नहीं पता कि यह कैसे करें। जिस फ़ॉर्म को मैं स्क्रैप करने की कोशिश कर रहा हूं वह एक इनपुट टोकन है और मुझे प्यार होगा अगर phpQuery टोकन को स्क्रैप करने के लिए पर्याप्त स्मार्ट हो सकता है और बस मुझे अन्य फ़ील्ड (इस मामले में उपयोगकर्ता नाम और पासवर्ड) को बदलने दें, पोस्ट सब कुछ के माध्यम से सबमिट करना।

पुनश्च: निश्चिंत रहें, इस नहीं स्पैमिंग के लिए इस्तेमाल किया जा करने के लिए जा रहा है।

+2

+1 का उत्तर नहीं है लेकिन अन्य टिप्पणियों के लिए तत्पर हैं – Andrew

+0

यदि मैनुअल स्पष्ट नहीं है तो आप स्रोत कोड –

+1

पढ़ने के लिए प्रयास कर सकते हैं जीवन इन दिनों स्पैमर के लिए बहुत कठिन है। –

उत्तर

2

http://code.google.com/p/phpquery/wiki/Ajax और विशेष रूप से देखें:

phpQuery::post($url, $data, $callback, $type)

और

# data Object, String है जो या तो एक वस्तु या एक स्ट्रिंग होने के रूप में डेटा पैरामीटर परिभाषित करता है। पोस्ट अनुरोध क्वेरी स्ट्रिंग प्रारूप, जैसे का उपयोग कर संभव हो जाना चाहिए:

$data = "username=Jon&password=123456"; 
$url = "http://www.mysite.com/login.php"; 
phpQuery::post($url, $data, $callback, $type) 

रूप phpQuery है एक jQuery बंदरगाह विधि हस्ताक्षर एक ही (डॉक्स jQuery साइट से सीधे लिंक - http://docs.jquery.com/Ajax/jQuery.post) है

संपादित

दो बातें:

वहाँ भी है एक phpQuery::browserPost समारोह जो आपके n पूरा हो सकता है बेहतर खाता है।

हालांकि, यह भी ध्यान दें कि सफलता 2 कॉलबैक केवल submit() or click() विधियों पर बुलाया जाता है ताकि आप इससे पहले सभी फॉर्म फ़ील्ड भर सकें।

उदा।

require_once('phpQuery/phpQuery.php'); 
phpQuery::browserGet('http://www.mysite.com/login.php', 'success1'); 
function success1($browser) { 
    $handle = $browser 
    ->WebBrowser('success2'); 
    $handle 
    ->find('input[name=username]') 
     ->val('Jon'); 
    $handle 
    ->find('input[name=password]') 
     ->val('123456'); 
     ->parents('form') 
     ->submit(); 
} 
function success2($browser) { 
    print $browser; 
} 

(ध्यान दें कि यह परीक्षण नहीं किया गया है, लेकिन काम करना चाहिए)

+0

कृपया मेरा अपडेट जांचें। –

1

मैंने पहले भी इस तरह के सामान के लिए SimpleTest's ScriptableBrowser का उपयोग किया है। यह सिंपलटेस्ट परीक्षण ढांचे का हिस्सा है, लेकिन आप इसे अकेले इस्तेमाल कर सकते हैं।

0

मैं एचटीएमएल फाइलों को पार्स करने और HTTP अनुरोधों को संसाधित करने के लिए एक समर्पित पुस्तकालय के लिए समर्पित पुस्तकालय का उपयोग करूंगा। दोनों के लिए एक ही लाइब्रेरी का उपयोग करना एक बुरा विचार, आईएमओ जैसा लगता है।

HTTP अनुरोधों को संसाधित करने के लिए, उदाहरण के लिए देखें। Httpful, Unirest, Requests या Guzzle। Guzzle इन दिनों विशेष रूप से लोकप्रिय है, लेकिन अंत में, जो भी पुस्तकालय आपके लिए सबसे अच्छा काम करता है अभी भी व्यक्तिगत स्वाद का मामला है।

एचटीएमएल फाइलों को पार्स करने के लिए मैं एक पुस्तकालय की सिफारिश करता हूं जिसे मैंने स्वयं लिखा था: DOM-Query। यह आपको (1) एक HTML फ़ाइल लोड करने की अनुमति देता है और फिर (2) अपने एचटीएमएल के कुछ हिस्सों को चुन या बदलता है, वैसे ही अगर आप फ्रंटएंड ऐप में jQuery का उपयोग करेंगे तो आप इसे करेंगे।

संबंधित मुद्दे