我已经在php上编写了一个网络抓取工具,我正在使用以下方法:
当前方法
function getPublicationData($url){
static $seen = array();
if (isset($seen[$url])) {
return;
}
$seen[$url] = true;
$cURL = curl_init($url);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
$htmlDoc = curl_exec($cURL);
$dom= new DOMDocument('1.0');
libxml_use_internal_errors(true);
$dom->loadHTML($htmlDoc);
$dom_xpath = new DOMXPath($dom);
$strongElements = $dom_xpath->query("//strong[@class='publication-meta-type']");
foreach( $strongElements as $strongElement){
echo $strongElement->nodeValue;
}
}
问题是php有30秒的时间限制,我需要访问相当多的页面(我的主机不允许我更改时间限制)。
能够从页面中只获得一些特定节点或类似的东西会很好。
有人可以给我一个解决方案吗?
答案 0 :(得分:1)
耗时部分几乎肯定是HTTP请求。你没办法加快速度。
解决方案?是时候换个新主人了。
答案 1 :(得分:1)
使用html&#39>对您的数据库进行异步调用。
第一部分
substr_replace()
第二部分
创建一个cron作业,或者调用你的函数来解析数据的另一种方法,并保存在你的数据库中:
static $seen = array();
if (isset($seen[$url])) {
return;
}
$seen[$url] = true;
$cURL = curl_init($url);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
$htmlDoc = curl_exec($cURL);
//save in file, database, whatever