文章目录
- ==PHP爬虫开发==
-
- 一、爬虫开发原理与实现
-
- php爬取网页源代码
- php爬取网页图片
- 二、使用SimpleHtmlDom
- 三、使用正则表达式
PHP爬虫开发
一、爬虫开发原理与实现
(1)XML和HTML本质上是相同的结构:DOMDocument可以处理XML,原则上来说也可以处理HTML。
(2)爬虫主要是爬取网页的内容(基于HTTP和HTML的内容),可以爬取一个网站上的图片,文件,页面内容等。
(3)搜索引擎的工作原理:爬取网页内容,对内容进行分词,分词后建立索引(倒排索引),进行排序后提供服务。
(4)爬取的基本过程:给定一个网址,然后解析响应的HTML页面内容,并下载保存(HTML文件),然后解析其中的超链接或其他资源(比如图片等),超链接就进行继续的访问和存档,图片就进行下载存档,给予找到的超链接,又继续解析更多的超链接。
(5)技术层面的实现要点:
- 发送GET请求并获取响应的内容:
file_get_contents
- 解析页面中的URL地址或资源地址:DOMDocument
- 继续访问解析出来的地址或资源:根据地址的特点分类和拼接,构建一个完整的URL地址库,继续访问,继续前面两步。(广度优先,深度优先)
php爬取网页源代码
<?php
/**爬取页面源代码 */
$contents = file_get_contents("http://www.woniunote.com/");
// echo $contents; //获取到页面的内容,其源代码和源页面源代码一致
$html = new DOMDocument();
$html->preserveWhiteSpace = false;
@$html->loadHTML($contents); //在前面加 @ 可以防止warnning警告的输出
$links = $html->getElementsByTagName("a");
// print_r($links); // 输出结果 DOMNodeList Object ( [length] => 93 ) 我们可以看出这是一个链表,下面我们来遍历
/**输出页面源代码中的超链接并存储到数组中 */
$LinkList = array();
foreach($links as $link) {
// echo $link->nodeValue."<br>"; // 这个输出的是 <a></a> 中的值
// echo $link->attributes->item(0)->nodeValue."<br>"; // 但注意,不是所有的<a></a>节点中的第一个属性都是href
foreach($link->attributes as $attr) {
if($attr->nodeName == 'href') {
// echo $attr->nodeValue."<br>"; // 得到的结果有三个类型 分别是以 / # http 开头
// 利用 / # http 三个特征来判断href值的类型,以此分别拼接超链接
if($attr->nodeValue[0] == '/' || $attr->nodeValue[0] == '#') {
//if(strpos($attr->nodeValue,'/') == 0) //用这个判断也是可以的
// echo $attr->nodeValue[0];
echo "http://www.woniunote.com/".$attr->