当前位置:  编程技术>php
本页文章导读:
    ▪利用PHP制作简单的内容采集器的原理分析       前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路都在里面了,自定义规则可以自己来扩展。  .........
    ▪php数组总结篇(一)       数组 1.数组的下标是整型数值或者是字符串类型。 eg1.索引数组的键是______,关联数组的键是______。 2.字符串作为索引的时候,应加上引号。常量或者变量不用加引号,否则无法编译。 在ph.........
    ▪PHP EOT定界符的使用详解       结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。 警告 很重要的一点必须指.........

[1]利用PHP制作简单的内容采集器的原理分析
    来源: 互联网  发布时间: 2013-11-30
前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路都在里面了,自定义规则可以自己来扩展。

  用php来做采集器主要用到两个函数:file_get_contents()和preg_match_all(),前一个是远程读取网页内容的,不过只在php5以上的版本才能用,后一个是正则函数,用来提取需要的内容的。

  下面就一步一步来讲功能实现。

  因为是采集小说,所以首先要将书名、作者、类型这三个提取出来,别的信息可根据需要提取。

  这里以《回到明朝当王爷》为目标,先打开书目页,链接:http://www.86zw.com/Book/3727/Index.aspx

  多打开几本书会发现,书名的基本格式是:http://www.86zw.com/Book/书号/Index.aspx,于是我们可以做一个开始页,定义一个<input type=text name=number>,用来输入需要采集的书号,以后就可以通过$_POST[‘number']这种格式来接收需要采集的书号了。接收到书号,下面要做的就是构造书目页:$url=http://www.86zw.com/Book/$_POST[‘number']/Index.aspx,当然这里是举个例子,主要是为了讲解方便,实际制作的时候最好检查一下$_POST[‘number']的合法性。

  构造好URL以后就可以开始采集书籍信息了。使用file_get_contents() 函数打开书目页:$content=file_get_contents($url),这样就能将书目页的内容都读取出来了。接下来就是将书名、作者和类型等信息匹配出来了。这里就以书名为例,其他的都一样。 打开书目页,查看源文件,找到“<span >《回到明朝当王爷》</span>”,这就是要提取出来的书名了。提取书名的正则表达式:/<span newstitle\">(.*?)\<\/span>/is,使用preg_match_all()函数将书名取出:preg_match_all("/<span newstitle\">(.*?)\<\/span>/is",$contents,$title);这样$title[0][0]的内容就是我们要的标题了(preg_match_all函数的用法可以去百度查,这里就不详细说明了)。取出了书籍信息,接下来就是取章节内容了,要取章节内容,首先要做的就是找到每一章的地址,然后远程打开章节,用正则将内容取出来,入库或者直接生成html静态文件。这个是章节列表的地址:http://www.86zw.com/Html/Book/18/3727/List.shtm,可以看出这个和书目页一样,是有规律可寻的:http://www.86zw.com/Html/Book/分类号/书号/List.shtm。书号前面已经取得,这里的关键是找到分类号,分类号可以在前面的书目页找到,提取分类号:

  preg_match_all("/Html\/Book\/[0-9]{1,}\/[0-9]{1,}\/List\.shtm/is",$contents,$typeid);这样还不够,还需要一个切取函数:
PHP代码如下:

function cut($string,$start,$end){
$message = explode($start,$string);
$message = explode($end,$message[1]); return $message[0];}其中$string为要被切取的内容,$start为开始的地方,$end为结束的地方。取出分类号:

$start = "Html/Book/";
$end
= "List.shtm";
$typeid = cut($typeid[0][0],$start,$end);
$typeid = explode("/",$typeid);[/php]

  这样,$typeid[0]就是我们要找的分类号了。接下来就是构造章节列表的地址了:$chapterurl = http://www.86zw.com/Html/Book/.$typeid[0]/$_POST[‘number']/List.shtm。有了这个就能找到每一章节的地址了。方法如下:

$ustart = "\"";
$uend
= "\"";
//t表示title的缩写
$tstart = ">";
$tend
= "<";
//取路径,例如:123.shtm,2342.shtm,233.shtm
preg_match_all("/\"[0-9]{1,}\.(shtm)\"/is",$chapterurl,$url);
//取标题,例如:第一章 九世善人
preg_match_all("/<a href=/index.html"[0-9]{1,}\.shtm\"(.*?)\<\/a>/is",$file,$title);
$count = count($url[0]);
for($i=0;$i<=$count;$i++)
{
$u = cut($url[0][$i],$ustart,$uend);
$t = cut($title[0][$i],$tstart,$tend);
$array[$u] = $t;
}

  $array数组就是所有的章节地址了,到这里,采集器就完成一半了,剩下的就是循环打开每个章节地址,读取,然后将内容匹配出来。这个比较简单,这里就不详细叙述了。好了,今天就先写到这吧,第一次写这么长的文章,语言组织方面难免有问题,还请大家多包涵!

    
