PHP에서 웹 페이지의 HTML 코드를 어떻게 얻습니까?


91

PHP에서 링크 (웹 페이지)의 HTML 코드를 검색하고 싶습니다. 예를 들어, 링크가

/programming/ask

그런 다음 제공되는 페이지의 HTML 코드를 원합니다. 이 HTML 코드를 검색하여 PHP 변수에 저장하고 싶습니다.

어떻게 할 수 있습니까?


더 설명해 주시겠습니까? 주어진 URL에 웹 요청을 보내고 내가 추측하는 변수에 대한 응답을 읽고 싶습니까?
Chathuranga Chandrasekara

예, 내가 원하는 것과 똑같이 웹 요청에 의해 반환되는 변수에 전체 소스 코드가 필요합니다.
Prashant

1
이 도구 를 사용 하여 html을 쉽게 스크랩 할 수 있습니다.
Faraz Kelhini 2014-08-20

allow_url_fopen을 true로 설정해도이 함수는 페이지의 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이 작동하는지 여부)?
Prashant

1
@Prashant : 200 또는 404 또는 무엇이든 제공하는 curl_getinfo 호출을 추가하도록 편집했습니다
Greg

또한 PHP가 현재 페이지 HTML을 어떻게 얻을 수 있습니까?
Renaro Santos 2014

교차 도메인입니까?
I.Am.A.Guy

PHP7에서는 작동하지 않습니다. php.ini 및 fopen이 켜져 있는지 확인했습니다.
Kaspar L. Palgi


11

Yahoo : http://developer.yahoo.com/yql 에서 YQL 라이브러리를 확인할 수 있습니다.

당면한 작업은 다음과 같이 간단합니다.

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

콘솔 ( http://developer.yahoo.com/yql/console) 에서 시도해 볼 수 있습니다 (로그인 필요).

더 많은 작업을 수행 할 수있는 좋은 아이디어는 Chris Heilmanns screencast를 참조하십시오. http://developer.yahoo.net/blogs/theater/archives/2009/04/screencast_collating_distributed_information.html


10

간단한 방법 : 사용 file_get_contents():

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

참고 allow_url_fopen해야합니다 true당신에이 php.iniURL 인식하면 fopen 래퍼를 사용할 수 있습니다.

더 진보 된 방법 : 당신이 당신의 PHP 구성을 변경할 수없는 경우 allow_url_fopen입니다 false기본적으로하고 내선 / 컬이 설치되어있는 경우, 사용하는 cURL라이브러리를 원하는 페이지로 연결할 수 있습니다.


allow_url_fopen을 true로 설정해도이 함수는 페이지의 HTML을 반환하지 않습니까? 그 밖에 무엇을 확인해야합니까?
CodeForGood

4

소스를 변수로 저장하려는 경우 file_get_contents를 사용할 수 있지만 curl이 더 실용적입니다.

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

이 솔루션은 귀하의 사이트에 웹 페이지를 표시합니다. 그러나 컬이 더 나은 옵션입니다.




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

DomDocument 메서드를 사용하여 개별 HTML 태그 수준 변수도 가져올 수 있습니다.

$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_uploadsphp.iniPHP7에 대한


0

나는이 코드를 시도했고 그것은 나를 위해 일하고있다.

$html = file_get_contents('www.google.com');
$myVar = htmlspecialchars($html, ENT_QUOTES);
echo($myVar);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.