PHP实现简单爬虫的方法

下面我来详细讲解一下在PHP中实现简单爬虫的方法。

1. 爬虫原理

爬虫是一种自动化的数据抓取程序,实现简单的爬虫需要了解如下基本步骤:

  1. 获取需要抓取的网页内容,可以使用Curlfile_get_contents等函数来获取;
  2. 解析网页内容,提取所需信息,可以使用正则表达式或XPath等方式;
  3. 把抓取到的数据进行处理,最后存储在数据库或文本文件中。

下面我们以一个实例来说明如何实现一个简单的爬虫。

2. 实例一:抓取博客内容并存储

例如,我们有一个博客网站http://www.example.com,现在我们想抓取其中的文章标题和文章链接,并存储到数据库中。

2.1 获取网页内容

我们可以使用Curl函数或file_get_contents函数来获取网页内容。其中Curl函数需要php.ini文件中启用Curl插件,但是相对来说对于数据的筛选会更加简单。file_get_contents函数是PHP自带的函数,更加简单,但是和Curl比,筛选数据要稍微复杂一些。

示例代码:

$url = "http://www.example.com";
$html = file_get_contents($url);

2.2 网页内容解析

使用正则表达式或XPath等方式提取所需信息。这里我们使用XPath。

假设我们要抓取的信息结构为:

<div class="article">
    <h1><a href="http://www.example.com/article1.html">Article Title</a></h1>
</div>

我们需要抓取的信息是文章标题和链接。我们可以使用XPath查询所有的h1标签下的a标签,并分别提取其中的texthref属性。示例代码:

$doc = new DomDocument();
$doc->loadHTML($html);
$xpath = new DomXPath($doc);
$articles = $xpath->evaluate('//div[@class="article"]');
foreach ($articles as $article) {
    $title = $xpath->evaluate('string(h1/a/text())', $article);
    $link = $xpath->evaluate('string(h1/a/@href)', $article);
}

2.3 存储数据

最后将得到的文章标题和链接存储到数据库中,以便快速索引和查询。

示例代码:

// 假设使用 MySQL 数据库
$db = new mysqli("localhost", "username", "password", "blog_db");
$db->query("SET NAMES UTF8");

// 删除已有数据
$db->query("DELETE FROM articles");

// 插入新数据
foreach ($articles as $article) {
    $title = $db->real_escape_string($xpath->evaluate('string(h1/a/text())', $article));
    $link = $db->real_escape_string($xpath->evaluate('string(h1/a/@href)', $article));
    $db->query("INSERT INTO articles (title, link) VALUES ('$title', '$link')");
}

这样,我们的爬虫程序就完成了。

3. 实例二:爬取百度百科词条内容

接下来我们再看一个实例。例如,我们要爬取百度百科词条中的概述、基本信息、正文等内容。

3.1 获取网页内容

百度百科的文章结构比较复杂,我们可以使用Curl函数来获取HTML页面。

示例代码:

$url = "https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86/408485";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($curl);
curl_close($curl);

3.2 网页内容解析

为了提取百度百科词条的概述、基本信息和正文,我们可以使用XPath表达式和CSS选择器。

$doc = new DomDocument();
$doc->loadHTML($html);
$xpath = new DomXPath($doc);

// 概述
$summary = $xpath->query('//div[@class="lemma-summary"]/div[@class="para"]')->item(0)->nodeValue;

// 基本信息
$info_items = $xpath->query('//div[@class="basic-info cmn-clearfix"]/dl/*');
$info = [];
$name = "";
for ($i = 0; $i < $info_items->length; $i++) {
    $item = $info_items->item($i);
    switch ($item->nodeName) {
        // 属性名称
        case "dt":
            $name = $item->nodeValue;
            break;
        // 属性值
        case "dd":
            $value = $item->nodeValue;
            // 删除注释
            $value = preg_replace('/<!--.*?-->/', "", $value);
            $info[$name] = trim($value);
            break;
    }
}

// 正文
$content = $doc->getElementById("lemmaContent-0")->ownerDocument->saveHTML($doc->getElementById("lemmaContent-0"));

3.3 存储数据

最后,我们可以把爬取到的结果存储到数据库或者其他文件中。

示例代码:

$db = new mysqli("localhost", "username", "password", "wiki_db");
$db->query("SET NAMES UTF8");

