Я пытаюсь вытащить некоторые URL-адреса изображений из страниц Steam store, например: http://store.steampowered.com/app/35700/
http://store.steampowered.com/app/252490/
Вот код, который я использую:
$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'); }
Он отлично работает с первой страницей магазина, а второй перенаправляет страницу проверки возраста, и скрипт возвращает изображения оттуда. Мне нужно, чтобы сценарий прошел проверку возраста и доступ к реальной странице магазина.
Любая помощь будет оценена по достоинству.
Редактировать:
Это то, что передается серверу при представлении возрастной формы:
snr=1_agecheck_agecheck__age-gate&ageDay=1&ageMonth=January&ageYear=1979
и файлы cookie, которые он устанавливает:
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:
Я могу установить cookie с помощью cURL, но они не используются DOM loadHTML, поэтому я получаю тот же результат, что и раньше. Мне нужен либо способ загрузкиHTML для использования определенных файлов cookie, которые я установил, либо другой метод захвата URL-адресов изображений, которые будут использовать куки, установленные cURL.
Решено! Вот рабочий код:
$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);
Вы искали ответы на php, но я пытался сделать то же самое в python, и это был самый актуальный вопрос. Ответ на php помог мне, поэтому, возможно, решение python поможет кому-то. Мое решение с использованием python-запросов в Python 2.7:
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')