Maison  >  Article  >  développement back-end  >  Crawler PHP pratique pour explorer Sina News

Crawler PHP pratique pour explorer Sina News

WBOY
WBOYoriginal
2023-06-13 14:55:121025parcourir

Avec le développement d'Internet, l'information a explosé et l'actualité représente la plus grande proportion d'information. Afin d’obtenir plus rapidement les informations les plus récentes et les plus précieuses, les gens parcourent généralement les dernières informations sur les sites Web d’actualités. Cependant, la quantité totale d’actualités qu’une personne peut lire chaque jour est limitée, nous avons donc besoin d’un outil efficace pour explorer les informations d’actualité. Cet article partagera l'expérience pratique de l'exploration de Sina News à l'aide d'un programme d'exploration implémenté en PHP.

1. Connaissance de base des robots d'exploration

Un robot d'exploration est un programme automatisé. Sa fonction est de simuler un navigateur effectuant une requête, d'analyser les données de page renvoyées, d'extraire les informations requises et de les enregistrer ou de les télécharger. Les langages de programmation de robots courants incluent Python, Java, JavaScript, etc. Cet article choisit le langage PHP pour écrire des programmes d'exploration car le langage PHP est très approprié pour le développement Web et il possède de nombreuses fonctions de requête HTTP puissantes et des bibliothèques d'analyse DOM, qui peuvent facilement effectuer l'exploration de pages Web et l'extraction d'informations.

2. Écrivez un programme d'exploration

1. Déterminez le site Web cible

Avant de commencer à écrire un programme d'exploration, vous devez d'abord déterminer le site Web cible que vous souhaitez explorer. Cet article choisit le site d'actualités Sina. Tout d’abord, nous devons comprendre la structure de la page Web et la méthode de stockage des données du site Web.

2. Simulez le navigateur pour faire une demande

Pour réussir à obtenir les données du site Web cible, vous devez simuler le navigateur pour faire une demande au site Web cible. En PHP, nous pouvons utiliser la bibliothèque de fonctions cURL pour accomplir ce processus. Par exemple :

$url = 'http://news.sina.com.cn/';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html = curl_exec($ch);
curl_close($ch);

Ce code utilise cURL pour émettre une requête GET, et l'adresse de la requête est la page d'accueil de Sina News. Nous pouvons voir que certains paramètres sont utilisés dans la requête, tels que : CURLOPT_RETURNTRANSFER est utilisé pour indiquer à la fonction cURL de renvoyer le résultat de la requête au lieu de le sortir directement au navigateur ; CURLOPT_USERAGENT ; code> Il est utilisé pour simuler l'identité du navigateur afin que le site Web cible ne se prémunisse pas contre nos robots d'exploration ; CURLOPT_FOLLOWLOCATION est utilisé pour suivre automatiquement les redirections afin que le code source complet de la page puisse être obtenu. CURLOPT_RETURNTRANSFER 用于告诉 cURL 函数要返回请求结果而不是直接将其输出到浏览器;CURLOPT_USERAGENT 用于模拟浏览器的身份,让目标网站不会防范我们的爬虫;CURLOPT_FOLLOWLOCATION 用于自动跟踪重定向,以便能够获取到完整的页面源代码等。

3.解析页面数据

在成功获取到页面源代码后,我们需要解析数据并提取出所需的信息。解析过程可以分为两个步骤:首先,将 HTML 代码转换成 DOM 对象,反映了文档结构的层次关系;然后,再从 DOM 对象中根据相应的语法规则筛选出需要的信息。

在 PHP 中,我们可以借助 DOMDocument 类与 SimpleXMLElement 类来解析 HTML 和 XML 代码。例如,以下代码片段中,我们从新浪新闻首页中提取出了新闻标题、链接和摘要:

//创建 DOM 对象
$dom = new DOMDocument();

//HTML 代码转 DOM 对象
$dom->loadHTML($html);

//获取所有新闻列表
$newsList = $dom->getElementById('syncad_1');

//遍历新闻列表并提取信息
foreach ($newsList->getElementsByTagName('li') as $item) {
    
    //提取标题链接
    $linkNode = $item->getElementsByTagName('a')->item(0);
    $link = $linkNode->getAttribute('href');
    
    //提取标题
    $titleNode = $linkNode->getElementsByTagName('span')->item(0);
    $title = $titleNode->nodeValue;
    
    //提取摘要
    $summaryNode = $item->getElementsByTagName('p')->item(0);
    $summary = $summaryNode->nodeValue;
    
    //保存数据到数组中
    $data[] = [
        'title' => $title,
        'link' => $link,
        'summary' => $summary
    ];
}

