|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大部分语言的基础,不是说c有多好,而是c相对起手容易学,让你认为这个是编程语言, </p> 因为需求,要写一个复杂的PHP收集法式,按例是到网上找了一堆教程,然后照猫画虎,可是发明网上的教程满是貌同实异,没有一个真正能用的。苦想了几天,终究弄分明了外面的事理。在这里写出来,请高手斧正。
收集法式的思绪很复杂,不过就是先打一个页面,普通都是列表页,获得外面全体链接的地址,然后翻开逐条链接,寻觅咱们感乐趣的器材,假如找到,就把它入库或其余处置。上面以一个很复杂的例子来讲说。
起首肯定一个收集页,普通就是列外表了。这里方针是:http://www.php100.com/article/11/index.htm。这是一个列表页,咱们的目标就是收集这个列表页上全体的文章。有列表页了,第一步先翻开它,把它的内包容入到咱们的法式中来。普通用fopen或是file_get_contents这两个函数,咱们这里用fopen作例子。怎样翻开它呢?很复杂:$source=fopen("http://www.php100.com/article/11/index.htm",'r');实践上已把内包容入到咱们的法式中来了。注重失掉的$source是一个资本,不是可处置的文本,所以再用函数fread将内容读到一个变量中,此次就是真实的可编纂的文本了。例子:
$content=fread($source,99999);前面的数字暗示字节数,填个大的就行。你用file_put_contents将$content写入到一个文本文件,可以看出外面的内容其实就是网页的源码。失掉了网页的源码,咱们就要剖析外面的文章链接地址,这里要用到正则表达式了,[保举正则表达式教程(http://www.php100.com/article/7/all/545.1.htm)]。经由过程检查源代码,咱们可以看到外面文章的链接地址满是这个模样<div class="in_arttitle"><a href="http://www.php100.com/article/10/all/273.1.htm"> 将数据库毗连代码封装在函数里,在需求读取时挪用..</a>
咱们就能够写正则表达式了。$count=preg_match_all("/<div class="in_arttitle"><ashref="(.+?)">(.+?)</a>/",$content,$art_list);
个中数组$art_list[1][$s]外面包括的就是某个文章的链接地址。而$art_list[2][$s]包括的就是某一文章的题目。到了这一步就能够算胜利了一半了。
接着用for轮回顺次打每一个链接,然后像获得题目一样的办法获得内容便可。以上这些和我在网上找的教程都差不多,然而到了这个for轮回网上的教程可就低劣,还没找到一篇可以说清这个事的文章,刚入手下手我是用js来匡助轮回的,仍是用实例说吧,刚入手下手我是如许做的:
for($i=0;$i<20;4i++ {
两头就是收集内容的局部了,省略了
收集了一页,一定要收集再一页啊
可是再用fopen翻开链接时就不可了。恳求掉败甚么的,用js也不可,最初才晓得要用这句echo "<META HTTP-EQUIV=REFRESH CONTENT='0;URL=aa.php?id=1'>";个中aa.php就是咱们的法式的文件名, id前面的数字就能够匡助咱们完成轮回,收集多个页面。这就是能真正轮回起来的关头
}
头脑有点舒服,写得有点乱,迁就着看吧,在高手看来这能够没甚么大不了的,可是关于我等菜鸟来讲,其实是很有匡助。
我是根据自己的成长历程来写的,如有不对的还请指正。 |
|