मुझे PHP में वेब पेज का HTML कोड कैसे मिलेगा?


91

मैं PHP में एक लिंक (वेब ​​पेज) के HTML कोड को पुनः प्राप्त करना चाहता हूं। उदाहरण के लिए, यदि लिंक है

/programming/ask

फिर मुझे उस पृष्ठ का HTML कोड चाहिए, जिसे परोसा गया हो। मैं इस HTML कोड को पुनः प्राप्त करना चाहता हूं और इसे PHP चर में संग्रहीत करना चाहता हूं।

मैं यह कैसे कर सकता हूँ?


क्या आप इसे और अधिक समझा सकते हैं। आप किसी दिए गए URL पर एक वेब अनुरोध भेजना चाहते हैं और एक वैरिएबल I की प्रतिक्रिया को पढ़ सकते हैं?
चतुरंगा चंद्रशेखर

हां, एक ही बात मैं चाहता हूं, मैं चाहता हूं कि उस वेब अनुरोध द्वारा लौटाए गए एक चर में पूरे स्रोत कोड।
प्रशांत

1
आप आसानी से html को स्क्रैप करने के लिए इस टूल का उपयोग कर सकते हैं ।
फराज केल्हिनी

यहां तक ​​कि allow_url_fopen को सही पर सेट करने के बावजूद, यह फ़ंक्शन पृष्ठ का HTML वापस नहीं करता है? मुझे और क्या जाँच करनी चाहिए?
CodeForGood

जवाबों:


140

यदि आपका PHP सर्वर url fopen रैपर की अनुमति देता है तो सबसे सरल तरीका है:

$html = file_get_contents('/programming/ask');

यदि आपको अधिक नियंत्रण की आवश्यकता है तो आपको cURL कार्यों को देखना चाहिए :

$c = curl_init('/programming/ask');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
//curl_setopt(... other options you want...)

$html = curl_exec($c);

if (curl_error($c))
    die(curl_error($c));

// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);

curl_close($c);

मैं 404 के बारे में चिंतित हूं। यदि लिंक मौजूद नहीं है, तो मुझे इसकी सामग्री नहीं चाहिए, इसके बजाय मैं एक त्रुटि संदेश प्रदर्शित करना चाहता हूं ?? हमें कैसे पता चलेगा कि url 404 त्रुटि दे रहा है या नहीं (केवल menas URL काम कर रहा है या नहीं)?
प्रशांत

1
@Prashant: मैंने एक curl_getinfo कॉल जोड़ने के लिए संपादित किया है जो आपको २०० या ४०४ या जो भी देगा
ग्रेग

यह भी कैसे संभव है कि PHP को वर्तमान पृष्ठ HTML प्राप्त हो?
रेनो सैंटोस

क्या यह क्रॉस-डोमेन है?
I.Am.A.Guy

PHP7 पर काम नहीं करेगा। Php.ini की जाँच की और fopen चालू है।
कास्पर एल। पाल्गी

22

यदि आप किसी भी तरह से पुनः प्राप्त पृष्ठ में हेरफेर करना चाहते हैं, तो आप कुछ php DOM पार्सर की कोशिश कर सकते हैं। मुझे PHP Simple HTML DOM Parser उपयोग करने में बहुत आसान लगता है।


11

आप याहू से YQL पुस्तकालयों की जाँच करना चाहते हो सकता है: http://developer.yahoo.com/yql

हाथ में काम के रूप में सरल है

select * from html where url = 'http://stackoverflow.com/questions/ask'

आप इसे कंसोल में देख सकते हैं: http://developer.yahoo.com/yql/console (लॉगिन की आवश्यकता)

कुछ अच्छे विचारों के लिए क्रिस हेइल्मन्स स्क्रेंकास्ट भी देखें कि आप और क्या कर सकते हैं: http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_formform.html


10

सरल तरीका: उपयोग file_get_contents():

$page = file_get_contents('http://stackoverflow.com/questions/ask');

कृपया ध्यान दें कि allow_url_fopenहोना चाहिए trueआप में php.iniयूआरएल को अवगत करने fopen रैपर उपयोग करने के लिए सक्षम होने के लिए।

और अधिक उन्नत तरीका: आप अपने PHP विन्यास को नहीं बदल सकते हैं, allow_url_fopenहै falseडिफ़ॉल्ट रूप से और ext / कर्ल स्थापित किया गया है, का उपयोग cURLपुस्तकालय इच्छित पृष्ठ से कनेक्ट करने के।


यहां तक ​​कि allow_url_fopen को सही पर सेट करने के बावजूद, यह फ़ंक्शन पृष्ठ का HTML वापस नहीं करता है? मुझे और क्या जाँच करनी चाहिए?
CodeForGood

4

यदि आप स्रोत को एक चर के रूप में संग्रहित करना चाहते हैं, तो file_get_contents का उपयोग कर सकते हैं हालांकि कर्ल एक बेहतर अभ्यास है।

$url = file_get_contents('http://example.com');
echo $url; 

यह समाधान आपकी साइट पर वेबपृष्ठ प्रदर्शित करेगा। हालाँकि कर्ल एक बेहतर विकल्प है।



3
include_once('simple_html_dom.php');
$url="http://stackoverflow.com/questions/ask";
$html = file_get_html($url);

आप इस कोड का उपयोग करके पूरे HTML कोड को एक सरणी (पार्स फॉर्म) के रूप में प्राप्त कर सकते हैं यहां 'simple_html_dom.php' फ़ाइल डाउनलोड करें http://sourceforge.net/projects/simplehtmldom/files/simple_html_dom.php/download


2

URL से सामग्री प्राप्त करने के दो अलग-अलग, सरल तरीके हैं :

1) पहली विधि

अपनी होस्टिंग (php.ini या कहीं से) Allow_url_include सक्षम करें

<?php
$variableee = readfile("http://example.com/");
echo $variableee;
?> 

या

2) दूसरी विधि

Php_curl, php_imap और php_openssl सक्षम करें

<?php
// you can add anoother curl options too
// see here - http://php.net/manual/en/function.curl-setopt.php
function get_dataa($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

$variableee = get_dataa('http://example.com');
echo $variableee;
?>

1

आप एक व्यक्ति HTML टैग स्तर चर भी प्राप्त करने के लिए DOMDocument विधि का उपयोग कर सकते हैं

$homepage = file_get_contents('https://www.example.com/');
$doc = new DOMDocument;
$doc->loadHTML($homepage);
$titles = $doc->getElementsByTagName('h3');
echo $titles->item(0)->nodeValue;

1

$output = file("http://www.example.com");जब तक मैं सक्षम काम नहीं किया: allow_url_fopen, allow_url_include,और file_uploadsमें php.iniPHP7 के लिए


0

मैंने इस कोड की कोशिश की और यह मेरे लिए काम कर रहा है।

$html = file_get_contents('www.google.com');
$myVar = htmlspecialchars($html, ENT_QUOTES);
echo($myVar);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.