[2]php数组总结篇(一)
    来源: 互联网  发布时间: 2013-11-30

数组
1.数组的下标是整型数值或者是字符串类型。
eg1.索引数组的键是______,关联数组的键是______。
2.字符串作为索引的时候,应加上引号。常量或者变量不用加引号,否则无法编译。
在php中,没有引号的字符串会自动生成一个裸字符串,而 PHP 可能会在以后定义此常量,不幸的是你的代码中有同样的名字,那么这个字符串就被重新赋值。
eg2.<?php
// 显示所有错误
error_reporting(E_ALL);
$arr = array('fruit' => 'apple', 'veggie' => 'carrot');
// 正确
print $arr['fruit']; // apple
print $arr['veggie']; // carrot
// 不正确。This works but also throws a PHP error of
// level E_NOTICE because of an undefined constant named fruit
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit]; // apple
// Let's define a constant to demonstrate what's going on. We
// will assign value 'veggie' to a constant named fruit.
define('fruit','veggie');
// Notice the difference now
print $arr['fruit']; // apple
print $arr[fruit]; // carrot
// The following is okay as it's inside a string. Constants are not
// looked for within strings so no E_NOTICE error here
print "Hello $arr[fruit]"; // Hello apple
// With one exception, braces surrounding arrays within strings
// allows constants to be looked for
print "Hello {$arr[fruit]}"; // Hello carrot
print "Hello {$arr['fruit']}"; // Hello apple
// This will not work, results in a parse error such as:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// This of course applies to using autoglobals in strings as well
print "Hello $arr['fruit']";
print "Hello $_GET['foo']";
// Concatenation is another option
print "Hello " . $arr['fruit']; // Hello apple
?>
3.键值问题
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name'] = 'apple';
$a[] = 4; // key will be 0
$b[] = 'a'; // key will be 0
$b[] = 'b'; // key will be 1
$b[] = 'c'; // key will be 2
switching = array( 10, // key = 0
5 => 6,
3 => 7,
'a' => 4,
11, // key = 6 (maximum of integer-indices was 5)
'8' => 2, // key = 8 (integer!)
'02' => 77, // key = '02'
0 => 12 // the value 10 will be overwritten by 12
);
<?php
$multi_array = array("red",
"green",
42 => "blue","yellow" => array("apple",9 => "pear","banana","orange" => array("dog","cat","iguana")));
?>
A.$multi_array['yellow']['apple'][0]
B.$multi_array['blue'][0]['orange'][1]
C.$multi_array[3][3][2]
D.$multi_array['yellow']['orange']['cat']
E.$multi_array['yellow']['orange'][1]
--------------------------------待续待续待续------
4.array_walk
5.var_dump
6.array_intersect
7.array_sum
8.array_count_values
9.array_flip
10.natsort
11.ksort(),asort(),krsort(),sort(),usort()
12.array_reverse()
13.array_merge
14.reset
-------------------------------待续待续待续------
15.array_combine
16array_count_values
17.array_diff
18.array_filter
19.array_search


    
[3]PHP EOT定界符的使用详解
    来源: 互联网  发布时间: 2013-11-30
结束标识符必须从行的第一列开始。同样,标识符也必须遵循 PHP 中其它任何标签的命名规则:只能包含字母数字下划线,而且必须以下划线或非数字字符开始。
警告
很重要的一点必须指出,结束标识符所在的行不能包含任何其它字符,可能除了一个分号(;)之外。这尤其意味着该标识符不能被缩进,而且在分号之前和之后都不能有任何空格或制表符。同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中定义的换行符。例如在 Macintosh 系统中是 \r。
如果破坏了这条规则使得结束标识符不“干净”,则它不会被视为结束标识符,PHP 将继续寻找下去。如果在这种情况下找不到合适的结束标识符,将会导致一个在脚本最后一行出现的语法错误。
不能用定界符语法初始化类成员。用其它字符串语法替代。 例子 11-3. 非法的例子
PHP代码
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
?>
定界符文本表现的就和双引号字符串一样,只是没有双引号。这意味着在定界符文本中不需要转义引号,不过仍然可以用以上列出来的转义代码。变量会被展开,但当在定界符文本中表达复杂变量时和字符串一样同样也要注意。 例子 11-4. 定界符字符串例子
PHP代码
<?php
$str = <<<EOT
Example of string
spanning multiple lines
using heredoc syntax.
EOT;
/* More complex example, with variables. */
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MyName';
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
注: 定界符支持是 PHP 4 中加入的。
如何在php中输出html代码(EOT)
PHP代码
<?php
echo <<< EOT
<table width=80% border="2" cellpadding="3" cellspacing="0" bordercolor="#808080">
<tr bgcolor="#84A9E1">
<td align="center">ClassID</td>
<td align="center">stuno</td>
<td align="center">学生姓名</td>
<td align="center">家长姓名</td>
<td align="center">家长手机号</td>
</tr>
EOT;
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php二维数组排序(实例) iis7站长之家
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3