在上面的代码示例中,我们首先使用 getElementById 方法获取到所有的新闻列表,然后使用 getElementsByTagName 方法筛选出其中的 li 元素,并遍历该列表以提取出所需信息。其中,我们使用了 getAttribute 方法和 nodeValue 方法来提取属性值和文本内容。

4.保存数据

成功提取出所需信息后,我们需要将其保存到本地文件或数据库中以便后续的使用。在本文中,我们使用了 MySQL 数据库来保存数据,并使用了 PHP 自带的 PDO 扩展来实现与数据库的连接与操作。以下是保存数据到 MySQL 数据库中的代码示例:

//数据库连接
$dsn = 'mysql:host=127.0.0.1;dbname=news;charset=utf8';
$username = 'root';
$password = '123456';
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
$pdo = new PDO($dsn, $username, $password, $options);

//保存数据到数据库中
$stmt = $pdo->prepare("INSERT INTO news (title, link, summary) VALUES (:title, :link, :summary)");
foreach ($data as $item) {
    $stmt->bindParam(':title', $item['title']);
    $stmt->bindParam(':link', $item['link']);
    $stmt->bindParam(':summary', $item['summary']);
    $stmt->execute();
}

在上述代码中,我们首先创建了一个名为 news 的表,用于保存新闻的标题、链接和摘要信息。之后,利用 PDO 函数库实现对 MySQL 数据库的连接、预处理、参数绑定、执行等步骤。这里我们使用了 bindParam

3. Analyser les données de la page

Après avoir obtenu avec succès le code source de la page, nous devons analyser les données et extraire les informations requises. Le processus d'analyse peut être divisé en deux étapes : premièrement, convertir le code HTML en un objet DOM, qui reflète la relation hiérarchique de la structure du document ; ensuite, filtrer les informations requises de l'objet DOM selon les règles de syntaxe correspondantes.

En PHP, nous pouvons utiliser la classe DOMDocument et la classe SimpleXMLElement pour analyser les codes HTML et XML. Par exemple, dans l'extrait de code suivant, nous extrayons les titres d'actualités, les liens et les résumés de la page d'accueil de Sina News : 🎜rrreee🎜Dans l'exemple de code ci-dessus, nous utilisons d'abord la méthode getElementById pour obtenir toutes les actualités. list, puis utilisez la méthode getElementsByTagName pour filtrer les éléments li et parcourez la liste pour extraire les informations requises. Parmi elles, nous avons utilisé la méthode getAttribute et la méthode nodeValue pour extraire la valeur de l'attribut et le contenu du texte. 🎜🎜4. Enregistrer les données🎜🎜Après avoir extrait avec succès les informations requises, nous devons les enregistrer dans un fichier local ou une base de données pour une utilisation ultérieure. Dans cet article, nous utilisons la base de données MySQL pour enregistrer les données et utilisons l'extension PDO fournie avec PHP pour nous connecter et utiliser la base de données. Voici un exemple de code pour enregistrer des données dans une base de données MySQL : 🎜rrreee🎜Dans le code ci-dessus, nous créons d'abord une table nommée news pour enregistrer le titre, le lien et les informations récapitulatives de l'actualité. Ensuite, utilisez la bibliothèque de fonctions PDO pour implémenter des étapes telles que la connexion, le prétraitement, la liaison des paramètres et l'exécution de la base de données MySQL. Ici, nous utilisons la méthode bindParam pour lier les paramètres et exécuter des instructions SQL. 🎜🎜3. Résumé🎜🎜Cet article présente comment utiliser le langage PHP pour écrire un programme d'exploration pour explorer le site Web d'actualités Sina à titre d'exemple. Dans ce processus, l'exemple de code comprend des étapes telles que l'exploration de la cible, l'émission d'une requête, l'analyse des données et l'enregistrement des données. Dans la pratique, vous devrez peut-être également prendre en compte certaines mesures anti-exploration de sites Web, le nettoyage des données, l'exploration multithread et d'autres problèmes, mais il s'agit de technologies d'exploration plus avancées et peuvent être étudiées en profondeur dans des études futures. 🎜

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