$insert_sql = "INSERT INTO baike_article (url, summary, content) VALUES ('{$url}', '{$summary}', '{$content}')";
$db->query($insert_sql);

$update_sql = "UPDATE baike_info SET name = ?, value = ? WHERE url = ? AND name = ?";
$stmt = $db->prepare($update_sql);

foreach ($info as $name => $value) {
    $stmt->bind_param("ssss", $url, $value, $url, $name);
    $stmt->execute();
}

这样,我们就完成了爬取百度百科词条的简单爬虫程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现简单爬虫的方法 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 软件测试-MySQL(六:数据库函数)

    软件测试-MySQL(六:数据库函数) 在MySQL中,函数是一些可重用的代码块,用于执行特定的计算或操作。MySQL预定义了许多函数,同时也允许用户自定义函数,这样可以更好地完成特定的操作。 内置函数 MySQL提供了丰富的内置函数,可以方便地用于数据库操作和数据计算。 字符串函数 MySQL提供了许多用于字符串处理的函数,下面介绍其中一些常用的函数。 C…

    PHP 2023年5月27日
    00
  • php异常与错误处理机制概念及使用介绍

    PHP异常与错误处理机制概念及使用介绍 异常和错误 在 PHP 中,错误和异常是不同的概念。错误通常是发生在代码中的语法错误或逻辑错误,如尝试调用未定义的函数、除数为 0 等等。错误会导致代码停止执行,并返回 PHP 内部定义的错误类型,比如 E_NOTICE, E_WARNING 等等。 而异常则是代码在运行期间发生了特殊的情况,比如网络连接异常、数据库连…

    PHP 2023年5月24日
    00
  • php中sprintf与printf函数用法区别解析

    PHP中sprintf与printf函数用法区别解析 概述 sprintf和printf都是PHP中的格式化输出函数,他们可以将变量按照指定格式输出在文字流中,主要区别在于输出的形式不同。 printf函数 printf函数的作用是将格式化的字符串输出到屏幕上,支持类似C语言中的格式化输出。它的基本语法如下: printf(format,arg1,arg2,…

    PHP 2023年5月26日
    00
  • PHP中substr_count()函数获取子字符串出现次数的方法

    当我们需要统计一个字符串中某个子字符串出现的次数时,可以使用PHP的substr_count()函数。使用substr_count()函数只需知道原始字符串和要查找的子字符串即可,函数会返回一个整数值代表子字符串在原始字符串中出现的次数。 以下是使用substr_count()函数获取子字符串出现次数的方法: 语法 substr_count($string,…

    PHP 2023年5月26日
    00
  • php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比

    在 PHP 中,我们可以使用多种函数来在数组中查找元素是否存在,这些函数包括 in_array(),array_search() 和 foreach 循环。这些函数的性能也不尽相同,下面就简要介绍一下这三种方式。 使用 in_array() 函数查找数组元素 in_array() 函数用于检查指定值是否在一个数组中存在。下面是 示例代码: <?php …

    PHP 2023年5月26日
    00
  • 【编码】PHP中文路径问题详解

    1. 问题 低版本的PHP可能会遇到不支持中文路径的情况:  (1) require(‘http://localhost/中文路径/test.php’);  (2) require(‘\中文路径\test.php’);  (3) $file = fopen(‘http://localhost/中文路径/test.php’);  (4) $file = fop…

    PHP 2023年4月18日
    00
  • php实现简单四则运算器

    让我为您提供“PHP实现简单四则运算器”的完整攻略。 一、准备工作 在开始编写代码之前,你需要确保你的电脑中已经安装了PHP环境。如果你是新手,可以参考PHP官方文档安装PHP。 二、编写代码实现四则运算 以下是实现简单四则运算器的PHP代码: <?php //获取表单提交的数值 $number1 = $_POST[‘number1’]; $numbe…

    PHP 2023年5月23日
    00
  • 总结PHP中初始化空数组的最佳方法

    下面是讲解“总结PHP中初始化空数组的最佳方法”的完整攻略: 为什么要初始化空数组? 在PHP中,数组是一种非常常见的数据类型。它可以用于存储一系列的数据,如数字、字符串、对象等。但是,在一些情况下,我们需要先定义一个空数组,然后再将数据添加到这个数组中。这时候,初始化空数组就非常重要了。在未初始化的情况下,PHP在访问数组元素时可能会出现问题。 初始化空数…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部