我有一个网址,可以使用file_get_contents()废弃它并收集内部链接:
http://www.140online.com/Class/450/%D8%B3%D9%88%D8%A8%D8%B1%20%D9%85%D8%A7%D8%B1%D9%83%D8%AA
这是结果数组:
Array
(
[0] => /company/C79955/المصرية ماركت - امام منصور امام/
[1] => /company/C574901/مريم ماركت/
[2] => /company/C1131/سوبر ماركت اولاد رجب/
[3] => /company/C19699/البركه/
[4] => /company/C21707/سوبر ماركت بست باى/
[5] => /company/C23552/الشامل مى ماركت/
[6] => /company/C21714/سوبر ماركت التميمى/
[7] => /company/C171121/الجزيره/
[8] => /company/C172099/الحمد ماركت/
[9] => /company/C172325/الخشاب ماركت/
[10] => /company/C174805/الدكان ماركت/
[11] => /company/C183996/اسواق الشمس المركزيه/
[12] => /company/C184039/اسواق مرحبا/
[13] => /company/C189580/البحيرى ماركت/
[14] => /company/C216371/سوق زمزم/
[15] => /company/C216941/سيتى ارت/
[16] => /company/C226223/وجينات محمد سعيد محمد موسى/
[17] => /company/C297432/ماركت اولاد محمود/
[18] => /company/C326553/سوبر ماركت عمرو عبد السلام سالم محمد/
[19] => /company/C326566/سوبر ماركت عونى عزيز هنرى/
)
然后我需要废弃每个链接以获取一些数据,但这是问题所在!
使用我之前添加域名的任何链接。
http://www.140online.com/company/C79955/المصريةماركت - اماممنصورامام/
但是当我尝试获取它的内容时,它会向我发送此错误:
file_get_contents(http://www.140online.com/company/C79955/%D8%A7%D9%84%D9%85%D8%B5%D8%B1%D9%8A%D8%A9%20%D9%85%D8%A7%D8%B1%D9%83%D8%AA%20-%20%D8%A7%D9%85%D8%A7%D9%85%20%D9%85%D9%86%D8%B5%D9%88%D8%B1%20%D8%A7%D9%85%D8%A7%D9%85/):无法打开流:HTTP请求失败! HTTP / 1.1 500内部服务器错误
虽然我按照爆炸显示的方式对阿拉伯语部分进行编码:
$url_ex = explode("/", $itm_url[$i]);
$i_url = 'http://'.$url_ex[2].'/'.$url_ex[3].'/'.$url_ex[4].'/'.rawurlencode($url_ex[5]).'/';
另一个奇怪的事情是我可以获得一些链接的内容,但不是所有
请帮助
答案 0 :(得分:0)
我在使用file_get_contents进行网页抓取方面遇到了一些问题。我建议使用CURL。该库返回HTTP错误代码以了解您遇到的问题。
http://php.net/manual/en/book.curl.php
这是一个如何使用CURL的例子,我希望它有效。
$ch1 = curl_init('string_url');
$options1 = array(CURLOPT_POST => true,
CURLOPT_HEADER => $request_headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_POSTFIELDS => (if u need to send params)
);
curl_setopt_array($ch1, $options1);
$page = curl_exec($ch1);
if(curl_exec($ch1) === false)
{
\print_r(curl_error($ch1));
//HTTP and many other errors if you have it
}
curl_close($ch1);
$dom = new \DOMDocument();
$dom->validateOnParse = true;
$dom->preserveWhiteSpace = false;
$dom->substituteEntities = false;
//Load Document Object Model
$dom->loadHTML($page);
$domxPath = new \DOMXPath($dom);
$urls = $domxPath->query("/html/body//div[@class='urls']");
//Example here searchs all divs which has urls class
//You need to specify which element of DOM contains URLS
//$urls variable must contains an array with urls that you need