DOM

2014-03-03 2 views
5

내가 같은 스팀 상점 페이지에서 일부 이미지 URL, 당기하려고 해요와 연령 확인을 전달하는 방법 :DOM

$url = 'http://store.steampowered.com/app/35700/'; 
$html = file_get_contents($url); 
$dom = new domDocument; 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$images = $dom->getElementsByTagName('img'); 
foreach ($images as $image) { 
    echo $image->getAttribute('src'); 
} 
: http://store.steampowered.com/app/35700/
다음 http://store.steampowered.com/app/252490/

내가 사용하고 코드의를

첫 번째 저장소 페이지에서는 제대로 작동하지만 두 번째 페이지에서는 연령 확인 페이지로 리디렉션되고 스크립트는 거기에서 이미지를 반환합니다. 스크립트가 연령 확인을 통과하여 실제 상점 페이지에 액세스 할 수있는 방법이 필요합니다.

도움을 주시면 감사하겠습니다.

편집 :이 설정

snr=1_agecheck_agecheck__age-gate&ageDay=1&ageMonth=January&ageYear=1979 

및 쿠키 :

lastagecheckage=1-January-1979; expires=Tue, 03 Mar 2015 19:53:42 GMT; path=/; domain=store.steampowered.com 
birthtime=662716801; path=/; domain=store.steampowered.com 

Edit2가를 :

이 시대의 양식을 제출하는 서버에 전달 무슨이다

cURL을 사용하여 쿠키를 설정할 수 있지만 DOM loadHTML에서 쿠키를 사용하지 않으므로 동일한 결과가 나타납니다. 전에. 내가 설정 한 특정 쿠키를 사용하는 loadHTML 또는 cURL에 의해 설정된 쿠키를 사용할 이미지 URL을 가져 오는 다른 방법이 필요합니다.

+3

리디렉션을 따르도록 허용하라는 전화. –

+0

나이 확인 양식의 코드와이 쿠키가 설정 한 쿠키를 찾았지만 어디에서부터 나가야할지 모르겠습니다. (편집 된 메인 포스트 정보와 함께) – Martok

+0

당신은 아마도 쿠키를 얻는 것을 처리하기 위해 cURL과 같은 것을 사용할 필요가있을 것이고, 두 번째 요청에 사용할 수 있도록 저장해야 할 것입니다. –

답변

5

해결! 여기에 작업 코드입니다 :

$url = 'http://store.steampowered.com/app/35700/'; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_COOKIE, "birthtime=28801; path=/; domain=store.steampowered.com"); 
curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$result = curl_exec($ch); 

$dom = new domDocument; 
libxml_use_internal_errors(true); 
$dom->loadHTML($result); 
$dom->preserveWhiteSpace = false; 

$images = $dom->getElementsByTagName('img'); 
foreach ($images as $image) { 
    $src = $image->getAttribute('src'); 
    echo $src.PHP_EOL; 
} 

curl_close($ch); 
4

당신은 PHP의 답을 찾고 있었다, 그러나 나는 파이썬에서 같은 일을 시도하고 있었다 이것은 가장 관련성이 질문했다. 귀하의 PHP 응답 나를 도와 그래서 어쩌면 파이썬 솔루션 누군가를 도울 것입니다. 파이썬 2.7 python-requests를 사용하여 내 솔루션 :

import requests 

    url = 'http://store.steampowered.com/app/252490/' 
    cookie = { 
      'birthtime' : '28801', 
      'path' : '/', 
      'domain' : 'store.steampowered.com' 
      } 

    r = requests.get(url, cookies=cookie) 
    assert (r.status_code == 200 and r.text.find('Please enter your birth date to continue') < 0), ("Failed to retrieve page for {url}. Error={code}.".format(url=url, code=r.status_code)) 

    print r.text.encode('utf-8') 
당신이 그것을 동적없는 한, 당신이 불을 지르고 등을 통해 발굴 할 수있는 특정 값을 전달하고 당신이 당신의 API를 상상할 것