simple html dom 未能打开站点流
simple html dom failed to open stream for a site
我正在尝试解析 http://whatismyip.com 页面并获取我的位置(州和国家/地区)。数据似乎在 <table class="table">
标签内,所以我正在寻找 "table"。
但是我弄错了Warning: file_get_contents(https://whatismyip.com): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in C:\xampp4\htdocs\scraping\libs\simple_html_dom.php on line 1081
不知道哪里出了问题。
<?php
require_once('libs/simple_html_dom.php');
$html=new simple_html_dom();
$html->load_file('https://whatismyip.com');
$element=$html->find("table");
?>
该网站正在检查请求的 User-Agent
header,但 PHP 不发送任何请求(默认情况下)。您必须 "impersonate" 一个浏览器:
$context = stream_context_create(array(
'http' => array(
'header' => array('User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201'),
),
));
$html = file_get_contents('http://whatismyip.com/', false, $context);
// do what you want with the $html
更好(更快)的选择是为此使用一些库。我以前用过 GeoIP2-php,但我确定还有更多。
基本上你的例子很好,但这里的错误很简单html dom 类 不使用 Https 所以尝试另一种方法
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, "https://whatismyip.com");
curl_setopt($curl, CURLOPT_REFERER, "https://whatismyip.com");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201');
$str = curl_exec($curl);
curl_close($curl);
然后使用您的代码
$html->load_file($str);
$element=$html->find("table");
编辑 添加用户代理以模拟真实的导航器(感谢 ShiraNai7)
尝试使用以下命令更改用户代理 -
ini_set("user_agent","Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0");
这样就可以正常工作了!
我正在尝试解析 http://whatismyip.com 页面并获取我的位置(州和国家/地区)。数据似乎在 <table class="table">
标签内,所以我正在寻找 "table"。
但是我弄错了Warning: file_get_contents(https://whatismyip.com): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in C:\xampp4\htdocs\scraping\libs\simple_html_dom.php on line 1081
不知道哪里出了问题。
<?php
require_once('libs/simple_html_dom.php');
$html=new simple_html_dom();
$html->load_file('https://whatismyip.com');
$element=$html->find("table");
?>
该网站正在检查请求的 User-Agent
header,但 PHP 不发送任何请求(默认情况下)。您必须 "impersonate" 一个浏览器:
$context = stream_context_create(array(
'http' => array(
'header' => array('User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201'),
),
));
$html = file_get_contents('http://whatismyip.com/', false, $context);
// do what you want with the $html
更好(更快)的选择是为此使用一些库。我以前用过 GeoIP2-php,但我确定还有更多。
基本上你的例子很好,但这里的错误很简单html dom 类 不使用 Https 所以尝试另一种方法
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, "https://whatismyip.com");
curl_setopt($curl, CURLOPT_REFERER, "https://whatismyip.com");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201');
$str = curl_exec($curl);
curl_close($curl);
然后使用您的代码
$html->load_file($str);
$element=$html->find("table");
编辑 添加用户代理以模拟真实的导航器(感谢 ShiraNai7)
尝试使用以下命令更改用户代理 -
ini_set("user_agent","Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0");
这样就可以正常工作了!