我正在尝试从 Steam 商店页面中提取一些图像 URL,例如: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');
}
它在第一个商店页面上运行良好,但第二个商店页面重定向到年龄验证页面,并且脚本从那里返回图像。我需要一种方法让脚本通过年龄验证并访问实际的商店页面。
任何帮助,将不胜感激。
Edit:
这是提交年龄表单时传递到服务器的内容:
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:
我可以使用 cURL 设置 cookie,但 DOM loadHTML 不使用它们,因此我得到与以前相同的结果。我需要一种方法让 loadHTML 使用我设置的特定 cookie,或者另一种方法来获取将使用 cURL 设置的 cookie 的图像 URL。
解决了!这是工作代码:
$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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)