Maison >développement back-end >tutoriel php >Un article expliquant en détail comment écrire un robot en utilisant PHP
En parlant de robots d'exploration, la première impression de chacun sera Python, mais tout le monde ne connaît pas Python, alors d'autres langages peuvent-ils être utilisés pour écrire des robots d'exploration ? Bien sûr, c'est possible. Présentons comment utiliser PHP pour écrire un robot.
Récupérer le contenu html de la page
1 Utilisez la fonction file_get_contents pour lire l'intégralité du fichier dans une chaîne.
file_get_contents(path,include_path,context,start,max_length); file_get_contents('https://fengkui.net/');
De cette façon, le contenu html de la page entière peut être lu dans une chaîne, puis analysé
2 Utilisez CURL pour faire des requêtes et obtenir du html
/** * [curlHtml 获取页面信息] * @param [type] $url [网址] * @return [type] [description] */ function curlHtml($url) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "{$url}", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "Accept-Encoding: gzip, deflate, br", "Accept-Language: zh-CN,zh;q=0.9", "Cache-Control: no-cache", "Connection: keep-alive", "Pragma: no-cache", "Upgrade-Insecure-Requests: 1", "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36", "cache-control: no-cache" ), )); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) return false; else return $response; }
En utilisant Curl, nous pouvons effectuer d'autres opérations, telles que. navigation simulée Le serveur simule la connexion et certaines autres opérations avancées.
Analysez le HTML de la page et obtenez les données requises
1. Obtenez régulièrement le contenu
/** * [get_tag_data 使用正则获取html内容] * @param [type] $html [爬取的页面内容] * @param [type] $tag [要查找的标签] * @param [type] $attr [要查找的属性名] * @param [type] $value [属性名对应的值] * @return [type] [description] */ function get_tag_data($html,$tag,$attr,$value){ $regex = "/<$tag.*?$attr=\".*?$value.*?\".*?>(.*?)<\/$tag>/is"; preg_match_all($regex,$html,$matches,PREG_PATTERN_ORDER); $data = isset($matches[1][0]) ? $matches[1][0] : ''; return $data; } $str = '<div class="feng">冯奎博客</div>'; $value = get_tag_data($str, 'div', 'class', 'feng');
2 Utilisez XPath pour analyser les données
XPath est le langage de chemin XML (XML Path Language), qui est une méthode utilisée pour déterminer le contenu des documents XML La langue d'un certain emplacement. Pour les méthodes d'utilisation spécifiques et les introductions associées, consultez l'Encyclopédie Baidu (XPath). Méthodes d'utilisation :
/** * [get_html_data 使用xpath对获取到的html内容进行处理] * @param [type] $html [爬取的页面内容] * @param [type] $path [Xpath语句] * @param integer $tag [类型 0内容 1标签内容 自定义标签] * @param boolean $type [单个 还是多个(默认单个时输出单个)] * @return [type] [description] */ function get_html_data($html,$path,$tag=1,$type=true) { $dom = new \DOMDocument(); @$dom->loadHTML("<?xml encoding='UTF-8'>" . $html); // 从一个字符串加载HTML并设置UTF8编码 $dom->normalize(); // 使该HTML规范化 $xpath = new \DOMXPath($dom); //用DOMXpath加载DOM,用于查询 $contents = $xpath->query($path); // 获取所有内容 $data = []; foreach ($contents as $value) { if ($tag==1) { $data[] = $value->nodeValue; // 获取不带标签内容 } elseif ($tag==2) { $data[] = $dom->saveHtml($value); // 获取带标签内容 } else { $data[] = $value->attributes->getNamedItem($tag)->nodeValue; // 获取attr内容 } } if (count($data)==1) { $data = $data[0]; } return $data; }
Apprentissage recommandé : "Tutoriel vidéo PHP"
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!