Maison  >  Article  >  développement back-end  >  Utilisez file_get_contents et curl pour écrire la collection

Utilisez file_get_contents et curl pour écrire la collection

PHP中文网
PHP中文网original
2017-07-29 18:27:011663parcourir

On constate souvent que les données à utiliser se trouvent toutes sur le même site Internet, et le format de présentation des données est le même. Par exemple, il existe des milliers de produits sur Taobao ou Amazon. Si vous saisissez les informations manuellement, le résultat est le même. La charge de travail sera trop lourde. À ce stade, nous pouvons écrire un programme de collecte pour la collecter et l'afficher directement. Le serveur prend en charge file_get_contents et curl

Ajoutez d'abord une zone de texte et un bouton de soumission à la page. La zone de texte est utilisée pour saisir l'adresse de la page de collection.

La collection doit utiliser la fonction d'interception régulière

function preg_substr($start, $end, $str) // 正则截取函数      
{      
    $temp = preg_split($start, $str);      
    $content = preg_split($end, $temp[1]);      
    return $content[0];      
}


La collection doit utiliser la fonction d'interception de chaîne

function str_substr($start, $end, $str) // 字符串截取函数      
{      
    $temp = explode($start, $str, 2);      
    $content = explode($end, $temp[1], 2);      
    return $content[0];      
}


Il existe également une fonction pour enregistrer le contenu collecté :

function writelog($str)
{
@unlink("log.txt");
$open=fopen("log.txt","a" );
fwrite($open,$str);
fclose($open);
}

Parfois, le contenu collecté est incohérent avec le contenu que nous visualisons via le navigateur, ce qui nous empêche de trouvez l'expression régulière correcte, ici vous pouvez ouvrir le fichier txt enregistré et y trouver la chaîne interceptée correcte.


Si vous avez besoin de collecter des images, vous devez utiliser la fonction image :

function getImage($url, $filename='', $dirName, $fileType, $type=0)
{
    if($url == ''){return false;}
    //获取文件原文件名
    $defaultFileName = basename($url);
    //获取文件类型
    $suffix = substr(strrchr($url,'.'), 1);
    if(!in_array($suffix, $fileType)){
        return false;
    }
    //设置保存后的文件名
    $filename = $filename == '' ? time().rand(0,9).'.'.$suffix : $defaultFileName;
          
    //获取远程文件资源
    if($type){
        $ch = curl_init();
        $timeout = 5;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $file = curl_exec($ch);
        curl_close($ch);
    }else{
        ob_start();
        readfile($url);
        $file = ob_get_contents();
        ob_end_clean();
    }
    //设置文件保存路径
    $dirName = $dirName.'/'.date('Y', time()).'/'.date('m', time()).'/'.date('d',time()).'/';
    if(!file_exists($dirName)){
        mkdir($dirName, 0777, true);
    }
    //保存文件
    $res = fopen($dirName.$filename,'a');
    fwrite($res,$file);
    fclose($res);
    return $dirName.$filename;
}

Ajoutez le code de collection, car ajouter le code de collection ici ne permet pas la soumission, directement au-dessus de l'image ;

Prenons comme exemple une page produit sur Amazon : saisissez un lien produit :

Regardez les résultats de la collecte comme indiqué ci-dessous uniquement. est affiché ici. Il est relativement simple de l'ajouter à la base de données. Maintenant, je vais présenter la collection de liens de saisie automatique de niveau inférieur ou de rotation automatique des pages lorsque j'ai le temps.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn