首先我们需要了解什么是爬虫。爬虫是一种网络爬虫程序,用于在互联网上自动抓取信息。一般来说,爬虫工作流程如下:首先确定要爬取哪些数据,然后连接目标网站,从目标网站上爬取相关信息,最后对爬取到的数据进行处理和分析,最终存储下来。
下面我们来讲解如何使用 PHP 编写一个简单的爬虫。
第一步:引入phpQuery类库
phpQuery是一个基于 PHP 的 DOM 解析类库,它可以使用 CSS 选择器来对 HTML 进行操作,是我们爬虫的重要工具。
可以先在本地依照官网安装 phpQuery,在编写爬虫时引入即可,或者使用 composer 进行安装。
例如:
composer require craneplus/phpquery
第二步:连接目标网站
我们需要使用 PHP 中的 CURL 库来连接目标网站,获取页面源代码。
例如:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);
其中,设置 CURLOPT_RETURNTRANSFER 为 true 表示将结果返回而不是直接输出,这样方便后续操作。
第三步:使用phpQuery解析页面
获取到页面源代码后,我们可以使用 phpQuery 中的 $() 或 pq() 方法来操作 HTML。
例如:
require_once './vendor/autoload.php';
$doc = phpQuery::newDocumentHTML($html);
$title = $doc->find('title')->text();
echo $title;
这里使用了 phpQuery 的 newDocumentHTML() 方法,将获取到的 HTML 代码实例化为一个新的 DOM 对象。find() 方法可以使用 CSS 选择器查找到所有匹配的元素,并返回一个对象集合。
第四步:存储爬取到的数据
我们可以将爬取到的数据存储到数据库或者文本文件中。这里以存储到数据库为例。
例如:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '123456');
$stmt = $pdo->prepare('INSERT INTO example (title) VALUES (?)');
$stmt->bindParam(1, $title);
$stmt->execute();
示例1:简单的爬取图片
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);
$doc = phpQuery::newDocumentHTML($html);
$doc->find('img')->each(function($item) {
$src = pq($item)->attr('src');
// 下载图片
$data = file_get_contents($src);
file_put_contents('images/'.basename($src), $data);
});
首先获取到页面源代码,然后通过 phpQuery 找到所有的 img 标签,遍历每个元素,获取到 src 属性的值并下载图片到本地。
示例2:爬取博客文章
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/blog');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);
$doc = phpQuery::newDocumentHTML($html);
$doc->find('h2')->each(function($item) {
$title = pq($item)->text();
$url = pq($item)->find('a')->attr('href');
// 获取文章内容
$articleHtml = file_get_contents($url);
$articleDoc = phpQuery::newDocumentHTML($articleHtml);
$content = $articleDoc->find('div.content')->text();
// 存储到数据库
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '123456');
$stmt = $pdo->prepare('INSERT INTO articles (title, content, url) VALUES (?, ?, ?)');
$stmt->bindParam(1, $title);
$stmt->bindParam(2, $content);
$stmt->bindParam(3, $url);
$stmt->execute();
});
先通过 curl 获取博客列表页面的 HTML 代码,然后找到所有的 h2 标题和对应的文章链接,再通过链接获取到每篇博客文章的 HTML 代码,使用 phpQuery 获取文章内容,然后存储到数据库中。
以上就是一个简单的 PHP 实现爬虫的攻略,可以根据实际需求和网站结构进行修改扩展。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现简单爬虫的开发 - Python技术站