php

php

php实现的采集小程序,做采集的必看

采集交流优采云 发表了文章 • 0 个评论 • 373 次浏览 • 2020-07-25 08:02 • 来自相关话题

  
  以下是我收集的php实现的采集小程序,自己测试可用php 文章采集,做采集很实用哦!
  <?php
//调用方法 :localhost/2.php?id=1 (自动采集1-8的列表)
header(&quot;Content-type:text/html;charset=utf-8&quot;);
$con =mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;huweishen.com&quot;) or die(&quot;数据库链接错误&quot;);
mysql_select_db(&quot;liuyan&quot;, $con);
mysql_query(&quot;set names &#39;utf8&#39;&quot;);
function preg_substr($start, $end, $str) // 正则截取函数
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
function str_substr($start, $end, $str) // 字符串截取函数
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
// ---------------- 使用实例 ----------------

if($_GET[&#39;id&#39;]<=8&amp;&amp;$_GET[&#39;id&#39;]){
$id=$_GET[&#39;id&#39;];
$url = &quot;http://www.037c.com/New/list_5_$id.html&quot;; //目标站
$fp = fopen($url, &quot;r&quot;) or die(&quot;超时&quot;);
$fcontents = file_get_contents($url);
$pattern=&quot;/<\/span><a href=\&quot;(.*)\&quot; title=\&quot;(.*)\&quot; target=\&quot;_blank\&quot;>/iUs&quot;;//正则
preg_match_all($pattern, $fcontents, $arr);
//print_r($arr);
foreach($arr[1] as $k=>$url)
{
$title = iconv(&#39;GB2312&#39;, &#39;UTF-8&#39;, addslashes($arr[2][$k]));
// echo $title;
// echo $url;
$str = iconv(&quot;GB2312&quot;,&quot;UTF-8&quot;, file_get_contents($url));
$author = preg_substr(&quot;/作者:/&quot;, &quot;/<\//&quot;, $str); // 通过正则提取作者
$content = str_substr(&#39;<p class=&quot;wltg&quot;>&#39;, &#39;</p>&#39;, $str); //通过字符串提取标题
$sql = &quot;INSERT INTO `caiji` (`title`, `url` , `content`, `author` ) VALUES (&#39;$title&#39;, &#39;$url&#39; , &#39;$content&#39; , &#39;$author&#39;)&quot;;
// echo $sql.&quot;<br/>&quot;;
mysql_query($sql);
}
$id++;
echo &quot;正在采集URL数据列表$id...请稍后...&quot;;
echo &quot;<script>window.location=&#39;2.php?id=$id&#39;</script>&quot;;
}
else{
echo &quot;采集数据结束。&quot;;
}
?>
  
  其中 title 设置惟一php 文章采集,可以避免重复采集,很好的的一个php采集小程序,作者:风云无忌 查看全部
  
  以下是我收集的php实现的采集小程序,自己测试可用php 文章采集,做采集很实用哦!
  <?php
//调用方法 :localhost/2.php?id=1 (自动采集1-8的列表)
header(&quot;Content-type:text/html;charset=utf-8&quot;);
$con =mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;huweishen.com&quot;) or die(&quot;数据库链接错误&quot;);
mysql_select_db(&quot;liuyan&quot;, $con);
mysql_query(&quot;set names &#39;utf8&#39;&quot;);
function preg_substr($start, $end, $str) // 正则截取函数
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
function str_substr($start, $end, $str) // 字符串截取函数
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
// ---------------- 使用实例 ----------------

if($_GET[&#39;id&#39;]<=8&amp;&amp;$_GET[&#39;id&#39;]){
$id=$_GET[&#39;id&#39;];
$url = &quot;http://www.037c.com/New/list_5_$id.html&quot;; //目标站
$fp = fopen($url, &quot;r&quot;) or die(&quot;超时&quot;);
$fcontents = file_get_contents($url);
$pattern=&quot;/<\/span><a href=\&quot;(.*)\&quot; title=\&quot;(.*)\&quot; target=\&quot;_blank\&quot;>/iUs&quot;;//正则
preg_match_all($pattern, $fcontents, $arr);
//print_r($arr);
foreach($arr[1] as $k=>$url)
{
$title = iconv(&#39;GB2312&#39;, &#39;UTF-8&#39;, addslashes($arr[2][$k]));
// echo $title;
// echo $url;
$str = iconv(&quot;GB2312&quot;,&quot;UTF-8&quot;, file_get_contents($url));
$author = preg_substr(&quot;/作者:/&quot;, &quot;/<\//&quot;, $str); // 通过正则提取作者
$content = str_substr(&#39;<p class=&quot;wltg&quot;>&#39;, &#39;</p>&#39;, $str); //通过字符串提取标题
$sql = &quot;INSERT INTO `caiji` (`title`, `url` , `content`, `author` ) VALUES (&#39;$title&#39;, &#39;$url&#39; , &#39;$content&#39; , &#39;$author&#39;)&quot;;
// echo $sql.&quot;<br/>&quot;;
mysql_query($sql);
}
$id++;
echo &quot;正在采集URL数据列表$id...请稍后...&quot;;
echo &quot;<script>window.location=&#39;2.php?id=$id&#39;</script>&quot;;
}
else{
echo &quot;采集数据结束。&quot;;
}
?>
  
  其中 title 设置惟一php 文章采集,可以避免重复采集,很好的的一个php采集小程序,作者:风云无忌

PHP写微信公众号文章页采集方法

采集交流优采云 发表了文章 • 0 个评论 • 348 次浏览 • 2020-07-24 08:04 • 来自相关话题

  ;我的正则匹配水平有限,只能写成这样的了。希望有高手能赐教更好的正则匹配方式。
  另外注意:这个匹配规则会可能在一段时间以后有变化。这篇文章会尽量保持更新。如果你按照我的文章制作了采集系统以后,当某三天失效了,别忘了回去再瞧瞧文章是否有更新。
  2)内容处理:
  通过前面的方式我们获得了文章内容的html,但是你将文章内容显示下来以后才会发觉,图片和视频不能正常显示。因为这个html还须要一些加工:
  首先是图片,微信文章中的标签中的src属性全部都用了data-src属性替代。只有在显示的时侯就会被替换过来。所以我们也有两个方案,将源代码直接替换过来,或者用js在显示时侯再替换。下面我先介绍直接替换html的方式:
  1
  2
  3
  4
  //$content变量的值是上面获取到的文章内容html
  $content = str_replace("data-src","src",$content);
  然后是视频,视频的显示不正常,经过常年测试后发觉只要替换一个页面地址才能解决,过程就不说了,直接说结果:
  1
  2
  3
  4
  //$content变量的值是上面获取到的文章内容html
  $content = str_replace("preview.html","player.html",$content);
  通过这两个替换过后,文章内容html中的图片和视频就都正常了。
  3) 公众号相关信息:
  通过本专栏之前的文章,介绍了我们使用陌陌客户端,任意打开一个公众号的历史消息页以后。系统从数据库中辨识biz的值,发现数据库中没有记录,就会插入一条新的纪录。之后的采集队列都会定期按照这个biz来获取这个公众号的历史消息列表。
  但是我们只获得了这个公众号的biz,公众号的名称,头像这两个重要信息还是没有获取到。主要诱因是历史消息页面中没有这两个信息。但是我们可以从文章页面中获取到。
  在陌陌文章页面html的顶部,有一些js的变量形参的代码,通过正则匹配然后我们就可以获得这两个公众号的信息:
  1
  2
  3
  4
  5
  6
  7
  //$html变量的值是上面获取到的文章全部html
  preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
  $nickname = $m[1][0];//公众号爱称
  preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
  $head_img = $m[1][0];//公众号头像
  通过这两个正则匹配,我们才能获取到公众号的头像和爱称,然后按照文章地址中的biz,可以保存到对应的微信号数据表中。
  3、文章的保存和处理
  前面的代码已然将文章内容获取到变量中了。如何保存虽然每个人似乎都有自己的看法。我这儿介绍一下我的保存内容的方式:
  将文章内容的html以数据库id为文件名保存成html文件,以biz数组为目录。
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  $dir = "./".$biz."/";
  $filename = $dir.$id.".html";
  if(!is_dir($dir)) {
  mkdir($cache_dir);
  chmod($cache_dir,0777);
  }
  $file = fopen($filename, "w");
  fwrite($file, $content);
  fclose($file);
  以上代码是一个标准的php构建文件夹保存文件的代码,大家可以依照自己的实际情况安排保存方式。
  在这以后我们就可以在自己的服务器上得到一个html文件,内容就是公众号的文章内容。我们可以从浏览器中打开看一下。这时你或许会发觉图片防盗链了!无法正常显示!包括数据库中保存的文章封面图,公众号的头像都是防盗链的。
  别急,这个问题挺好解决,只须要将图片也保存到自己的服务器,无非是将来会占用自己的服务器空间和带宽。
  图片防盗链的原理是当图片在网页中显示的时侯php 采集微信文章图片,图片服务器会测量到引用这张图片的服务器域名,当发觉服务器域名不包含或的时侯才会被替换成防盗链图片。
  但是假若测量不到引用页面的域名才会正常显示,所以我们通过php的函数file_get_content()就可以将图片的二进制代码获取过来,然后按照自己的看法起个文件名保存到自己的服务器上。在这里再介绍一个保存图片的方式,我目前使用了腾讯云的“万象优图”,通过它们提供的api将图片保存到云空间,这样的用处是读取图片时直接在图片的链接地址加上希望得到的图片规格大小参数,就可以直接得到一张缩略图。比存在自己的服务器便捷得多。阿里云也应当有同样的产品php 采集微信文章图片,好像名叫对象储存。
  另外,我采集公众号内容的目的是制做成一个新闻app,在app上将html代码显示下来以后,因为app同样没有域名,防盗链服务器也同样不会觉得图片被盗链了。这样就可以直接显示图片下来。 查看全部
  ;我的正则匹配水平有限,只能写成这样的了。希望有高手能赐教更好的正则匹配方式。
  另外注意:这个匹配规则会可能在一段时间以后有变化。这篇文章会尽量保持更新。如果你按照我的文章制作了采集系统以后,当某三天失效了,别忘了回去再瞧瞧文章是否有更新。
  2)内容处理:
  通过前面的方式我们获得了文章内容的html,但是你将文章内容显示下来以后才会发觉,图片和视频不能正常显示。因为这个html还须要一些加工:
  首先是图片,微信文章中的标签中的src属性全部都用了data-src属性替代。只有在显示的时侯就会被替换过来。所以我们也有两个方案,将源代码直接替换过来,或者用js在显示时侯再替换。下面我先介绍直接替换html的方式:
  1
  2
  3
  4
  //$content变量的值是上面获取到的文章内容html
  $content = str_replace("data-src","src",$content);
  然后是视频,视频的显示不正常,经过常年测试后发觉只要替换一个页面地址才能解决,过程就不说了,直接说结果:
  1
  2
  3
  4
  //$content变量的值是上面获取到的文章内容html
  $content = str_replace("preview.html","player.html",$content);
  通过这两个替换过后,文章内容html中的图片和视频就都正常了。
  3) 公众号相关信息:
  通过本专栏之前的文章,介绍了我们使用陌陌客户端,任意打开一个公众号的历史消息页以后。系统从数据库中辨识biz的值,发现数据库中没有记录,就会插入一条新的纪录。之后的采集队列都会定期按照这个biz来获取这个公众号的历史消息列表。
  但是我们只获得了这个公众号的biz,公众号的名称,头像这两个重要信息还是没有获取到。主要诱因是历史消息页面中没有这两个信息。但是我们可以从文章页面中获取到。
  在陌陌文章页面html的顶部,有一些js的变量形参的代码,通过正则匹配然后我们就可以获得这两个公众号的信息:
  1
  2
  3
  4
  5
  6
  7
  //$html变量的值是上面获取到的文章全部html
  preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
  $nickname = $m[1][0];//公众号爱称
  preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
  $head_img = $m[1][0];//公众号头像
  通过这两个正则匹配,我们才能获取到公众号的头像和爱称,然后按照文章地址中的biz,可以保存到对应的微信号数据表中。
  3、文章的保存和处理
  前面的代码已然将文章内容获取到变量中了。如何保存虽然每个人似乎都有自己的看法。我这儿介绍一下我的保存内容的方式:
  将文章内容的html以数据库id为文件名保存成html文件,以biz数组为目录。
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  $dir = "./".$biz."/";
  $filename = $dir.$id.".html";
  if(!is_dir($dir)) {
  mkdir($cache_dir);
  chmod($cache_dir,0777);
  }
  $file = fopen($filename, "w");
  fwrite($file, $content);
  fclose($file);
  以上代码是一个标准的php构建文件夹保存文件的代码,大家可以依照自己的实际情况安排保存方式。
  在这以后我们就可以在自己的服务器上得到一个html文件,内容就是公众号的文章内容。我们可以从浏览器中打开看一下。这时你或许会发觉图片防盗链了!无法正常显示!包括数据库中保存的文章封面图,公众号的头像都是防盗链的。
  别急,这个问题挺好解决,只须要将图片也保存到自己的服务器,无非是将来会占用自己的服务器空间和带宽。
  图片防盗链的原理是当图片在网页中显示的时侯php 采集微信文章图片,图片服务器会测量到引用这张图片的服务器域名,当发觉服务器域名不包含或的时侯才会被替换成防盗链图片。
  但是假若测量不到引用页面的域名才会正常显示,所以我们通过php的函数file_get_content()就可以将图片的二进制代码获取过来,然后按照自己的看法起个文件名保存到自己的服务器上。在这里再介绍一个保存图片的方式,我目前使用了腾讯云的“万象优图”,通过它们提供的api将图片保存到云空间,这样的用处是读取图片时直接在图片的链接地址加上希望得到的图片规格大小参数,就可以直接得到一张缩略图。比存在自己的服务器便捷得多。阿里云也应当有同样的产品php 采集微信文章图片,好像名叫对象储存。
  另外,我采集公众号内容的目的是制做成一个新闻app,在app上将html代码显示下来以后,因为app同样没有域名,防盗链服务器也同样不会觉得图片被盗链了。这样就可以直接显示图片下来。

wordpress安装过程中遇见英文乱码的处理方式

采集交流优采云 发表了文章 • 0 个评论 • 430 次浏览 • 2020-06-17 08:01 • 来自相关话题

  WordPress建站 新手入门,wordpress建站_PHP教程
  WordPress建站 新手入门,wordpress建站WordPress建站 新手入门教程系列 1. WordPress入门 之 什么是WordPress? 2. WordPress入门 之 搭建WordPress站点须要哪些条件? 3. WordPress入门 之 如何安装WordPre
  总结关于WordPress注意点
  ...务器端的路由功能应当都比较熟悉,国外流行的博客系统wordpress也是十分精典的路由实现案例。那么,究竟哪些的路由呢,下面通过wordpress来简单讲一下。理解wordpress重画规则的的都是晓得,实际上任何一条url的访问都是基于wor...
  最流行的php建站程序是哪些?
  要说最流行的php建站程序是哪些?那肯定非wordpress莫属了。WordPress拥有全球逾三分之一的网站,从大型个人博客到索尼、时代公司、纽约邮报和NBC等大公司的复杂网站。WordPress只是网站构建器和内容管理系统之一,...
  wordpress须要会php吗
  WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当成一个内容管理系统(CMS)来使用。WordPress是一款个人博客系统,并逐渐演变成一款内容...
   开源,弃 PHP 改用 JavaScript_PHP教程
   开源,弃 PHP 改用 在明天迈出了自创立以来的最跨越性的一步。Automattic 公司从头重画了 ,将这项计划命名为 Calypso译者注:卡吕普索安装wordpress主题后 显示乱码 怎么解决,希腊神话的海之女神),从内...
  PHP版本升级到7.x后wordpress的一些更改及wordpress方法,_PHP教程
  PHP版本升级到7.x后wordpress的一些更改及wordpress方法,不知算不算手贱,把VPS服务器上的php升级到7.0, 虽然7.x与之前的兼容性是很高的,但移除了一大堆过时用法,而个别老应用一直在使用。对个人wordpress站点里出现...
  在Linux系统下一键重新安装WordPress的脚本示例_PHP
  ...或者误操作,数据库没了,所以,我为了市时间,写了个wordpress一键重新安装的脚本。我这只是写个大约的。大家可以依照自己的须要更改脚本。使用条件:我这个脚本主要用在网站迁移的情况下安装wordpress主题后 显示乱码 怎么解决,完全重新安...
  在Linux系统下一键重新安装WordPress的脚本示例_php方法
  ...或者误操作,数据库没了,所以,我为了市时间,写了个wordpress一键重新安装的脚本。我这只是写个大约的。大家可以依照自己的须要更改脚本。使用条件:我这个脚本主要用在网站迁移的情况下,完全重新安...
  wordpress主题制做结构文件,wordpress主题结构_PHP教程
  wordpress主题制做结构文件,wordpress主题结构 下面是WordPress主题文件层次结构,它会告诉你:当WordPress显示特定的页面类型时,会使用那个模板文件呢?只有了解了以下主题层次结构,你就能晓得你的WordPress主... 查看全部
  WordPress建站 新手入门,wordpress建站_PHP教程
  WordPress建站 新手入门,wordpress建站WordPress建站 新手入门教程系列 1. WordPress入门 之 什么是WordPress? 2. WordPress入门 之 搭建WordPress站点须要哪些条件? 3. WordPress入门 之 如何安装WordPre
  总结关于WordPress注意点
  ...务器端的路由功能应当都比较熟悉,国外流行的博客系统wordpress也是十分精典的路由实现案例。那么,究竟哪些的路由呢,下面通过wordpress来简单讲一下。理解wordpress重画规则的的都是晓得,实际上任何一条url的访问都是基于wor...
  最流行的php建站程序是哪些?
  要说最流行的php建站程序是哪些?那肯定非wordpress莫属了。WordPress拥有全球逾三分之一的网站,从大型个人博客到索尼、时代公司、纽约邮报和NBC等大公司的复杂网站。WordPress只是网站构建器和内容管理系统之一,...
  wordpress须要会php吗
  WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当成一个内容管理系统(CMS)来使用。WordPress是一款个人博客系统,并逐渐演变成一款内容...
   开源,弃 PHP 改用 JavaScript_PHP教程
   开源,弃 PHP 改用 在明天迈出了自创立以来的最跨越性的一步。Automattic 公司从头重画了 ,将这项计划命名为 Calypso译者注:卡吕普索安装wordpress主题后 显示乱码 怎么解决,希腊神话的海之女神),从内...
  PHP版本升级到7.x后wordpress的一些更改及wordpress方法,_PHP教程
  PHP版本升级到7.x后wordpress的一些更改及wordpress方法,不知算不算手贱,把VPS服务器上的php升级到7.0, 虽然7.x与之前的兼容性是很高的,但移除了一大堆过时用法,而个别老应用一直在使用。对个人wordpress站点里出现...
  在Linux系统下一键重新安装WordPress的脚本示例_PHP
  ...或者误操作,数据库没了,所以,我为了市时间,写了个wordpress一键重新安装的脚本。我这只是写个大约的。大家可以依照自己的须要更改脚本。使用条件:我这个脚本主要用在网站迁移的情况下安装wordpress主题后 显示乱码 怎么解决,完全重新安...
  在Linux系统下一键重新安装WordPress的脚本示例_php方法
  ...或者误操作,数据库没了,所以,我为了市时间,写了个wordpress一键重新安装的脚本。我这只是写个大约的。大家可以依照自己的须要更改脚本。使用条件:我这个脚本主要用在网站迁移的情况下,完全重新安...
  wordpress主题制做结构文件,wordpress主题结构_PHP教程
  wordpress主题制做结构文件,wordpress主题结构 下面是WordPress主题文件层次结构,它会告诉你:当WordPress显示特定的页面类型时,会使用那个模板文件呢?只有了解了以下主题层次结构,你就能晓得你的WordPress主...

PHP爬虫编撰

采集交流优采云 发表了文章 • 0 个评论 • 300 次浏览 • 2020-06-04 08:04 • 来自相关话题

  一、PHP 是哪些东西?
  PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特性,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的句型混和了C、Java、Perl以及PHP自创的句型。它可以比CGI或则Perl更快速地执行动态网页。用PHP作出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行php网络爬虫软件,使代码运行更快。——百度百科的描述。
  二、爬虫有哪些用?
  爬虫有哪些用?先说一下爬虫是哪些东西,我觉得爬虫就是一个网路信息搜集程序,也许我自己的理解有错误,也请你们给我见谅。既然爬虫是一个网路信息搜集程序,那就是拿来搜集信息,并且搜集的信息是在网路里面的。如果还是不太清楚爬虫有什么用php网络爬虫软件,我就举几个爬虫应用的事例:搜索引擎就须要爬虫搜集网路信息供人们去搜索;大数据的数据,数据从那里来?就是可以通过爬虫在网路中爬取(收集)而来。
  三、通常看到爬虫会想到 Python,但为何我用 PHP,而不用 Python 呢?
  Python 我说实话,我不会 Python。( Python 我真不会,想知道可能你要去百度一下,因为 Python 我真不会。)PHP 写东西我仍然都是觉得,你只要想出算法程序就早已下来了,不用考虑太多数据类型的问题。PHP 的句型和其他编程语言差不多,就算你开始不会 PHP,你也可以马上上手。PHP的句型和其他编程语言差不多,就算你开始不会 PHP,你也可以马上上手。的看法有错。)本人虽然也是初学 PHP,想通过写一些东西提升自己的水平。(下面可能有些代码会使你认为不够规范,欢迎见谅,谢谢。)
  四、PHP爬虫第一步
  PHP爬虫第一步,第一步......第一步其实就是搭建 PHP 的运行环境,没有环境PHP又如何能运行呢?就像虾不能离开水一样。(我见识还不够,可能我举的虾的事例不够好,请见谅。)在Windows的系统下我使用 WAMP,而在Linux的系统下我使用 LNMP 或者 LAMP。
  WAMP:Windows + Apache + Mysql + PHP
  LAMP:Linux + Apache + Mysql + PHP
  LNMP:Linux + Nginx + Mysql + PHP
  Apache 和 Nginx 是 Web 服务器软件。
  Apache或Nginx、Mysql 以及 PHP 这些都是 PHP Web 的基本配置环境。网上有 PHP Web 环境的安装包,这些安装包使用很方便,不需要每给东西安装以及配置。但若果你对这种集成安装包害怕安全问题,你可以到这种程序的官网下载之后在网上找配置教程就可以了。(说真的,我真心的不会单独去弄,我认为很麻烦。)
  五、 PHP爬虫第二步
  (感觉自己屁话很多,应该马上来一段代码!!!)
  &lt;?php
// 爬虫核心功能:获取网页源码
$html = file_get_contents(&#34;https://www.baidu.com/index.html&#34;);
// 通过 php 的 file_get_contents 函数获取百度首页源码,并传给 $html 变量
echo $html;
// 输出 $html
?&gt;
  爬虫网路核心功能早已写下来了,为什么说就如此几行代码就把爬虫核心功能写下来了呢?我猜有人早已明白了吧,其实是因为爬虫是数据获取的程序,就里面几行代码虽然早已才能获取数据了,所以爬虫的核心功能早已写下来了。可能有人会说“你这个也很菜了吧!有哪些用?”,虽然我是太菜,但请别说出来,让我好好装个X。(又说了两行屁话,不好意思。)
  其实爬虫是拿来干嘛,主要看你想使它来干嘛。就像我前些日子为了好玩写了一个搜索引擎网站出来,当然网站很菜,结果排序没有规律,很多都查不到。我的搜索引擎的爬虫就是要写一个适合于搜索引擎的爬虫。所以为了便捷我也就用写搜索引擎的爬虫为目标讲解。当然了,我搜索引擎的爬虫还是不够建立,不健全的地方都是要大家自己去创造,去建立。
  六、 搜索引擎爬虫的限制
  搜索引擎的爬虫有时候不是不能那种网站的页面获取页面源码,而是有robot.txt文件,有该文件的网站,就代表站主不希望爬虫去爬取页面源码。(不过若果你就是想要获取的话,就算有也一样会去爬吧!)
  我搜索引擎的爬虫虽然还有好多不足而造成的限制,例如可能由于未能运行 JS 脚本所以未能获取页面源码。又或则网站有反爬虫的机制引起不能获取到页面源码。有反爬虫机制的网站就如:知乎,知乎就是有反爬虫的机制的网站。
  七、以弄搜索引擎爬虫为例,准备写该爬虫须要的东西
  PHP 编写基础正则表达式(你也可以使用Xpath,对不起,我不会使用)数据库的使用(本文使用 MySql 数据库)运行环境(只要有能运行 PHP 网站的环境和数据库就OK)
  八、搜索引擎获取页面源码并获取页面的标题信息
  &lt;?PHP
// 通过 file_get_contents 函数获取百度页面源码
$html = file_get_contents(&#34;https://www.baidu.com/index.html&#34;);
// 通过 preg_replace 函数使页面源码由多行变单行
$htmlOneLine = preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
// 通过 preg_match 函数提取获取页面的标题信息
preg_match(&#34;/&lt;title&gt;(.*)&lt;\/title&gt;/iU&#34;,$htmlOne,$titleArr);
// 由于 preg_match 函数的结果是数组的形式
$title = $titleArr[1];
// 通过 echo 函数输出标题信息
echo $title;
?&gt;
  报错误示例:
  Warning: file_get_contents("127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
  https是SSL加密合同,如果出现获取页面晨报里面的错误,代表你的 PHP 可能少了OpenSSL 的模块,你可以到网上查找解决办法。
  九、搜索引擎爬虫的特征
  虽然我没见过象“百度”,“Google”它们的爬虫,可是我自己通过推测,以及在实际爬去过程当中遇见的一些问题,自己总结的几个特性。(可能有不对的地方,或者缺乏的地方,欢迎见谅,谢谢。)
  通用性
  通用性是因为我觉得搜索引擎的爬虫一开始并不是针对哪一个网站制定的,所以要求能爬取到的网站尽可能的多,这是第一点。而第二点,就是获取网页的信息就是这些,一开始不会由于个别某些特殊小网站而舍弃个别信息不提取,举个反例:一个小网站的一个网页meta标签里没有描述信息(description)或者关键词信息(keyword),就直接舍弃了描述信息或则关键词信息的提取,当然假如真的某一个页面没有这种信息我会提取页面里的文字内容作为填充,反正就是尽可能达到爬取的网页信息每位网页的信息项都要一样。这是我觉得的搜索引擎爬虫的通用性,当然我的看法可能是错误的。(我说得可能不是很好,我仍然在学习。)
  不确定性
  不确定性就是我的爬虫获取哪些网页我是控制不够全面的,只能控制我能想到的情况,这也是由于我写的算法就是这样的缘由,我的算法就是爬取获取到的页面里的所有链接,再去爬去获取到的那些链接,其实是因为搜索引擎并不是搜某一些东西,而是尽可能的多,因为只有更多的信息,才能找到一个最贴切用户想要的答案。所以我就认为搜索引擎的爬虫就要有不确定性。(我自己再看了一遍,也有点认为自己说得有点使自己看不懂,请见谅,欢迎见谅,提问,谢谢了!)
  下面的视频是我的搜索网站的使用视频,而搜到的信息就是通过自己写的 PHP 爬虫获取到的。(这个网站我早已不再继续维护了,所以有缺乏之处,请见谅。)
  
  十、到如今可能出现的问题
  获取的源码出现乱码
  &lt;?PHP
// 乱码解决办法,把其他编码格式通过 mb_convert_encoding 函数统一转为 UTF-8 格式
$html = mb_convert_encoding($html,&#39;UTF-8&#39;,&#39;UTF-8,GBK,GB2312,BIG5&#39;);
// 还有一种因为gzip所以出现乱码的,我会在以后讲
?&gt;
  2. 获取不到标题信息
  &lt;?PHP
// 获取不到标题信息解决办法,首先判断是否能获取到页面源码
// 如果能获取到但还是不能获取到标题信息
// 我猜测的问题是:因为我教的是使用正则表达式获取的,源码没有变成一行,获取起来就会出现问题
$htmlOneLine=preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
?&gt;
  3.获取不到页面源码
  &lt;?PHP
// 像新浪微博你可能获取到的是“Sina Visitor System”
// 解决办法添加header信息
$opts = array(
&#39;http&#39;=&gt;array(
&#39;method&#39;=&gt;&#34;GET&#34;,
&#34;timeout&#34;=&gt;20,
&#39;header&#39;=&gt;&#34;User-Agent: Spider \r\n&#34;,
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 这样就能获取到新浪微博的页面了
?&gt;
  十一、获取一个网页时的处理思路
  我们先不去想好多网页,因为好多网页也就是一个循环。
  获取页面源码通过源码提取页面的哪些信息提取的信息要如何处理处理后放不放进数据库
  十二、按照十一的思路的代码
  &lt;?php
// 一、获取源码
// 假设我们要获取淘宝首页
$html = file_get_content(&#34;https://www.taobao.com&#34;);
// 二、提取标题和文本
// 三、提取信息处理
// 处理页面源码,多行变单行
$htmlOneLine = preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
// 获取标题信息
preg_match(&#34;/&lt;title&gt;(.*)&lt;\/title&gt;/iU&#34;,$htmlOneLine,$titleArr);
// 保留标题信息
$titleOK = $titleArr[1];
// 获取页面中的文本信息
// 处理前面不需要的head标签
$htmlText = preg_replace(&#34;/&lt;html&gt;(.*)&lt;\/head&gt;/&#34;,&#34;&#34;,$htmlOneLine);
// 处理style和script标签及内容
$htmlText = preg_replace(&#34;/&lt;style(.*)&gt;(.*)&lt;/style&gt;|&lt;script(.*)&gt;(.*)&lt;/script&gt;/iU&#34;,&#34;&#34;,$htmlText);
// 处理多余标签
$htmlText = preg_replace(&#34;/&lt;(\/)?(.+)&gt;/&#34;,&#34;&#34;,$htmlText);
// 四、保存到数据库
// 略
?&gt;
  十三、PHP 保存页面的图片思路
  获取页面源码获取页面的图片链接使用函数保存图片
  十四、保存图片示例代码
  &lt;?php
// 使用file_get_contents()函数获取图片
$img = file_get_contents(&#34;http://127.0.0.1/photo.jpg&#34;);
// 使用file_put_contents()函数保存图片
file_put_contents(&#34;photo.jpg&#34;,$img);
?&gt;
  十五、gzip解压
  本来我以为自己写的爬虫早已写得差不多了,就是不仅反爬虫的网站难以爬取外,应该是都可以爬了。但有三天我去尝试爬去bilibili的时侯出现问题了,我发觉如何我数据库上面的都是乱码,而且标题哪些的都没有,好奇怪!后来我才晓得原先是因为GZIP的压缩,原来我直接使用file_get_content函数获取的页面是未经过解压的页面,所有都是乱码!好了,然后我晓得问题出现在哪里了,接下来就是想解决办法了。(其实那时候的我是完全不知道如何解决解压gzip的,都靠搜索引擎,哈哈哈哈哈)。
  我得到了两个解决办法:
  在 request header 那里告诉对方服务器,我这爬虫(不。。。应该是我这浏览器)不支持gzip的解压,就麻烦你不要压缩,直接把数据发给我吧!
   // 这是request header(请求头)
$opts = array(
&#39;http&#39;=&gt;array(
&#39;method&#39;=&gt;&#34;GET&#34;,
&#34;timeout&#34;=&gt;20,
&#39;header&#39;=&gt;&#34;User-Agent: Spider \r\n&#34;.
&#34;accept-encoding:&#34;
)
);
// 我把accept-encodeing(能接收编码)设为空,代表不接受gzip
  2. 如果告诉了对方服务器本浏览器(爬虫)不支持解压gzip,可他还是继续发gzip的数据给你,那就没有办法了,只好默默的在搜索引擎找php解压gzip的解压函数——gzdecode()。
  // 废话:好久没更新了,因为近来又在重复造轮子,不过好开心-- 2019.01.14
  十六、子链接的获取
  网页爬虫就好比手动的网页源码另存为操作,可是假如真的是一个一个网址自动输入给爬虫去爬取的话,那还倒不如人手另存为呢!所以在这里就得解析到这些子链接,一个网页似乎会有好多的a标签,而这种a标签的href属性值都会是一个子链接。(这句如何觉得有一点屁话呢?应该你们都晓得吧!)通过好多种工具的解析得到了原始的子链接(我没用html的工具,就是用了正则表达式及工具)为什么叫原始数据,因为这些子链接有很多不是URL链接,又或则是一些不完整的链接,又或则你是要爬一个网站,不要爬虫跑出去的时侯,还得消除一些并非那种网站的链接,防止爬虫跑出去。下面我列出一些原始子链接。(其实就是我喷到的坑。。。)
  http://wxample.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
  你可以看得到这儿有很多种链接,有完整的绝对路径的链接,也有不完整的相对路径链接,有的还跑来了javascript,如果是相对路径或javascript的链接,直接给爬虫去爬,肯定使爬虫一脸懵,因为不完整或根本就不是一个链接。所以就须要对子链接补全或则扔掉。
  十七、子链接的处理
  上面屁话了一大堆后,接下来还是继续屁话。好了,处理虽然就是去重、丢弃以及补全。
  对于相同的子链接遗弃不保存对于相对路径链接补全对于不是链接的链接遗弃(不是链接的链接是哪些东西?自己都认为的奇怪。。。。)
  对于第一种我就不多说了,相信你们都晓得该如何做。
  对付第二种的方式我就写一个才能运行相对路径的方式下来就OK了,通过父链接来进行相对路径转绝对路径。(有空补代码给你们。。。不好意思了)
  对于第三种也正则匹配一下就完了。 查看全部

  一、PHP 是哪些东西?
  PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特性,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的句型混和了C、Java、Perl以及PHP自创的句型。它可以比CGI或则Perl更快速地执行动态网页。用PHP作出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行php网络爬虫软件,使代码运行更快。——百度百科的描述。
  二、爬虫有哪些用?
  爬虫有哪些用?先说一下爬虫是哪些东西,我觉得爬虫就是一个网路信息搜集程序,也许我自己的理解有错误,也请你们给我见谅。既然爬虫是一个网路信息搜集程序,那就是拿来搜集信息,并且搜集的信息是在网路里面的。如果还是不太清楚爬虫有什么用php网络爬虫软件,我就举几个爬虫应用的事例:搜索引擎就须要爬虫搜集网路信息供人们去搜索;大数据的数据,数据从那里来?就是可以通过爬虫在网路中爬取(收集)而来。
  三、通常看到爬虫会想到 Python,但为何我用 PHP,而不用 Python 呢?
  Python 我说实话,我不会 Python。( Python 我真不会,想知道可能你要去百度一下,因为 Python 我真不会。)PHP 写东西我仍然都是觉得,你只要想出算法程序就早已下来了,不用考虑太多数据类型的问题。PHP 的句型和其他编程语言差不多,就算你开始不会 PHP,你也可以马上上手。PHP的句型和其他编程语言差不多,就算你开始不会 PHP,你也可以马上上手。的看法有错。)本人虽然也是初学 PHP,想通过写一些东西提升自己的水平。(下面可能有些代码会使你认为不够规范,欢迎见谅,谢谢。)
  四、PHP爬虫第一步
  PHP爬虫第一步,第一步......第一步其实就是搭建 PHP 的运行环境,没有环境PHP又如何能运行呢?就像虾不能离开水一样。(我见识还不够,可能我举的虾的事例不够好,请见谅。)在Windows的系统下我使用 WAMP,而在Linux的系统下我使用 LNMP 或者 LAMP。
  WAMP:Windows + Apache + Mysql + PHP
  LAMP:Linux + Apache + Mysql + PHP
  LNMP:Linux + Nginx + Mysql + PHP
  Apache 和 Nginx 是 Web 服务器软件。
  Apache或Nginx、Mysql 以及 PHP 这些都是 PHP Web 的基本配置环境。网上有 PHP Web 环境的安装包,这些安装包使用很方便,不需要每给东西安装以及配置。但若果你对这种集成安装包害怕安全问题,你可以到这种程序的官网下载之后在网上找配置教程就可以了。(说真的,我真心的不会单独去弄,我认为很麻烦。)
  五、 PHP爬虫第二步
  (感觉自己屁话很多,应该马上来一段代码!!!)
  &lt;?php
// 爬虫核心功能:获取网页源码
$html = file_get_contents(&#34;https://www.baidu.com/index.html&#34;);
// 通过 php 的 file_get_contents 函数获取百度首页源码,并传给 $html 变量
echo $html;
// 输出 $html
?&gt;
  爬虫网路核心功能早已写下来了,为什么说就如此几行代码就把爬虫核心功能写下来了呢?我猜有人早已明白了吧,其实是因为爬虫是数据获取的程序,就里面几行代码虽然早已才能获取数据了,所以爬虫的核心功能早已写下来了。可能有人会说“你这个也很菜了吧!有哪些用?”,虽然我是太菜,但请别说出来,让我好好装个X。(又说了两行屁话,不好意思。)
  其实爬虫是拿来干嘛,主要看你想使它来干嘛。就像我前些日子为了好玩写了一个搜索引擎网站出来,当然网站很菜,结果排序没有规律,很多都查不到。我的搜索引擎的爬虫就是要写一个适合于搜索引擎的爬虫。所以为了便捷我也就用写搜索引擎的爬虫为目标讲解。当然了,我搜索引擎的爬虫还是不够建立,不健全的地方都是要大家自己去创造,去建立。
  六、 搜索引擎爬虫的限制
  搜索引擎的爬虫有时候不是不能那种网站的页面获取页面源码,而是有robot.txt文件,有该文件的网站,就代表站主不希望爬虫去爬取页面源码。(不过若果你就是想要获取的话,就算有也一样会去爬吧!)
  我搜索引擎的爬虫虽然还有好多不足而造成的限制,例如可能由于未能运行 JS 脚本所以未能获取页面源码。又或则网站有反爬虫的机制引起不能获取到页面源码。有反爬虫机制的网站就如:知乎,知乎就是有反爬虫的机制的网站。
  七、以弄搜索引擎爬虫为例,准备写该爬虫须要的东西
  PHP 编写基础正则表达式(你也可以使用Xpath,对不起,我不会使用)数据库的使用(本文使用 MySql 数据库)运行环境(只要有能运行 PHP 网站的环境和数据库就OK)
  八、搜索引擎获取页面源码并获取页面的标题信息
  &lt;?PHP
// 通过 file_get_contents 函数获取百度页面源码
$html = file_get_contents(&#34;https://www.baidu.com/index.html&#34;);
// 通过 preg_replace 函数使页面源码由多行变单行
$htmlOneLine = preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
// 通过 preg_match 函数提取获取页面的标题信息
preg_match(&#34;/&lt;title&gt;(.*)&lt;\/title&gt;/iU&#34;,$htmlOne,$titleArr);
// 由于 preg_match 函数的结果是数组的形式
$title = $titleArr[1];
// 通过 echo 函数输出标题信息
echo $title;
?&gt;
  报错误示例:
  Warning: file_get_contents("127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
  https是SSL加密合同,如果出现获取页面晨报里面的错误,代表你的 PHP 可能少了OpenSSL 的模块,你可以到网上查找解决办法。
  九、搜索引擎爬虫的特征
  虽然我没见过象“百度”,“Google”它们的爬虫,可是我自己通过推测,以及在实际爬去过程当中遇见的一些问题,自己总结的几个特性。(可能有不对的地方,或者缺乏的地方,欢迎见谅,谢谢。)
  通用性
  通用性是因为我觉得搜索引擎的爬虫一开始并不是针对哪一个网站制定的,所以要求能爬取到的网站尽可能的多,这是第一点。而第二点,就是获取网页的信息就是这些,一开始不会由于个别某些特殊小网站而舍弃个别信息不提取,举个反例:一个小网站的一个网页meta标签里没有描述信息(description)或者关键词信息(keyword),就直接舍弃了描述信息或则关键词信息的提取,当然假如真的某一个页面没有这种信息我会提取页面里的文字内容作为填充,反正就是尽可能达到爬取的网页信息每位网页的信息项都要一样。这是我觉得的搜索引擎爬虫的通用性,当然我的看法可能是错误的。(我说得可能不是很好,我仍然在学习。)
  不确定性
  不确定性就是我的爬虫获取哪些网页我是控制不够全面的,只能控制我能想到的情况,这也是由于我写的算法就是这样的缘由,我的算法就是爬取获取到的页面里的所有链接,再去爬去获取到的那些链接,其实是因为搜索引擎并不是搜某一些东西,而是尽可能的多,因为只有更多的信息,才能找到一个最贴切用户想要的答案。所以我就认为搜索引擎的爬虫就要有不确定性。(我自己再看了一遍,也有点认为自己说得有点使自己看不懂,请见谅,欢迎见谅,提问,谢谢了!)
  下面的视频是我的搜索网站的使用视频,而搜到的信息就是通过自己写的 PHP 爬虫获取到的。(这个网站我早已不再继续维护了,所以有缺乏之处,请见谅。)
  
  十、到如今可能出现的问题
  获取的源码出现乱码
  &lt;?PHP
// 乱码解决办法,把其他编码格式通过 mb_convert_encoding 函数统一转为 UTF-8 格式
$html = mb_convert_encoding($html,&#39;UTF-8&#39;,&#39;UTF-8,GBK,GB2312,BIG5&#39;);
// 还有一种因为gzip所以出现乱码的,我会在以后讲
?&gt;
  2. 获取不到标题信息
  &lt;?PHP
// 获取不到标题信息解决办法,首先判断是否能获取到页面源码
// 如果能获取到但还是不能获取到标题信息
// 我猜测的问题是:因为我教的是使用正则表达式获取的,源码没有变成一行,获取起来就会出现问题
$htmlOneLine=preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
?&gt;
  3.获取不到页面源码
  &lt;?PHP
// 像新浪微博你可能获取到的是“Sina Visitor System”
// 解决办法添加header信息
$opts = array(
&#39;http&#39;=&gt;array(
&#39;method&#39;=&gt;&#34;GET&#34;,
&#34;timeout&#34;=&gt;20,
&#39;header&#39;=&gt;&#34;User-Agent: Spider \r\n&#34;,
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 这样就能获取到新浪微博的页面了
?&gt;
  十一、获取一个网页时的处理思路
  我们先不去想好多网页,因为好多网页也就是一个循环。
  获取页面源码通过源码提取页面的哪些信息提取的信息要如何处理处理后放不放进数据库
  十二、按照十一的思路的代码
  &lt;?php
// 一、获取源码
// 假设我们要获取淘宝首页
$html = file_get_content(&#34;https://www.taobao.com&#34;);
// 二、提取标题和文本
// 三、提取信息处理
// 处理页面源码,多行变单行
$htmlOneLine = preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
// 获取标题信息
preg_match(&#34;/&lt;title&gt;(.*)&lt;\/title&gt;/iU&#34;,$htmlOneLine,$titleArr);
// 保留标题信息
$titleOK = $titleArr[1];
// 获取页面中的文本信息
// 处理前面不需要的head标签
$htmlText = preg_replace(&#34;/&lt;html&gt;(.*)&lt;\/head&gt;/&#34;,&#34;&#34;,$htmlOneLine);
// 处理style和script标签及内容
$htmlText = preg_replace(&#34;/&lt;style(.*)&gt;(.*)&lt;/style&gt;|&lt;script(.*)&gt;(.*)&lt;/script&gt;/iU&#34;,&#34;&#34;,$htmlText);
// 处理多余标签
$htmlText = preg_replace(&#34;/&lt;(\/)?(.+)&gt;/&#34;,&#34;&#34;,$htmlText);
// 四、保存到数据库
// 略
?&gt;
  十三、PHP 保存页面的图片思路
  获取页面源码获取页面的图片链接使用函数保存图片
  十四、保存图片示例代码
  &lt;?php
// 使用file_get_contents()函数获取图片
$img = file_get_contents(&#34;http://127.0.0.1/photo.jpg&#34;);
// 使用file_put_contents()函数保存图片
file_put_contents(&#34;photo.jpg&#34;,$img);
?&gt;
  十五、gzip解压
  本来我以为自己写的爬虫早已写得差不多了,就是不仅反爬虫的网站难以爬取外,应该是都可以爬了。但有三天我去尝试爬去bilibili的时侯出现问题了,我发觉如何我数据库上面的都是乱码,而且标题哪些的都没有,好奇怪!后来我才晓得原先是因为GZIP的压缩,原来我直接使用file_get_content函数获取的页面是未经过解压的页面,所有都是乱码!好了,然后我晓得问题出现在哪里了,接下来就是想解决办法了。(其实那时候的我是完全不知道如何解决解压gzip的,都靠搜索引擎,哈哈哈哈哈)。
  我得到了两个解决办法:
  在 request header 那里告诉对方服务器,我这爬虫(不。。。应该是我这浏览器)不支持gzip的解压,就麻烦你不要压缩,直接把数据发给我吧!
   // 这是request header(请求头)
$opts = array(
&#39;http&#39;=&gt;array(
&#39;method&#39;=&gt;&#34;GET&#34;,
&#34;timeout&#34;=&gt;20,
&#39;header&#39;=&gt;&#34;User-Agent: Spider \r\n&#34;.
&#34;accept-encoding:&#34;
)
);
// 我把accept-encodeing(能接收编码)设为空,代表不接受gzip
  2. 如果告诉了对方服务器本浏览器(爬虫)不支持解压gzip,可他还是继续发gzip的数据给你,那就没有办法了,只好默默的在搜索引擎找php解压gzip的解压函数——gzdecode()。
  // 废话:好久没更新了,因为近来又在重复造轮子,不过好开心-- 2019.01.14
  十六、子链接的获取
  网页爬虫就好比手动的网页源码另存为操作,可是假如真的是一个一个网址自动输入给爬虫去爬取的话,那还倒不如人手另存为呢!所以在这里就得解析到这些子链接,一个网页似乎会有好多的a标签,而这种a标签的href属性值都会是一个子链接。(这句如何觉得有一点屁话呢?应该你们都晓得吧!)通过好多种工具的解析得到了原始的子链接(我没用html的工具,就是用了正则表达式及工具)为什么叫原始数据,因为这些子链接有很多不是URL链接,又或则是一些不完整的链接,又或则你是要爬一个网站,不要爬虫跑出去的时侯,还得消除一些并非那种网站的链接,防止爬虫跑出去。下面我列出一些原始子链接。(其实就是我喷到的坑。。。)
  http://wxample.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
  你可以看得到这儿有很多种链接,有完整的绝对路径的链接,也有不完整的相对路径链接,有的还跑来了javascript,如果是相对路径或javascript的链接,直接给爬虫去爬,肯定使爬虫一脸懵,因为不完整或根本就不是一个链接。所以就须要对子链接补全或则扔掉。
  十七、子链接的处理
  上面屁话了一大堆后,接下来还是继续屁话。好了,处理虽然就是去重、丢弃以及补全。
  对于相同的子链接遗弃不保存对于相对路径链接补全对于不是链接的链接遗弃(不是链接的链接是哪些东西?自己都认为的奇怪。。。。)
  对于第一种我就不多说了,相信你们都晓得该如何做。
  对付第二种的方式我就写一个才能运行相对路径的方式下来就OK了,通过父链接来进行相对路径转绝对路径。(有空补代码给你们。。。不好意思了)
  对于第三种也正则匹配一下就完了。

一个简单的开源PHP爬虫框架『Phpfetcher』

采集交流优采云 发表了文章 • 0 个评论 • 338 次浏览 • 2020-05-27 08:02 • 来自相关话题

  报dom为空
  
  fanfank 文章作者
  完整的代码贴下来我看一下,或者在微博私信我,我帮你看一下
  
  aa
  //下面两行促使这个项目被下载出来后本文件能直接运行
  $demo_include_path = dirname(__FILE__) . ‘/../’;
  set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
  require_once(‘phpfetcher.php’);
  class mycrawler extends Phpfetcher_Crawler_Default {
  public function handlePage($page) {
  var_dump($page);
  //打印处当前页面的第1个h1标题内荣(下标从0开始)
  $strFirstH1 = trim($page-&gt;sel(‘//title’, 0)-&gt;plaintext);
  if (!empty($strFirstH1)) {
  echo $page-&gt;sel(‘//title’, 0)-&gt;plaintext;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  //任务的名子随意起,这里把名子叫qqnews
  //the key is the name of a job, here names it qqnews
  ‘qqnews’ =&gt; array(
  ‘start_page’ =&gt; ‘#8217;, //起始网页
  ‘link_rules’ =&gt; array(
  /*
  * 所有在这里列举的正则规则,只要能匹配到超链接,那么那条爬虫才会爬到那条超链接
  * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
  */
  //’#news\.qq\.com/a/\d+/\d+\.htm$#’,
  ),
  //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1
  //Crawler’s max following depth, 1 stands for only crawl the start page
  ‘max_depth’ =&gt; 1,
  ) ,
  );
  $crawler-&gt;setFetchJobs($arrJobs)-&gt;run(); //这一行的疗效和下边两行的疗效一样
  其他的没变
  
  aa
  public function read() {
  $this-&gt;_strContent = curl_exec($this-&gt;_curlHandle);
  是_strContent取到了false造成的 这个是啥缘由呢Page default.php
  
  fanfank 文章作者
  我这儿返回的是403 forbidden,查了一下晓得缘由了,因为user_agent的问题csdn把爬虫给禁了。你可以这样更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,当然你可以可以改得更真实一点,例如哪些『Mozilla/5.0 AppleWebKit』之类的
  有些网站会依照UA来屏蔽恳求,可能是因为个别UA有恶意功击的特点,或者一些爬虫之类的开源爬虫框架,之前百度有一段时间屏蔽360浏览器就是通过360浏览器里一些特定的UA来做到的,当然后来360浏览器把UA给更改嗯,就须要依照其它特点屏蔽了。
  所以你这儿先改一下user_agent吧。
  
  aa
  多谢哈
  试着改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
  试了这儿的也不行 恐怕还是curl的问题
  
  fanfank 文章作者
  我这儿执行都是正常的,结果也能下来。还是通过微博私信说吧,这里说得刷屏了
  
  aa
  围脖id是?
  
  fanfank 文章作者
  另外是,你贴的代码上面,标点符号不对啊,你的start_page对应那一行的标点,怎么是英文的单冒号?后面的单冒号似乎也不是个单冒号吧?要全部用英语的单冒号才行。
  
  aa
  符号是对的哈 都是英语的 没句型错误
  
  joke
  为什么匹配的内容都一样?
  代码:
  sel(‘//span[@id=”text110″]’, 0)-&gt;plaintext);
  if (!empty($strFirstH1)) {
  echo “”;
  echo $page-&gt;sel(‘//span[@id=”text110″]’, 0)-&gt;plaintext;
  echo “”;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  ‘joke’ =&gt; array(
  ‘start_page’ =&gt; ‘#8217;,
  ‘link_rules’ =&gt; array(
  ‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
  ),
  ‘max_depth’ =&gt; 2,
  ) ,
  );
  $crawler-&gt;setFetchJobs($arrJobs)-&gt;run();
  
  fanfank 文章作者
  你的代码没贴全,而且匹配的内容都一样我没很理解是哪些意思,这个问题有点长,你直接在微博私信我,我帮你看一下
  
  fanfank 文章作者
  已经修补了。之前的问题是爬虫不认识站内链接,例如有的超链接是『/entry』这样的,而不是『』。现在最新的Phpfetcher早已就能辨识站内链接,可以试一下
  
  joke
  谢谢 ,搞定了
  
  modejun
  楼主您好,问问假如我晓得了一个网站开源爬虫框架,但是要递交post参数,这个要如何弄呢,朋友提供一下思路
  
  fanfank 文章作者
  提交post参数,那觉得场景很特殊的,因为这个就不是单纯地按照链接爬取网页内容了,而且假如真的提供这个功能,针对什么样的链接什么样的参数,怎么递交,然后返回的内容是如何处理这种,目前我觉得似乎不太适宜爬虫做。或者你在微博私信我,告诉我你的使用场景是哪些,我瞧瞧是不是考虑找时间加进去
  
  modejun
  场景就是有一翻页时用ajax post递交的page参数,如果是get就太easy。还有顺便问问,如果翻页我明天试了要解决的话就是调节深度,但是似乎最大是20,还有就是更改正则循环调用setFetchJobs这个方式,总是觉得不是这么完美,有哪些好的思路解决翻页这个问题吗,现在公司在定方案我想多了解把这个框架的优势发挥下来,感谢了。
  
  fanfank 文章作者
  如果像你说的是个post恳求,那么它返回的应当不是一个HTML格式的文档,通常都是json格式的,然后由当前页面将异步返回的内容加载显示下来。
  你们的post恳求应当是有类似pn,rn等参数,如果大家仅仅是想领到post恳求的所有内容,可以直接写一个for循环,然后使用php的curl来直接发送post恳求获取每一个页面内容,可以不使用爬虫,因为这个爬虫基本原理是针对GET恳求返回的HTML页面的,然后手动抽取HTML的标签
  最大深度可以更改类『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』变量,把20改成-1就没有限制了,不过建议还是设一个上限比较好
  可以不需要循环更改正则呀,设置正则规则的可以是一个链表,把上面的所有你认为合适的正则都列上就可以,除非说你的正则表达式还得依据页面的某个参数或则内容不同而更改,那这个情况还是相对特殊了一点···
  翻页的解决,如果是GET就用爬虫,如果是POST,那么直接for循环之后调用curl会更好。
  
  ;;;
  好像不错
  
  ;;;
  能不能写个DOM选择器和技巧的文档,最好支持css选择DOM标签,有子节点,父节点,兄弟节点选择才好
  
  fanfank 文章作者
  在这个项目的github页面:,中文说明的第2节上面,有介绍dom选择器的文档
  
  jeremy
  博主。。为什么https的页面没办法恳求呢? 查看全部

  报dom为空
  
  fanfank 文章作者
  完整的代码贴下来我看一下,或者在微博私信我,我帮你看一下
  
  aa
  //下面两行促使这个项目被下载出来后本文件能直接运行
  $demo_include_path = dirname(__FILE__) . ‘/../’;
  set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
  require_once(‘phpfetcher.php’);
  class mycrawler extends Phpfetcher_Crawler_Default {
  public function handlePage($page) {
  var_dump($page);
  //打印处当前页面的第1个h1标题内荣(下标从0开始)
  $strFirstH1 = trim($page-&gt;sel(‘//title’, 0)-&gt;plaintext);
  if (!empty($strFirstH1)) {
  echo $page-&gt;sel(‘//title’, 0)-&gt;plaintext;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  //任务的名子随意起,这里把名子叫qqnews
  //the key is the name of a job, here names it qqnews
  ‘qqnews’ =&gt; array(
  ‘start_page’ =&gt; ‘#8217;, //起始网页
  ‘link_rules’ =&gt; array(
  /*
  * 所有在这里列举的正则规则,只要能匹配到超链接,那么那条爬虫才会爬到那条超链接
  * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
  */
  //’#news\.qq\.com/a/\d+/\d+\.htm$#’,
  ),
  //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1
  //Crawler’s max following depth, 1 stands for only crawl the start page
  ‘max_depth’ =&gt; 1,
  ) ,
  );
  $crawler-&gt;setFetchJobs($arrJobs)-&gt;run(); //这一行的疗效和下边两行的疗效一样
  其他的没变
  
  aa
  public function read() {
  $this-&gt;_strContent = curl_exec($this-&gt;_curlHandle);
  是_strContent取到了false造成的 这个是啥缘由呢Page default.php
  
  fanfank 文章作者
  我这儿返回的是403 forbidden,查了一下晓得缘由了,因为user_agent的问题csdn把爬虫给禁了。你可以这样更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,当然你可以可以改得更真实一点,例如哪些『Mozilla/5.0 AppleWebKit』之类的
  有些网站会依照UA来屏蔽恳求,可能是因为个别UA有恶意功击的特点,或者一些爬虫之类的开源爬虫框架,之前百度有一段时间屏蔽360浏览器就是通过360浏览器里一些特定的UA来做到的,当然后来360浏览器把UA给更改嗯,就须要依照其它特点屏蔽了。
  所以你这儿先改一下user_agent吧。
  
  aa
  多谢哈
  试着改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
  试了这儿的也不行 恐怕还是curl的问题
  
  fanfank 文章作者
  我这儿执行都是正常的,结果也能下来。还是通过微博私信说吧,这里说得刷屏了
  
  aa
  围脖id是?
  
  fanfank 文章作者
  另外是,你贴的代码上面,标点符号不对啊,你的start_page对应那一行的标点,怎么是英文的单冒号?后面的单冒号似乎也不是个单冒号吧?要全部用英语的单冒号才行。
  
  aa
  符号是对的哈 都是英语的 没句型错误
  
  joke
  为什么匹配的内容都一样?
  代码:
  sel(‘//span[@id=”text110″]’, 0)-&gt;plaintext);
  if (!empty($strFirstH1)) {
  echo “”;
  echo $page-&gt;sel(‘//span[@id=”text110″]’, 0)-&gt;plaintext;
  echo “”;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  ‘joke’ =&gt; array(
  ‘start_page’ =&gt; ‘#8217;,
  ‘link_rules’ =&gt; array(
  ‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
  ),
  ‘max_depth’ =&gt; 2,
  ) ,
  );
  $crawler-&gt;setFetchJobs($arrJobs)-&gt;run();
  
  fanfank 文章作者
  你的代码没贴全,而且匹配的内容都一样我没很理解是哪些意思,这个问题有点长,你直接在微博私信我,我帮你看一下
  
  fanfank 文章作者
  已经修补了。之前的问题是爬虫不认识站内链接,例如有的超链接是『/entry』这样的,而不是『』。现在最新的Phpfetcher早已就能辨识站内链接,可以试一下
  
  joke
  谢谢 ,搞定了
  
  modejun
  楼主您好,问问假如我晓得了一个网站开源爬虫框架,但是要递交post参数,这个要如何弄呢,朋友提供一下思路
  
  fanfank 文章作者
  提交post参数,那觉得场景很特殊的,因为这个就不是单纯地按照链接爬取网页内容了,而且假如真的提供这个功能,针对什么样的链接什么样的参数,怎么递交,然后返回的内容是如何处理这种,目前我觉得似乎不太适宜爬虫做。或者你在微博私信我,告诉我你的使用场景是哪些,我瞧瞧是不是考虑找时间加进去
  
  modejun
  场景就是有一翻页时用ajax post递交的page参数,如果是get就太easy。还有顺便问问,如果翻页我明天试了要解决的话就是调节深度,但是似乎最大是20,还有就是更改正则循环调用setFetchJobs这个方式,总是觉得不是这么完美,有哪些好的思路解决翻页这个问题吗,现在公司在定方案我想多了解把这个框架的优势发挥下来,感谢了。
  
  fanfank 文章作者
  如果像你说的是个post恳求,那么它返回的应当不是一个HTML格式的文档,通常都是json格式的,然后由当前页面将异步返回的内容加载显示下来。
  你们的post恳求应当是有类似pn,rn等参数,如果大家仅仅是想领到post恳求的所有内容,可以直接写一个for循环,然后使用php的curl来直接发送post恳求获取每一个页面内容,可以不使用爬虫,因为这个爬虫基本原理是针对GET恳求返回的HTML页面的,然后手动抽取HTML的标签
  最大深度可以更改类『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』变量,把20改成-1就没有限制了,不过建议还是设一个上限比较好
  可以不需要循环更改正则呀,设置正则规则的可以是一个链表,把上面的所有你认为合适的正则都列上就可以,除非说你的正则表达式还得依据页面的某个参数或则内容不同而更改,那这个情况还是相对特殊了一点···
  翻页的解决,如果是GET就用爬虫,如果是POST,那么直接for循环之后调用curl会更好。
  
  ;;;
  好像不错
  
  ;;;
  能不能写个DOM选择器和技巧的文档,最好支持css选择DOM标签,有子节点,父节点,兄弟节点选择才好
  
  fanfank 文章作者
  在这个项目的github页面:,中文说明的第2节上面,有介绍dom选择器的文档
  
  jeremy
  博主。。为什么https的页面没办法恳求呢?

phpspider: 《我用爬虫三天时间“偷了”知乎一百万用户

采集交流优采云 发表了文章 • 0 个评论 • 348 次浏览 • 2020-05-20 08:01 • 来自相关话题

  《我用爬虫三天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
  phpspider是一个爬虫开发框架。使用本框架爬虫技术用什么语言,你不用了解爬虫的底层技术实现,爬虫被网站屏蔽、有些网站需要登入或验证码识别才会爬取等问题。简单几行PHP代码,就可以创建自己的爬虫,利用框架封装的多进程Worker解释器,代码更简练,执行效率更高速率更快。
  demo目录下有一些特定网站的爬取规则,只要你安装了PHP环境,代码就可以在命令行下直接跑。 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。
  下面以糗事百科为例, 来看一下我们的爬虫长哪些样子:
  $configs = array(&#x000A; 'name' =&gt; '糗事百科',&#x000A; 'domains' =&gt; array(&#x000A; 'qiushibaike.com',&#x000A; 'www.qiushibaike.com'&#x000A; ),&#x000A; 'scan_urls' =&gt; array(&#x000A; 'http://www.qiushibaike.com/'&#x000A; ),&#x000A; 'content_url_regexes' =&gt; array(&#x000A; "http://www.qiushibaike.com/article/\d+"&#x000A; ),&#x000A; 'list_url_regexes' =&gt; array(&#x000A; "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"&#x000A; ),&#x000A; 'fields' =&gt; array(&#x000A; array(&#x000A; // 抽取内容页的文章内容&#x000A; 'name' =&gt; "article_content",&#x000A; 'selector' =&gt; "//*[@id='single-next-link']",&#x000A; 'required' =&gt; true&#x000A; ),&#x000A; array(&#x000A; // 抽取内容页的文章作者&#x000A; 'name' =&gt; "article_author",&#x000A; 'selector' =&gt; "//div[contains(@class,'author')]//h2",&#x000A; 'required' =&gt; true&#x000A; ),&#x000A; ),&#x000A;);&#x000A;$spider = new phpspider($configs);&#x000A;$spider-&gt;start();
  爬虫的整体框架就是这样, 首先定义了一个$configs链表, 里面设置了待爬网站的一些信息, 然后通过调用$spider = new phpspider($configs);和$spider-&gt;start();来配置并启动爬虫.
  
  更多详尽内容爬虫技术用什么语言,移步到:
  开发文档 查看全部

  《我用爬虫三天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
  phpspider是一个爬虫开发框架。使用本框架爬虫技术用什么语言,你不用了解爬虫的底层技术实现,爬虫被网站屏蔽、有些网站需要登入或验证码识别才会爬取等问题。简单几行PHP代码,就可以创建自己的爬虫,利用框架封装的多进程Worker解释器,代码更简练,执行效率更高速率更快。
  demo目录下有一些特定网站的爬取规则,只要你安装了PHP环境,代码就可以在命令行下直接跑。 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。
  下面以糗事百科为例, 来看一下我们的爬虫长哪些样子:
  $configs = array(&#x000A; 'name' =&gt; '糗事百科',&#x000A; 'domains' =&gt; array(&#x000A; 'qiushibaike.com',&#x000A; 'www.qiushibaike.com'&#x000A; ),&#x000A; 'scan_urls' =&gt; array(&#x000A; 'http://www.qiushibaike.com/'&#x000A; ),&#x000A; 'content_url_regexes' =&gt; array(&#x000A; "http://www.qiushibaike.com/article/\d+"&#x000A; ),&#x000A; 'list_url_regexes' =&gt; array(&#x000A; "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"&#x000A; ),&#x000A; 'fields' =&gt; array(&#x000A; array(&#x000A; // 抽取内容页的文章内容&#x000A; 'name' =&gt; "article_content",&#x000A; 'selector' =&gt; "//*[@id='single-next-link']",&#x000A; 'required' =&gt; true&#x000A; ),&#x000A; array(&#x000A; // 抽取内容页的文章作者&#x000A; 'name' =&gt; "article_author",&#x000A; 'selector' =&gt; "//div[contains(@class,'author')]//h2",&#x000A; 'required' =&gt; true&#x000A; ),&#x000A; ),&#x000A;);&#x000A;$spider = new phpspider($configs);&#x000A;$spider-&gt;start();
  爬虫的整体框架就是这样, 首先定义了一个$configs链表, 里面设置了待爬网站的一些信息, 然后通过调用$spider = new phpspider($configs);和$spider-&gt;start();来配置并启动爬虫.
  
  更多详尽内容爬虫技术用什么语言,移步到:
  开发文档

phpcms跟dedecms比较

采集交流优采云 发表了文章 • 0 个评论 • 338 次浏览 • 2020-04-26 11:01 • 来自相关话题

  现在做一个网站是越来越容易了,很多公司和个人站长开始使用内容管理系统,在CMS方面,尤其是PHP的CMS,更是百花齐放,当然了,质量也参差不齐。目前国外比较流行的有Dedecms和Phpcms,下面华来科技就这两个cms做一下简单的对比。
  首先从用户界面来看,也就是管理后台,首先是登陆,dedecms登录框下边的几个广告,着实叫人烦躁,看着不爽。当然了,毕竟人家靠这这点儿微薄的收入给俺开发出了如此强悍的cms系统。phpcms的登入界面就没有广告了,盛大也不缺这点儿钱。当步入后台主界面后,dedecms则变得有些狭小,界面也不是太华丽。在这一点上,phpcms做的很不错,大气,华丽。
  从使用上来看,dedecms的操作去集中在了左侧,条例太清楚。phpcms则把一级导航放到了里面,二级导航放到了左侧,但是当选择完后,却没有相应的指示,往往使用户不知道自己处于那个导航之中,而且,phpcms在导航手动收起功能,感觉象是鸡肋,每次他收起时,我正在进行的操作还会被打乱,还不如没有这个功能来的好,也许是我的浏览器是宽屏的,即使不收起,依然觉得左侧的可编辑区域不小。
  从模板开发上,dedecms面向的是中级站长,甚至不懂编程的计算机爱好者都可以,而且,dedecms的标签都不容许编程({dede:php}除外),完全都是模板标签操作,入门十分简单,当然了这也是以牺牲可定制性为代价的。phpcms的模板制做,也取样了dede同意的方法,标签式,但是这个要比dedecms宽松的多,你可以在上面嵌入php代码,可以在模板上面编程,虽然这是软件开发的三忌,但是模板的灵活性显著降低了,用户有了更多的权限和方法去实现自己想要的疗效。
  SEO方面,做完网站了,如果他人都不来访问,或者根本找不到你的网站,那就很没面子了,而且也没收入了。在SEO方面,这两个cms做的都很不错,最通常的关键词和描述都有,而且是针对每位页面的。默认都可以设置页面生成的文件名称(补充一点,这两个cms都可以生成静态的html页面,这也对seo有很大帮助)。phpcms相对于dedecms的一些不足之处,网站的seo优化没有dedecms设计的好火车头采集教程,dedecms可以很简单的在后台控制url的生成方法,并且重命名,而phpcms貌似很复杂,最重要的是官方不给一点详尽的说明。
  论坛活跃程度方面,如果使用dedecms遇到问题,可以去任何一个峰会发贴,很快有人回复,其峰会的活跃程度可不是通常的高。而phpcms呢,毕竟这个产品是盛大开发的,你问客服吧,不敢,我相信大部分人都和我一样,用的是免费的。所以只能老老实实的去峰会发贴,希望有人回答,但是峰会活跃程度远不如dedecms,而且phpcms还同时维护了两个版本,一个2008(听这名子,盛大也很懒了吧,4年不更新了),一个V9。
  其他方面,很多人离开dedecms而转投phpcms,还有一个很重要的方面,那就是phpcms有一个dede所没有的功能――站群,当年我就是,从一个站长峰会上面看见了站群的概念,看了看仍然使用的dedecms很是沮丧,果断Google了一下支持站群的cms,然后转入了phpcms门下。
  总结火车头采集教程,比较了这么多,两个cms都各有千秋,其实对于用户来说,还是使用习惯,当我们一旦习惯了一个工具的时侯,自然都会得心应手。 查看全部

  现在做一个网站是越来越容易了,很多公司和个人站长开始使用内容管理系统,在CMS方面,尤其是PHP的CMS,更是百花齐放,当然了,质量也参差不齐。目前国外比较流行的有Dedecms和Phpcms,下面华来科技就这两个cms做一下简单的对比。
  首先从用户界面来看,也就是管理后台,首先是登陆,dedecms登录框下边的几个广告,着实叫人烦躁,看着不爽。当然了,毕竟人家靠这这点儿微薄的收入给俺开发出了如此强悍的cms系统。phpcms的登入界面就没有广告了,盛大也不缺这点儿钱。当步入后台主界面后,dedecms则变得有些狭小,界面也不是太华丽。在这一点上,phpcms做的很不错,大气,华丽。
  从使用上来看,dedecms的操作去集中在了左侧,条例太清楚。phpcms则把一级导航放到了里面,二级导航放到了左侧,但是当选择完后,却没有相应的指示,往往使用户不知道自己处于那个导航之中,而且,phpcms在导航手动收起功能,感觉象是鸡肋,每次他收起时,我正在进行的操作还会被打乱,还不如没有这个功能来的好,也许是我的浏览器是宽屏的,即使不收起,依然觉得左侧的可编辑区域不小。
  从模板开发上,dedecms面向的是中级站长,甚至不懂编程的计算机爱好者都可以,而且,dedecms的标签都不容许编程({dede:php}除外),完全都是模板标签操作,入门十分简单,当然了这也是以牺牲可定制性为代价的。phpcms的模板制做,也取样了dede同意的方法,标签式,但是这个要比dedecms宽松的多,你可以在上面嵌入php代码,可以在模板上面编程,虽然这是软件开发的三忌,但是模板的灵活性显著降低了,用户有了更多的权限和方法去实现自己想要的疗效。
  SEO方面,做完网站了,如果他人都不来访问,或者根本找不到你的网站,那就很没面子了,而且也没收入了。在SEO方面,这两个cms做的都很不错,最通常的关键词和描述都有,而且是针对每位页面的。默认都可以设置页面生成的文件名称(补充一点,这两个cms都可以生成静态的html页面,这也对seo有很大帮助)。phpcms相对于dedecms的一些不足之处,网站的seo优化没有dedecms设计的好火车头采集教程,dedecms可以很简单的在后台控制url的生成方法,并且重命名,而phpcms貌似很复杂,最重要的是官方不给一点详尽的说明。
  论坛活跃程度方面,如果使用dedecms遇到问题,可以去任何一个峰会发贴,很快有人回复,其峰会的活跃程度可不是通常的高。而phpcms呢,毕竟这个产品是盛大开发的,你问客服吧,不敢,我相信大部分人都和我一样,用的是免费的。所以只能老老实实的去峰会发贴,希望有人回答,但是峰会活跃程度远不如dedecms,而且phpcms还同时维护了两个版本,一个2008(听这名子,盛大也很懒了吧,4年不更新了),一个V9。
  其他方面,很多人离开dedecms而转投phpcms,还有一个很重要的方面,那就是phpcms有一个dede所没有的功能――站群,当年我就是,从一个站长峰会上面看见了站群的概念,看了看仍然使用的dedecms很是沮丧,果断Google了一下支持站群的cms,然后转入了phpcms门下。
  总结火车头采集教程,比较了这么多,两个cms都各有千秋,其实对于用户来说,还是使用习惯,当我们一旦习惯了一个工具的时侯,自然都会得心应手。

PHP教程—DedeCMS二次开发(二)

采集交流优采云 发表了文章 • 0 个评论 • 309 次浏览 • 2020-04-10 11:01 • 来自相关话题

  
  织梦内容管理系统(DedeCMS),是一个集内容发布、编辑、管理检索等于一体的网站管理系统(Web CMS),他拥有美国CMS诸多特性之外,还结合中国用户的须要,对内容管理系统概念进行明晰剖析和定位。
  DedeCMS二次开发
  1、DedeCMS的二次开发
  为了使更多人了解二次开发,并更方便的了解DedeCMS的二次开发,下面将会简单的介绍关于DedeCMS二次开发的一些基础和大纲
  2、DedeCMS二次开发必备基础:
  · 非常熟悉HTML
  · 熟悉p+CSS的布局
  · 扎实的PHP基础php网站分类目录程序 网址导航程序 织梦二次开发,熟悉结构化编程,了解OOP,并能看懂和使用
  · 熟悉MYSQL,掌握SQL语言
  3、DedeCMS二次开发学习过程
  · 理解CMS是哪些
  · 熟悉DedeCMS的功能(如:栏目的分类,文档管理,模型的使用,系统的设置等常用的功能)
  · 掌握DedeCMS的模板标签使用及原理
  · DedeCMS目录结构剖析 熟悉每位文件夹上面主要装哪些文件,这样在二次开发的时侯晓得在那个文件夹下的哪些文件更改
  目录结构摘要:
  ./a 生成文件储存路径 .
  /data 缓存文件及数据中心
  /admin 管理后台数据
  /backupdata 备份数据
  /cache 缓存文件
  /enums 级别联动数据,JS,枚举类型的缓存文件
  /js 常用的JS
  /mark 水印相关文件
  /module 模块安装文件
  /rss Rss相关
  /sessions Session 存放路径
  /textdata 文本数据
  /tplcache 模板缓存
  /uploadtmp 上传文件缓存位置
  /ziptmp zip包解压缓存位置 ……
  DedeCMS文件结构剖析 熟悉每位文件的基本功能,方便做更改,知道每位文件的大约作用以后,可以便捷的对文件进行更改
  文件结构摘要:
  common.inc.php 数据库配置文件
  config.cache.bak.php 后台系统配置备份
  config.cache.inc.php 后台系统配置文件缓存
  downmix.data.php 采集混淆缓存文件
  mysql_error_track.inc MYSQL错误志
  safequestions.php 安全问题
  sitemap.html 站点地图
  sys_pay.cache.php 支付网段配置
  template.rand.php 随机模板设置 ……
  · DedeCMS数据库结构剖析,至少要熟悉每位表的作用 熟悉每位表的作用,了解几个核心表的设计及数组的含意,方便领到新的需求以后,能快速的判定是否加数组,还是新建表来处理。同时也能理解DedeCMS的数据库设计思想,把有用的设计思路加到自己的系统中。
  · DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登录,注册,文档管理,权限控制,分类管理,模型设置等一些常用流程控制。对几个核心文件进行解剖,了解其编程方法及安全机制
  · DedeCMS插件的开发(****式插件和内嵌式插件) 熟悉两种插件的编撰,插件的导出导入php网站分类目录程序 网址导航程序 织梦二次开发,插件搭配模型的使用
  作为国外第一个开源的内容管理系统,DedeCMS在创建以来都在摸索中国互联网内容管理系统的公路,并且推动诸多开源CMS前进的公路,程序由当初个人作品,现已成立团队,在提高用户服务、提高产品质量的同时,对中国网站内容管理系统进行研究,成为目前市场上最受欢迎的内容管理系统。 查看全部

  
  织梦内容管理系统(DedeCMS),是一个集内容发布、编辑、管理检索等于一体的网站管理系统(Web CMS),他拥有美国CMS诸多特性之外,还结合中国用户的须要,对内容管理系统概念进行明晰剖析和定位。
  DedeCMS二次开发
  1、DedeCMS的二次开发
  为了使更多人了解二次开发,并更方便的了解DedeCMS的二次开发,下面将会简单的介绍关于DedeCMS二次开发的一些基础和大纲
  2、DedeCMS二次开发必备基础:
  · 非常熟悉HTML
  · 熟悉p+CSS的布局
  · 扎实的PHP基础php网站分类目录程序 网址导航程序 织梦二次开发,熟悉结构化编程,了解OOP,并能看懂和使用
  · 熟悉MYSQL,掌握SQL语言
  3、DedeCMS二次开发学习过程
  · 理解CMS是哪些
  · 熟悉DedeCMS的功能(如:栏目的分类,文档管理,模型的使用,系统的设置等常用的功能)
  · 掌握DedeCMS的模板标签使用及原理
  · DedeCMS目录结构剖析 熟悉每位文件夹上面主要装哪些文件,这样在二次开发的时侯晓得在那个文件夹下的哪些文件更改
  目录结构摘要:
  ./a 生成文件储存路径 .
  /data 缓存文件及数据中心
  /admin 管理后台数据
  /backupdata 备份数据
  /cache 缓存文件
  /enums 级别联动数据,JS,枚举类型的缓存文件
  /js 常用的JS
  /mark 水印相关文件
  /module 模块安装文件
  /rss Rss相关
  /sessions Session 存放路径
  /textdata 文本数据
  /tplcache 模板缓存
  /uploadtmp 上传文件缓存位置
  /ziptmp zip包解压缓存位置 ……
  DedeCMS文件结构剖析 熟悉每位文件的基本功能,方便做更改,知道每位文件的大约作用以后,可以便捷的对文件进行更改
  文件结构摘要:
  common.inc.php 数据库配置文件
  config.cache.bak.php 后台系统配置备份
  config.cache.inc.php 后台系统配置文件缓存
  downmix.data.php 采集混淆缓存文件
  mysql_error_track.inc MYSQL错误志
  safequestions.php 安全问题
  sitemap.html 站点地图
  sys_pay.cache.php 支付网段配置
  template.rand.php 随机模板设置 ……
  · DedeCMS数据库结构剖析,至少要熟悉每位表的作用 熟悉每位表的作用,了解几个核心表的设计及数组的含意,方便领到新的需求以后,能快速的判定是否加数组,还是新建表来处理。同时也能理解DedeCMS的数据库设计思想,把有用的设计思路加到自己的系统中。
  · DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登录,注册,文档管理,权限控制,分类管理,模型设置等一些常用流程控制。对几个核心文件进行解剖,了解其编程方法及安全机制
  · DedeCMS插件的开发(****式插件和内嵌式插件) 熟悉两种插件的编撰,插件的导出导入php网站分类目录程序 网址导航程序 织梦二次开发,插件搭配模型的使用
  作为国外第一个开源的内容管理系统,DedeCMS在创建以来都在摸索中国互联网内容管理系统的公路,并且推动诸多开源CMS前进的公路,程序由当初个人作品,现已成立团队,在提高用户服务、提高产品质量的同时,对中国网站内容管理系统进行研究,成为目前市场上最受欢迎的内容管理系统。

php实现的采集小程序,做采集的必看

采集交流优采云 发表了文章 • 0 个评论 • 373 次浏览 • 2020-07-25 08:02 • 来自相关话题

  
  以下是我收集的php实现的采集小程序,自己测试可用php 文章采集,做采集很实用哦!
  <?php
//调用方法 :localhost/2.php?id=1 (自动采集1-8的列表)
header(&quot;Content-type:text/html;charset=utf-8&quot;);
$con =mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;huweishen.com&quot;) or die(&quot;数据库链接错误&quot;);
mysql_select_db(&quot;liuyan&quot;, $con);
mysql_query(&quot;set names &#39;utf8&#39;&quot;);
function preg_substr($start, $end, $str) // 正则截取函数
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
function str_substr($start, $end, $str) // 字符串截取函数
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
// ---------------- 使用实例 ----------------

if($_GET[&#39;id&#39;]<=8&amp;&amp;$_GET[&#39;id&#39;]){
$id=$_GET[&#39;id&#39;];
$url = &quot;http://www.037c.com/New/list_5_$id.html&quot;; //目标站
$fp = fopen($url, &quot;r&quot;) or die(&quot;超时&quot;);
$fcontents = file_get_contents($url);
$pattern=&quot;/<\/span><a href=\&quot;(.*)\&quot; title=\&quot;(.*)\&quot; target=\&quot;_blank\&quot;>/iUs&quot;;//正则
preg_match_all($pattern, $fcontents, $arr);
//print_r($arr);
foreach($arr[1] as $k=>$url)
{
$title = iconv(&#39;GB2312&#39;, &#39;UTF-8&#39;, addslashes($arr[2][$k]));
// echo $title;
// echo $url;
$str = iconv(&quot;GB2312&quot;,&quot;UTF-8&quot;, file_get_contents($url));
$author = preg_substr(&quot;/作者:/&quot;, &quot;/<\//&quot;, $str); // 通过正则提取作者
$content = str_substr(&#39;<p class=&quot;wltg&quot;>&#39;, &#39;</p>&#39;, $str); //通过字符串提取标题
$sql = &quot;INSERT INTO `caiji` (`title`, `url` , `content`, `author` ) VALUES (&#39;$title&#39;, &#39;$url&#39; , &#39;$content&#39; , &#39;$author&#39;)&quot;;
// echo $sql.&quot;<br/>&quot;;
mysql_query($sql);
}
$id++;
echo &quot;正在采集URL数据列表$id...请稍后...&quot;;
echo &quot;<script>window.location=&#39;2.php?id=$id&#39;</script>&quot;;
}
else{
echo &quot;采集数据结束。&quot;;
}
?>
  
  其中 title 设置惟一php 文章采集,可以避免重复采集,很好的的一个php采集小程序,作者:风云无忌 查看全部
  
  以下是我收集的php实现的采集小程序,自己测试可用php 文章采集,做采集很实用哦!
  <?php
//调用方法 :localhost/2.php?id=1 (自动采集1-8的列表)
header(&quot;Content-type:text/html;charset=utf-8&quot;);
$con =mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;huweishen.com&quot;) or die(&quot;数据库链接错误&quot;);
mysql_select_db(&quot;liuyan&quot;, $con);
mysql_query(&quot;set names &#39;utf8&#39;&quot;);
function preg_substr($start, $end, $str) // 正则截取函数
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
function str_substr($start, $end, $str) // 字符串截取函数
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
// ---------------- 使用实例 ----------------

if($_GET[&#39;id&#39;]<=8&amp;&amp;$_GET[&#39;id&#39;]){
$id=$_GET[&#39;id&#39;];
$url = &quot;http://www.037c.com/New/list_5_$id.html&quot;; //目标站
$fp = fopen($url, &quot;r&quot;) or die(&quot;超时&quot;);
$fcontents = file_get_contents($url);
$pattern=&quot;/<\/span><a href=\&quot;(.*)\&quot; title=\&quot;(.*)\&quot; target=\&quot;_blank\&quot;>/iUs&quot;;//正则
preg_match_all($pattern, $fcontents, $arr);
//print_r($arr);
foreach($arr[1] as $k=>$url)
{
$title = iconv(&#39;GB2312&#39;, &#39;UTF-8&#39;, addslashes($arr[2][$k]));
// echo $title;
// echo $url;
$str = iconv(&quot;GB2312&quot;,&quot;UTF-8&quot;, file_get_contents($url));
$author = preg_substr(&quot;/作者:/&quot;, &quot;/<\//&quot;, $str); // 通过正则提取作者
$content = str_substr(&#39;<p class=&quot;wltg&quot;>&#39;, &#39;</p>&#39;, $str); //通过字符串提取标题
$sql = &quot;INSERT INTO `caiji` (`title`, `url` , `content`, `author` ) VALUES (&#39;$title&#39;, &#39;$url&#39; , &#39;$content&#39; , &#39;$author&#39;)&quot;;
// echo $sql.&quot;<br/>&quot;;
mysql_query($sql);
}
$id++;
echo &quot;正在采集URL数据列表$id...请稍后...&quot;;
echo &quot;<script>window.location=&#39;2.php?id=$id&#39;</script>&quot;;
}
else{
echo &quot;采集数据结束。&quot;;
}
?>
  
  其中 title 设置惟一php 文章采集,可以避免重复采集,很好的的一个php采集小程序,作者:风云无忌

PHP写微信公众号文章页采集方法

采集交流优采云 发表了文章 • 0 个评论 • 348 次浏览 • 2020-07-24 08:04 • 来自相关话题

  ;我的正则匹配水平有限,只能写成这样的了。希望有高手能赐教更好的正则匹配方式。
  另外注意:这个匹配规则会可能在一段时间以后有变化。这篇文章会尽量保持更新。如果你按照我的文章制作了采集系统以后,当某三天失效了,别忘了回去再瞧瞧文章是否有更新。
  2)内容处理:
  通过前面的方式我们获得了文章内容的html,但是你将文章内容显示下来以后才会发觉,图片和视频不能正常显示。因为这个html还须要一些加工:
  首先是图片,微信文章中的标签中的src属性全部都用了data-src属性替代。只有在显示的时侯就会被替换过来。所以我们也有两个方案,将源代码直接替换过来,或者用js在显示时侯再替换。下面我先介绍直接替换html的方式:
  1
  2
  3
  4
  //$content变量的值是上面获取到的文章内容html
  $content = str_replace("data-src","src",$content);
  然后是视频,视频的显示不正常,经过常年测试后发觉只要替换一个页面地址才能解决,过程就不说了,直接说结果:
  1
  2
  3
  4
  //$content变量的值是上面获取到的文章内容html
  $content = str_replace("preview.html","player.html",$content);
  通过这两个替换过后,文章内容html中的图片和视频就都正常了。
  3) 公众号相关信息:
  通过本专栏之前的文章,介绍了我们使用陌陌客户端,任意打开一个公众号的历史消息页以后。系统从数据库中辨识biz的值,发现数据库中没有记录,就会插入一条新的纪录。之后的采集队列都会定期按照这个biz来获取这个公众号的历史消息列表。
  但是我们只获得了这个公众号的biz,公众号的名称,头像这两个重要信息还是没有获取到。主要诱因是历史消息页面中没有这两个信息。但是我们可以从文章页面中获取到。
  在陌陌文章页面html的顶部,有一些js的变量形参的代码,通过正则匹配然后我们就可以获得这两个公众号的信息:
  1
  2
  3
  4
  5
  6
  7
  //$html变量的值是上面获取到的文章全部html
  preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
  $nickname = $m[1][0];//公众号爱称
  preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
  $head_img = $m[1][0];//公众号头像
  通过这两个正则匹配,我们才能获取到公众号的头像和爱称,然后按照文章地址中的biz,可以保存到对应的微信号数据表中。
  3、文章的保存和处理
  前面的代码已然将文章内容获取到变量中了。如何保存虽然每个人似乎都有自己的看法。我这儿介绍一下我的保存内容的方式:
  将文章内容的html以数据库id为文件名保存成html文件,以biz数组为目录。
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  $dir = "./".$biz."/";
  $filename = $dir.$id.".html";
  if(!is_dir($dir)) {
  mkdir($cache_dir);
  chmod($cache_dir,0777);
  }
  $file = fopen($filename, "w");
  fwrite($file, $content);
  fclose($file);
  以上代码是一个标准的php构建文件夹保存文件的代码,大家可以依照自己的实际情况安排保存方式。
  在这以后我们就可以在自己的服务器上得到一个html文件,内容就是公众号的文章内容。我们可以从浏览器中打开看一下。这时你或许会发觉图片防盗链了!无法正常显示!包括数据库中保存的文章封面图,公众号的头像都是防盗链的。
  别急,这个问题挺好解决,只须要将图片也保存到自己的服务器,无非是将来会占用自己的服务器空间和带宽。
  图片防盗链的原理是当图片在网页中显示的时侯php 采集微信文章图片,图片服务器会测量到引用这张图片的服务器域名,当发觉服务器域名不包含或的时侯才会被替换成防盗链图片。
  但是假若测量不到引用页面的域名才会正常显示,所以我们通过php的函数file_get_content()就可以将图片的二进制代码获取过来,然后按照自己的看法起个文件名保存到自己的服务器上。在这里再介绍一个保存图片的方式,我目前使用了腾讯云的“万象优图”,通过它们提供的api将图片保存到云空间,这样的用处是读取图片时直接在图片的链接地址加上希望得到的图片规格大小参数,就可以直接得到一张缩略图。比存在自己的服务器便捷得多。阿里云也应当有同样的产品php 采集微信文章图片,好像名叫对象储存。
  另外,我采集公众号内容的目的是制做成一个新闻app,在app上将html代码显示下来以后,因为app同样没有域名,防盗链服务器也同样不会觉得图片被盗链了。这样就可以直接显示图片下来。 查看全部
  ;我的正则匹配水平有限,只能写成这样的了。希望有高手能赐教更好的正则匹配方式。
  另外注意:这个匹配规则会可能在一段时间以后有变化。这篇文章会尽量保持更新。如果你按照我的文章制作了采集系统以后,当某三天失效了,别忘了回去再瞧瞧文章是否有更新。
  2)内容处理:
  通过前面的方式我们获得了文章内容的html,但是你将文章内容显示下来以后才会发觉,图片和视频不能正常显示。因为这个html还须要一些加工:
  首先是图片,微信文章中的标签中的src属性全部都用了data-src属性替代。只有在显示的时侯就会被替换过来。所以我们也有两个方案,将源代码直接替换过来,或者用js在显示时侯再替换。下面我先介绍直接替换html的方式:
  1
  2
  3
  4
  //$content变量的值是上面获取到的文章内容html
  $content = str_replace("data-src","src",$content);
  然后是视频,视频的显示不正常,经过常年测试后发觉只要替换一个页面地址才能解决,过程就不说了,直接说结果:
  1
  2
  3
  4
  //$content变量的值是上面获取到的文章内容html
  $content = str_replace("preview.html","player.html",$content);
  通过这两个替换过后,文章内容html中的图片和视频就都正常了。
  3) 公众号相关信息:
  通过本专栏之前的文章,介绍了我们使用陌陌客户端,任意打开一个公众号的历史消息页以后。系统从数据库中辨识biz的值,发现数据库中没有记录,就会插入一条新的纪录。之后的采集队列都会定期按照这个biz来获取这个公众号的历史消息列表。
  但是我们只获得了这个公众号的biz,公众号的名称,头像这两个重要信息还是没有获取到。主要诱因是历史消息页面中没有这两个信息。但是我们可以从文章页面中获取到。
  在陌陌文章页面html的顶部,有一些js的变量形参的代码,通过正则匹配然后我们就可以获得这两个公众号的信息:
  1
  2
  3
  4
  5
  6
  7
  //$html变量的值是上面获取到的文章全部html
  preg_match_all('/var nickname = \"(.*?)\";/si',$html,$m);
  $nickname = $m[1][0];//公众号爱称
  preg_match_all('/var round_head_img = \"(.*?)\";/si',$html,$m);
  $head_img = $m[1][0];//公众号头像
  通过这两个正则匹配,我们才能获取到公众号的头像和爱称,然后按照文章地址中的biz,可以保存到对应的微信号数据表中。
  3、文章的保存和处理
  前面的代码已然将文章内容获取到变量中了。如何保存虽然每个人似乎都有自己的看法。我这儿介绍一下我的保存内容的方式:
  将文章内容的html以数据库id为文件名保存成html文件,以biz数组为目录。
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  $dir = "./".$biz."/";
  $filename = $dir.$id.".html";
  if(!is_dir($dir)) {
  mkdir($cache_dir);
  chmod($cache_dir,0777);
  }
  $file = fopen($filename, "w");
  fwrite($file, $content);
  fclose($file);
  以上代码是一个标准的php构建文件夹保存文件的代码,大家可以依照自己的实际情况安排保存方式。
  在这以后我们就可以在自己的服务器上得到一个html文件,内容就是公众号的文章内容。我们可以从浏览器中打开看一下。这时你或许会发觉图片防盗链了!无法正常显示!包括数据库中保存的文章封面图,公众号的头像都是防盗链的。
  别急,这个问题挺好解决,只须要将图片也保存到自己的服务器,无非是将来会占用自己的服务器空间和带宽。
  图片防盗链的原理是当图片在网页中显示的时侯php 采集微信文章图片,图片服务器会测量到引用这张图片的服务器域名,当发觉服务器域名不包含或的时侯才会被替换成防盗链图片。
  但是假若测量不到引用页面的域名才会正常显示,所以我们通过php的函数file_get_content()就可以将图片的二进制代码获取过来,然后按照自己的看法起个文件名保存到自己的服务器上。在这里再介绍一个保存图片的方式,我目前使用了腾讯云的“万象优图”,通过它们提供的api将图片保存到云空间,这样的用处是读取图片时直接在图片的链接地址加上希望得到的图片规格大小参数,就可以直接得到一张缩略图。比存在自己的服务器便捷得多。阿里云也应当有同样的产品php 采集微信文章图片,好像名叫对象储存。
  另外,我采集公众号内容的目的是制做成一个新闻app,在app上将html代码显示下来以后,因为app同样没有域名,防盗链服务器也同样不会觉得图片被盗链了。这样就可以直接显示图片下来。

wordpress安装过程中遇见英文乱码的处理方式

采集交流优采云 发表了文章 • 0 个评论 • 430 次浏览 • 2020-06-17 08:01 • 来自相关话题

  WordPress建站 新手入门,wordpress建站_PHP教程
  WordPress建站 新手入门,wordpress建站WordPress建站 新手入门教程系列 1. WordPress入门 之 什么是WordPress? 2. WordPress入门 之 搭建WordPress站点须要哪些条件? 3. WordPress入门 之 如何安装WordPre
  总结关于WordPress注意点
  ...务器端的路由功能应当都比较熟悉,国外流行的博客系统wordpress也是十分精典的路由实现案例。那么,究竟哪些的路由呢,下面通过wordpress来简单讲一下。理解wordpress重画规则的的都是晓得,实际上任何一条url的访问都是基于wor...
  最流行的php建站程序是哪些?
  要说最流行的php建站程序是哪些?那肯定非wordpress莫属了。WordPress拥有全球逾三分之一的网站,从大型个人博客到索尼、时代公司、纽约邮报和NBC等大公司的复杂网站。WordPress只是网站构建器和内容管理系统之一,...
  wordpress须要会php吗
  WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当成一个内容管理系统(CMS)来使用。WordPress是一款个人博客系统,并逐渐演变成一款内容...
   开源,弃 PHP 改用 JavaScript_PHP教程
   开源,弃 PHP 改用 在明天迈出了自创立以来的最跨越性的一步。Automattic 公司从头重画了 ,将这项计划命名为 Calypso译者注:卡吕普索安装wordpress主题后 显示乱码 怎么解决,希腊神话的海之女神),从内...
  PHP版本升级到7.x后wordpress的一些更改及wordpress方法,_PHP教程
  PHP版本升级到7.x后wordpress的一些更改及wordpress方法,不知算不算手贱,把VPS服务器上的php升级到7.0, 虽然7.x与之前的兼容性是很高的,但移除了一大堆过时用法,而个别老应用一直在使用。对个人wordpress站点里出现...
  在Linux系统下一键重新安装WordPress的脚本示例_PHP
  ...或者误操作,数据库没了,所以,我为了市时间,写了个wordpress一键重新安装的脚本。我这只是写个大约的。大家可以依照自己的须要更改脚本。使用条件:我这个脚本主要用在网站迁移的情况下安装wordpress主题后 显示乱码 怎么解决,完全重新安...
  在Linux系统下一键重新安装WordPress的脚本示例_php方法
  ...或者误操作,数据库没了,所以,我为了市时间,写了个wordpress一键重新安装的脚本。我这只是写个大约的。大家可以依照自己的须要更改脚本。使用条件:我这个脚本主要用在网站迁移的情况下,完全重新安...
  wordpress主题制做结构文件,wordpress主题结构_PHP教程
  wordpress主题制做结构文件,wordpress主题结构 下面是WordPress主题文件层次结构,它会告诉你:当WordPress显示特定的页面类型时,会使用那个模板文件呢?只有了解了以下主题层次结构,你就能晓得你的WordPress主... 查看全部
  WordPress建站 新手入门,wordpress建站_PHP教程
  WordPress建站 新手入门,wordpress建站WordPress建站 新手入门教程系列 1. WordPress入门 之 什么是WordPress? 2. WordPress入门 之 搭建WordPress站点须要哪些条件? 3. WordPress入门 之 如何安装WordPre
  总结关于WordPress注意点
  ...务器端的路由功能应当都比较熟悉,国外流行的博客系统wordpress也是十分精典的路由实现案例。那么,究竟哪些的路由呢,下面通过wordpress来简单讲一下。理解wordpress重画规则的的都是晓得,实际上任何一条url的访问都是基于wor...
  最流行的php建站程序是哪些?
  要说最流行的php建站程序是哪些?那肯定非wordpress莫属了。WordPress拥有全球逾三分之一的网站,从大型个人博客到索尼、时代公司、纽约邮报和NBC等大公司的复杂网站。WordPress只是网站构建器和内容管理系统之一,...
  wordpress须要会php吗
  WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当成一个内容管理系统(CMS)来使用。WordPress是一款个人博客系统,并逐渐演变成一款内容...
   开源,弃 PHP 改用 JavaScript_PHP教程
   开源,弃 PHP 改用 在明天迈出了自创立以来的最跨越性的一步。Automattic 公司从头重画了 ,将这项计划命名为 Calypso译者注:卡吕普索安装wordpress主题后 显示乱码 怎么解决,希腊神话的海之女神),从内...
  PHP版本升级到7.x后wordpress的一些更改及wordpress方法,_PHP教程
  PHP版本升级到7.x后wordpress的一些更改及wordpress方法,不知算不算手贱,把VPS服务器上的php升级到7.0, 虽然7.x与之前的兼容性是很高的,但移除了一大堆过时用法,而个别老应用一直在使用。对个人wordpress站点里出现...
  在Linux系统下一键重新安装WordPress的脚本示例_PHP
  ...或者误操作,数据库没了,所以,我为了市时间,写了个wordpress一键重新安装的脚本。我这只是写个大约的。大家可以依照自己的须要更改脚本。使用条件:我这个脚本主要用在网站迁移的情况下安装wordpress主题后 显示乱码 怎么解决,完全重新安...
  在Linux系统下一键重新安装WordPress的脚本示例_php方法
  ...或者误操作,数据库没了,所以,我为了市时间,写了个wordpress一键重新安装的脚本。我这只是写个大约的。大家可以依照自己的须要更改脚本。使用条件:我这个脚本主要用在网站迁移的情况下,完全重新安...
  wordpress主题制做结构文件,wordpress主题结构_PHP教程
  wordpress主题制做结构文件,wordpress主题结构 下面是WordPress主题文件层次结构,它会告诉你:当WordPress显示特定的页面类型时,会使用那个模板文件呢?只有了解了以下主题层次结构,你就能晓得你的WordPress主...

PHP爬虫编撰

采集交流优采云 发表了文章 • 0 个评论 • 300 次浏览 • 2020-06-04 08:04 • 来自相关话题

  一、PHP 是哪些东西?
  PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特性,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的句型混和了C、Java、Perl以及PHP自创的句型。它可以比CGI或则Perl更快速地执行动态网页。用PHP作出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行php网络爬虫软件,使代码运行更快。——百度百科的描述。
  二、爬虫有哪些用?
  爬虫有哪些用?先说一下爬虫是哪些东西,我觉得爬虫就是一个网路信息搜集程序,也许我自己的理解有错误,也请你们给我见谅。既然爬虫是一个网路信息搜集程序,那就是拿来搜集信息,并且搜集的信息是在网路里面的。如果还是不太清楚爬虫有什么用php网络爬虫软件,我就举几个爬虫应用的事例:搜索引擎就须要爬虫搜集网路信息供人们去搜索;大数据的数据,数据从那里来?就是可以通过爬虫在网路中爬取(收集)而来。
  三、通常看到爬虫会想到 Python,但为何我用 PHP,而不用 Python 呢?
  Python 我说实话,我不会 Python。( Python 我真不会,想知道可能你要去百度一下,因为 Python 我真不会。)PHP 写东西我仍然都是觉得,你只要想出算法程序就早已下来了,不用考虑太多数据类型的问题。PHP 的句型和其他编程语言差不多,就算你开始不会 PHP,你也可以马上上手。PHP的句型和其他编程语言差不多,就算你开始不会 PHP,你也可以马上上手。的看法有错。)本人虽然也是初学 PHP,想通过写一些东西提升自己的水平。(下面可能有些代码会使你认为不够规范,欢迎见谅,谢谢。)
  四、PHP爬虫第一步
  PHP爬虫第一步,第一步......第一步其实就是搭建 PHP 的运行环境,没有环境PHP又如何能运行呢?就像虾不能离开水一样。(我见识还不够,可能我举的虾的事例不够好,请见谅。)在Windows的系统下我使用 WAMP,而在Linux的系统下我使用 LNMP 或者 LAMP。
  WAMP:Windows + Apache + Mysql + PHP
  LAMP:Linux + Apache + Mysql + PHP
  LNMP:Linux + Nginx + Mysql + PHP
  Apache 和 Nginx 是 Web 服务器软件。
  Apache或Nginx、Mysql 以及 PHP 这些都是 PHP Web 的基本配置环境。网上有 PHP Web 环境的安装包,这些安装包使用很方便,不需要每给东西安装以及配置。但若果你对这种集成安装包害怕安全问题,你可以到这种程序的官网下载之后在网上找配置教程就可以了。(说真的,我真心的不会单独去弄,我认为很麻烦。)
  五、 PHP爬虫第二步
  (感觉自己屁话很多,应该马上来一段代码!!!)
  &lt;?php
// 爬虫核心功能:获取网页源码
$html = file_get_contents(&#34;https://www.baidu.com/index.html&#34;);
// 通过 php 的 file_get_contents 函数获取百度首页源码,并传给 $html 变量
echo $html;
// 输出 $html
?&gt;
  爬虫网路核心功能早已写下来了,为什么说就如此几行代码就把爬虫核心功能写下来了呢?我猜有人早已明白了吧,其实是因为爬虫是数据获取的程序,就里面几行代码虽然早已才能获取数据了,所以爬虫的核心功能早已写下来了。可能有人会说“你这个也很菜了吧!有哪些用?”,虽然我是太菜,但请别说出来,让我好好装个X。(又说了两行屁话,不好意思。)
  其实爬虫是拿来干嘛,主要看你想使它来干嘛。就像我前些日子为了好玩写了一个搜索引擎网站出来,当然网站很菜,结果排序没有规律,很多都查不到。我的搜索引擎的爬虫就是要写一个适合于搜索引擎的爬虫。所以为了便捷我也就用写搜索引擎的爬虫为目标讲解。当然了,我搜索引擎的爬虫还是不够建立,不健全的地方都是要大家自己去创造,去建立。
  六、 搜索引擎爬虫的限制
  搜索引擎的爬虫有时候不是不能那种网站的页面获取页面源码,而是有robot.txt文件,有该文件的网站,就代表站主不希望爬虫去爬取页面源码。(不过若果你就是想要获取的话,就算有也一样会去爬吧!)
  我搜索引擎的爬虫虽然还有好多不足而造成的限制,例如可能由于未能运行 JS 脚本所以未能获取页面源码。又或则网站有反爬虫的机制引起不能获取到页面源码。有反爬虫机制的网站就如:知乎,知乎就是有反爬虫的机制的网站。
  七、以弄搜索引擎爬虫为例,准备写该爬虫须要的东西
  PHP 编写基础正则表达式(你也可以使用Xpath,对不起,我不会使用)数据库的使用(本文使用 MySql 数据库)运行环境(只要有能运行 PHP 网站的环境和数据库就OK)
  八、搜索引擎获取页面源码并获取页面的标题信息
  &lt;?PHP
// 通过 file_get_contents 函数获取百度页面源码
$html = file_get_contents(&#34;https://www.baidu.com/index.html&#34;);
// 通过 preg_replace 函数使页面源码由多行变单行
$htmlOneLine = preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
// 通过 preg_match 函数提取获取页面的标题信息
preg_match(&#34;/&lt;title&gt;(.*)&lt;\/title&gt;/iU&#34;,$htmlOne,$titleArr);
// 由于 preg_match 函数的结果是数组的形式
$title = $titleArr[1];
// 通过 echo 函数输出标题信息
echo $title;
?&gt;
  报错误示例:
  Warning: file_get_contents("127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
  https是SSL加密合同,如果出现获取页面晨报里面的错误,代表你的 PHP 可能少了OpenSSL 的模块,你可以到网上查找解决办法。
  九、搜索引擎爬虫的特征
  虽然我没见过象“百度”,“Google”它们的爬虫,可是我自己通过推测,以及在实际爬去过程当中遇见的一些问题,自己总结的几个特性。(可能有不对的地方,或者缺乏的地方,欢迎见谅,谢谢。)
  通用性
  通用性是因为我觉得搜索引擎的爬虫一开始并不是针对哪一个网站制定的,所以要求能爬取到的网站尽可能的多,这是第一点。而第二点,就是获取网页的信息就是这些,一开始不会由于个别某些特殊小网站而舍弃个别信息不提取,举个反例:一个小网站的一个网页meta标签里没有描述信息(description)或者关键词信息(keyword),就直接舍弃了描述信息或则关键词信息的提取,当然假如真的某一个页面没有这种信息我会提取页面里的文字内容作为填充,反正就是尽可能达到爬取的网页信息每位网页的信息项都要一样。这是我觉得的搜索引擎爬虫的通用性,当然我的看法可能是错误的。(我说得可能不是很好,我仍然在学习。)
  不确定性
  不确定性就是我的爬虫获取哪些网页我是控制不够全面的,只能控制我能想到的情况,这也是由于我写的算法就是这样的缘由,我的算法就是爬取获取到的页面里的所有链接,再去爬去获取到的那些链接,其实是因为搜索引擎并不是搜某一些东西,而是尽可能的多,因为只有更多的信息,才能找到一个最贴切用户想要的答案。所以我就认为搜索引擎的爬虫就要有不确定性。(我自己再看了一遍,也有点认为自己说得有点使自己看不懂,请见谅,欢迎见谅,提问,谢谢了!)
  下面的视频是我的搜索网站的使用视频,而搜到的信息就是通过自己写的 PHP 爬虫获取到的。(这个网站我早已不再继续维护了,所以有缺乏之处,请见谅。)
  
  十、到如今可能出现的问题
  获取的源码出现乱码
  &lt;?PHP
// 乱码解决办法,把其他编码格式通过 mb_convert_encoding 函数统一转为 UTF-8 格式
$html = mb_convert_encoding($html,&#39;UTF-8&#39;,&#39;UTF-8,GBK,GB2312,BIG5&#39;);
// 还有一种因为gzip所以出现乱码的,我会在以后讲
?&gt;
  2. 获取不到标题信息
  &lt;?PHP
// 获取不到标题信息解决办法,首先判断是否能获取到页面源码
// 如果能获取到但还是不能获取到标题信息
// 我猜测的问题是:因为我教的是使用正则表达式获取的,源码没有变成一行,获取起来就会出现问题
$htmlOneLine=preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
?&gt;
  3.获取不到页面源码
  &lt;?PHP
// 像新浪微博你可能获取到的是“Sina Visitor System”
// 解决办法添加header信息
$opts = array(
&#39;http&#39;=&gt;array(
&#39;method&#39;=&gt;&#34;GET&#34;,
&#34;timeout&#34;=&gt;20,
&#39;header&#39;=&gt;&#34;User-Agent: Spider \r\n&#34;,
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 这样就能获取到新浪微博的页面了
?&gt;
  十一、获取一个网页时的处理思路
  我们先不去想好多网页,因为好多网页也就是一个循环。
  获取页面源码通过源码提取页面的哪些信息提取的信息要如何处理处理后放不放进数据库
  十二、按照十一的思路的代码
  &lt;?php
// 一、获取源码
// 假设我们要获取淘宝首页
$html = file_get_content(&#34;https://www.taobao.com&#34;);
// 二、提取标题和文本
// 三、提取信息处理
// 处理页面源码,多行变单行
$htmlOneLine = preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
// 获取标题信息
preg_match(&#34;/&lt;title&gt;(.*)&lt;\/title&gt;/iU&#34;,$htmlOneLine,$titleArr);
// 保留标题信息
$titleOK = $titleArr[1];
// 获取页面中的文本信息
// 处理前面不需要的head标签
$htmlText = preg_replace(&#34;/&lt;html&gt;(.*)&lt;\/head&gt;/&#34;,&#34;&#34;,$htmlOneLine);
// 处理style和script标签及内容
$htmlText = preg_replace(&#34;/&lt;style(.*)&gt;(.*)&lt;/style&gt;|&lt;script(.*)&gt;(.*)&lt;/script&gt;/iU&#34;,&#34;&#34;,$htmlText);
// 处理多余标签
$htmlText = preg_replace(&#34;/&lt;(\/)?(.+)&gt;/&#34;,&#34;&#34;,$htmlText);
// 四、保存到数据库
// 略
?&gt;
  十三、PHP 保存页面的图片思路
  获取页面源码获取页面的图片链接使用函数保存图片
  十四、保存图片示例代码
  &lt;?php
// 使用file_get_contents()函数获取图片
$img = file_get_contents(&#34;http://127.0.0.1/photo.jpg&#34;);
// 使用file_put_contents()函数保存图片
file_put_contents(&#34;photo.jpg&#34;,$img);
?&gt;
  十五、gzip解压
  本来我以为自己写的爬虫早已写得差不多了,就是不仅反爬虫的网站难以爬取外,应该是都可以爬了。但有三天我去尝试爬去bilibili的时侯出现问题了,我发觉如何我数据库上面的都是乱码,而且标题哪些的都没有,好奇怪!后来我才晓得原先是因为GZIP的压缩,原来我直接使用file_get_content函数获取的页面是未经过解压的页面,所有都是乱码!好了,然后我晓得问题出现在哪里了,接下来就是想解决办法了。(其实那时候的我是完全不知道如何解决解压gzip的,都靠搜索引擎,哈哈哈哈哈)。
  我得到了两个解决办法:
  在 request header 那里告诉对方服务器,我这爬虫(不。。。应该是我这浏览器)不支持gzip的解压,就麻烦你不要压缩,直接把数据发给我吧!
   // 这是request header(请求头)
$opts = array(
&#39;http&#39;=&gt;array(
&#39;method&#39;=&gt;&#34;GET&#34;,
&#34;timeout&#34;=&gt;20,
&#39;header&#39;=&gt;&#34;User-Agent: Spider \r\n&#34;.
&#34;accept-encoding:&#34;
)
);
// 我把accept-encodeing(能接收编码)设为空,代表不接受gzip
  2. 如果告诉了对方服务器本浏览器(爬虫)不支持解压gzip,可他还是继续发gzip的数据给你,那就没有办法了,只好默默的在搜索引擎找php解压gzip的解压函数——gzdecode()。
  // 废话:好久没更新了,因为近来又在重复造轮子,不过好开心-- 2019.01.14
  十六、子链接的获取
  网页爬虫就好比手动的网页源码另存为操作,可是假如真的是一个一个网址自动输入给爬虫去爬取的话,那还倒不如人手另存为呢!所以在这里就得解析到这些子链接,一个网页似乎会有好多的a标签,而这种a标签的href属性值都会是一个子链接。(这句如何觉得有一点屁话呢?应该你们都晓得吧!)通过好多种工具的解析得到了原始的子链接(我没用html的工具,就是用了正则表达式及工具)为什么叫原始数据,因为这些子链接有很多不是URL链接,又或则是一些不完整的链接,又或则你是要爬一个网站,不要爬虫跑出去的时侯,还得消除一些并非那种网站的链接,防止爬虫跑出去。下面我列出一些原始子链接。(其实就是我喷到的坑。。。)
  http://wxample.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
  你可以看得到这儿有很多种链接,有完整的绝对路径的链接,也有不完整的相对路径链接,有的还跑来了javascript,如果是相对路径或javascript的链接,直接给爬虫去爬,肯定使爬虫一脸懵,因为不完整或根本就不是一个链接。所以就须要对子链接补全或则扔掉。
  十七、子链接的处理
  上面屁话了一大堆后,接下来还是继续屁话。好了,处理虽然就是去重、丢弃以及补全。
  对于相同的子链接遗弃不保存对于相对路径链接补全对于不是链接的链接遗弃(不是链接的链接是哪些东西?自己都认为的奇怪。。。。)
  对于第一种我就不多说了,相信你们都晓得该如何做。
  对付第二种的方式我就写一个才能运行相对路径的方式下来就OK了,通过父链接来进行相对路径转绝对路径。(有空补代码给你们。。。不好意思了)
  对于第三种也正则匹配一下就完了。 查看全部

  一、PHP 是哪些东西?
  PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特性,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的句型混和了C、Java、Perl以及PHP自创的句型。它可以比CGI或则Perl更快速地执行动态网页。用PHP作出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行php网络爬虫软件,使代码运行更快。——百度百科的描述。
  二、爬虫有哪些用?
  爬虫有哪些用?先说一下爬虫是哪些东西,我觉得爬虫就是一个网路信息搜集程序,也许我自己的理解有错误,也请你们给我见谅。既然爬虫是一个网路信息搜集程序,那就是拿来搜集信息,并且搜集的信息是在网路里面的。如果还是不太清楚爬虫有什么用php网络爬虫软件,我就举几个爬虫应用的事例:搜索引擎就须要爬虫搜集网路信息供人们去搜索;大数据的数据,数据从那里来?就是可以通过爬虫在网路中爬取(收集)而来。
  三、通常看到爬虫会想到 Python,但为何我用 PHP,而不用 Python 呢?
  Python 我说实话,我不会 Python。( Python 我真不会,想知道可能你要去百度一下,因为 Python 我真不会。)PHP 写东西我仍然都是觉得,你只要想出算法程序就早已下来了,不用考虑太多数据类型的问题。PHP 的句型和其他编程语言差不多,就算你开始不会 PHP,你也可以马上上手。PHP的句型和其他编程语言差不多,就算你开始不会 PHP,你也可以马上上手。的看法有错。)本人虽然也是初学 PHP,想通过写一些东西提升自己的水平。(下面可能有些代码会使你认为不够规范,欢迎见谅,谢谢。)
  四、PHP爬虫第一步
  PHP爬虫第一步,第一步......第一步其实就是搭建 PHP 的运行环境,没有环境PHP又如何能运行呢?就像虾不能离开水一样。(我见识还不够,可能我举的虾的事例不够好,请见谅。)在Windows的系统下我使用 WAMP,而在Linux的系统下我使用 LNMP 或者 LAMP。
  WAMP:Windows + Apache + Mysql + PHP
  LAMP:Linux + Apache + Mysql + PHP
  LNMP:Linux + Nginx + Mysql + PHP
  Apache 和 Nginx 是 Web 服务器软件。
  Apache或Nginx、Mysql 以及 PHP 这些都是 PHP Web 的基本配置环境。网上有 PHP Web 环境的安装包,这些安装包使用很方便,不需要每给东西安装以及配置。但若果你对这种集成安装包害怕安全问题,你可以到这种程序的官网下载之后在网上找配置教程就可以了。(说真的,我真心的不会单独去弄,我认为很麻烦。)
  五、 PHP爬虫第二步
  (感觉自己屁话很多,应该马上来一段代码!!!)
  &lt;?php
// 爬虫核心功能:获取网页源码
$html = file_get_contents(&#34;https://www.baidu.com/index.html&#34;);
// 通过 php 的 file_get_contents 函数获取百度首页源码,并传给 $html 变量
echo $html;
// 输出 $html
?&gt;
  爬虫网路核心功能早已写下来了,为什么说就如此几行代码就把爬虫核心功能写下来了呢?我猜有人早已明白了吧,其实是因为爬虫是数据获取的程序,就里面几行代码虽然早已才能获取数据了,所以爬虫的核心功能早已写下来了。可能有人会说“你这个也很菜了吧!有哪些用?”,虽然我是太菜,但请别说出来,让我好好装个X。(又说了两行屁话,不好意思。)
  其实爬虫是拿来干嘛,主要看你想使它来干嘛。就像我前些日子为了好玩写了一个搜索引擎网站出来,当然网站很菜,结果排序没有规律,很多都查不到。我的搜索引擎的爬虫就是要写一个适合于搜索引擎的爬虫。所以为了便捷我也就用写搜索引擎的爬虫为目标讲解。当然了,我搜索引擎的爬虫还是不够建立,不健全的地方都是要大家自己去创造,去建立。
  六、 搜索引擎爬虫的限制
  搜索引擎的爬虫有时候不是不能那种网站的页面获取页面源码,而是有robot.txt文件,有该文件的网站,就代表站主不希望爬虫去爬取页面源码。(不过若果你就是想要获取的话,就算有也一样会去爬吧!)
  我搜索引擎的爬虫虽然还有好多不足而造成的限制,例如可能由于未能运行 JS 脚本所以未能获取页面源码。又或则网站有反爬虫的机制引起不能获取到页面源码。有反爬虫机制的网站就如:知乎,知乎就是有反爬虫的机制的网站。
  七、以弄搜索引擎爬虫为例,准备写该爬虫须要的东西
  PHP 编写基础正则表达式(你也可以使用Xpath,对不起,我不会使用)数据库的使用(本文使用 MySql 数据库)运行环境(只要有能运行 PHP 网站的环境和数据库就OK)
  八、搜索引擎获取页面源码并获取页面的标题信息
  &lt;?PHP
// 通过 file_get_contents 函数获取百度页面源码
$html = file_get_contents(&#34;https://www.baidu.com/index.html&#34;);
// 通过 preg_replace 函数使页面源码由多行变单行
$htmlOneLine = preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
// 通过 preg_match 函数提取获取页面的标题信息
preg_match(&#34;/&lt;title&gt;(.*)&lt;\/title&gt;/iU&#34;,$htmlOne,$titleArr);
// 由于 preg_match 函数的结果是数组的形式
$title = $titleArr[1];
// 通过 echo 函数输出标题信息
echo $title;
?&gt;
  报错误示例:
  Warning: file_get_contents("127.0.0.1/index.php") [function.file-get-contents]: failed to open stream: Invalid argument in E:\website\blog\test.php on line 25
  https是SSL加密合同,如果出现获取页面晨报里面的错误,代表你的 PHP 可能少了OpenSSL 的模块,你可以到网上查找解决办法。
  九、搜索引擎爬虫的特征
  虽然我没见过象“百度”,“Google”它们的爬虫,可是我自己通过推测,以及在实际爬去过程当中遇见的一些问题,自己总结的几个特性。(可能有不对的地方,或者缺乏的地方,欢迎见谅,谢谢。)
  通用性
  通用性是因为我觉得搜索引擎的爬虫一开始并不是针对哪一个网站制定的,所以要求能爬取到的网站尽可能的多,这是第一点。而第二点,就是获取网页的信息就是这些,一开始不会由于个别某些特殊小网站而舍弃个别信息不提取,举个反例:一个小网站的一个网页meta标签里没有描述信息(description)或者关键词信息(keyword),就直接舍弃了描述信息或则关键词信息的提取,当然假如真的某一个页面没有这种信息我会提取页面里的文字内容作为填充,反正就是尽可能达到爬取的网页信息每位网页的信息项都要一样。这是我觉得的搜索引擎爬虫的通用性,当然我的看法可能是错误的。(我说得可能不是很好,我仍然在学习。)
  不确定性
  不确定性就是我的爬虫获取哪些网页我是控制不够全面的,只能控制我能想到的情况,这也是由于我写的算法就是这样的缘由,我的算法就是爬取获取到的页面里的所有链接,再去爬去获取到的那些链接,其实是因为搜索引擎并不是搜某一些东西,而是尽可能的多,因为只有更多的信息,才能找到一个最贴切用户想要的答案。所以我就认为搜索引擎的爬虫就要有不确定性。(我自己再看了一遍,也有点认为自己说得有点使自己看不懂,请见谅,欢迎见谅,提问,谢谢了!)
  下面的视频是我的搜索网站的使用视频,而搜到的信息就是通过自己写的 PHP 爬虫获取到的。(这个网站我早已不再继续维护了,所以有缺乏之处,请见谅。)
  
  十、到如今可能出现的问题
  获取的源码出现乱码
  &lt;?PHP
// 乱码解决办法,把其他编码格式通过 mb_convert_encoding 函数统一转为 UTF-8 格式
$html = mb_convert_encoding($html,&#39;UTF-8&#39;,&#39;UTF-8,GBK,GB2312,BIG5&#39;);
// 还有一种因为gzip所以出现乱码的,我会在以后讲
?&gt;
  2. 获取不到标题信息
  &lt;?PHP
// 获取不到标题信息解决办法,首先判断是否能获取到页面源码
// 如果能获取到但还是不能获取到标题信息
// 我猜测的问题是:因为我教的是使用正则表达式获取的,源码没有变成一行,获取起来就会出现问题
$htmlOneLine=preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
?&gt;
  3.获取不到页面源码
  &lt;?PHP
// 像新浪微博你可能获取到的是“Sina Visitor System”
// 解决办法添加header信息
$opts = array(
&#39;http&#39;=&gt;array(
&#39;method&#39;=&gt;&#34;GET&#34;,
&#34;timeout&#34;=&gt;20,
&#39;header&#39;=&gt;&#34;User-Agent: Spider \r\n&#34;,
)
);
$context = stream_context_create($opts);
$html = file_get_contents($domain,0,$context,0,150000);
// 这样就能获取到新浪微博的页面了
?&gt;
  十一、获取一个网页时的处理思路
  我们先不去想好多网页,因为好多网页也就是一个循环。
  获取页面源码通过源码提取页面的哪些信息提取的信息要如何处理处理后放不放进数据库
  十二、按照十一的思路的代码
  &lt;?php
// 一、获取源码
// 假设我们要获取淘宝首页
$html = file_get_content(&#34;https://www.taobao.com&#34;);
// 二、提取标题和文本
// 三、提取信息处理
// 处理页面源码,多行变单行
$htmlOneLine = preg_replace(&#34;/\r|\n|\t/&#34;,&#34;&#34;,$html);
// 获取标题信息
preg_match(&#34;/&lt;title&gt;(.*)&lt;\/title&gt;/iU&#34;,$htmlOneLine,$titleArr);
// 保留标题信息
$titleOK = $titleArr[1];
// 获取页面中的文本信息
// 处理前面不需要的head标签
$htmlText = preg_replace(&#34;/&lt;html&gt;(.*)&lt;\/head&gt;/&#34;,&#34;&#34;,$htmlOneLine);
// 处理style和script标签及内容
$htmlText = preg_replace(&#34;/&lt;style(.*)&gt;(.*)&lt;/style&gt;|&lt;script(.*)&gt;(.*)&lt;/script&gt;/iU&#34;,&#34;&#34;,$htmlText);
// 处理多余标签
$htmlText = preg_replace(&#34;/&lt;(\/)?(.+)&gt;/&#34;,&#34;&#34;,$htmlText);
// 四、保存到数据库
// 略
?&gt;
  十三、PHP 保存页面的图片思路
  获取页面源码获取页面的图片链接使用函数保存图片
  十四、保存图片示例代码
  &lt;?php
// 使用file_get_contents()函数获取图片
$img = file_get_contents(&#34;http://127.0.0.1/photo.jpg&#34;);
// 使用file_put_contents()函数保存图片
file_put_contents(&#34;photo.jpg&#34;,$img);
?&gt;
  十五、gzip解压
  本来我以为自己写的爬虫早已写得差不多了,就是不仅反爬虫的网站难以爬取外,应该是都可以爬了。但有三天我去尝试爬去bilibili的时侯出现问题了,我发觉如何我数据库上面的都是乱码,而且标题哪些的都没有,好奇怪!后来我才晓得原先是因为GZIP的压缩,原来我直接使用file_get_content函数获取的页面是未经过解压的页面,所有都是乱码!好了,然后我晓得问题出现在哪里了,接下来就是想解决办法了。(其实那时候的我是完全不知道如何解决解压gzip的,都靠搜索引擎,哈哈哈哈哈)。
  我得到了两个解决办法:
  在 request header 那里告诉对方服务器,我这爬虫(不。。。应该是我这浏览器)不支持gzip的解压,就麻烦你不要压缩,直接把数据发给我吧!
   // 这是request header(请求头)
$opts = array(
&#39;http&#39;=&gt;array(
&#39;method&#39;=&gt;&#34;GET&#34;,
&#34;timeout&#34;=&gt;20,
&#39;header&#39;=&gt;&#34;User-Agent: Spider \r\n&#34;.
&#34;accept-encoding:&#34;
)
);
// 我把accept-encodeing(能接收编码)设为空,代表不接受gzip
  2. 如果告诉了对方服务器本浏览器(爬虫)不支持解压gzip,可他还是继续发gzip的数据给你,那就没有办法了,只好默默的在搜索引擎找php解压gzip的解压函数——gzdecode()。
  // 废话:好久没更新了,因为近来又在重复造轮子,不过好开心-- 2019.01.14
  十六、子链接的获取
  网页爬虫就好比手动的网页源码另存为操作,可是假如真的是一个一个网址自动输入给爬虫去爬取的话,那还倒不如人手另存为呢!所以在这里就得解析到这些子链接,一个网页似乎会有好多的a标签,而这种a标签的href属性值都会是一个子链接。(这句如何觉得有一点屁话呢?应该你们都晓得吧!)通过好多种工具的解析得到了原始的子链接(我没用html的工具,就是用了正则表达式及工具)为什么叫原始数据,因为这些子链接有很多不是URL链接,又或则是一些不完整的链接,又或则你是要爬一个网站,不要爬虫跑出去的时侯,还得消除一些并非那种网站的链接,防止爬虫跑出去。下面我列出一些原始子链接。(其实就是我喷到的坑。。。)
  http://wxample.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
  你可以看得到这儿有很多种链接,有完整的绝对路径的链接,也有不完整的相对路径链接,有的还跑来了javascript,如果是相对路径或javascript的链接,直接给爬虫去爬,肯定使爬虫一脸懵,因为不完整或根本就不是一个链接。所以就须要对子链接补全或则扔掉。
  十七、子链接的处理
  上面屁话了一大堆后,接下来还是继续屁话。好了,处理虽然就是去重、丢弃以及补全。
  对于相同的子链接遗弃不保存对于相对路径链接补全对于不是链接的链接遗弃(不是链接的链接是哪些东西?自己都认为的奇怪。。。。)
  对于第一种我就不多说了,相信你们都晓得该如何做。
  对付第二种的方式我就写一个才能运行相对路径的方式下来就OK了,通过父链接来进行相对路径转绝对路径。(有空补代码给你们。。。不好意思了)
  对于第三种也正则匹配一下就完了。

一个简单的开源PHP爬虫框架『Phpfetcher』

采集交流优采云 发表了文章 • 0 个评论 • 338 次浏览 • 2020-05-27 08:02 • 来自相关话题

  报dom为空
  
  fanfank 文章作者
  完整的代码贴下来我看一下,或者在微博私信我,我帮你看一下
  
  aa
  //下面两行促使这个项目被下载出来后本文件能直接运行
  $demo_include_path = dirname(__FILE__) . ‘/../’;
  set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
  require_once(‘phpfetcher.php’);
  class mycrawler extends Phpfetcher_Crawler_Default {
  public function handlePage($page) {
  var_dump($page);
  //打印处当前页面的第1个h1标题内荣(下标从0开始)
  $strFirstH1 = trim($page-&gt;sel(‘//title’, 0)-&gt;plaintext);
  if (!empty($strFirstH1)) {
  echo $page-&gt;sel(‘//title’, 0)-&gt;plaintext;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  //任务的名子随意起,这里把名子叫qqnews
  //the key is the name of a job, here names it qqnews
  ‘qqnews’ =&gt; array(
  ‘start_page’ =&gt; ‘#8217;, //起始网页
  ‘link_rules’ =&gt; array(
  /*
  * 所有在这里列举的正则规则,只要能匹配到超链接,那么那条爬虫才会爬到那条超链接
  * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
  */
  //’#news\.qq\.com/a/\d+/\d+\.htm$#’,
  ),
  //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1
  //Crawler’s max following depth, 1 stands for only crawl the start page
  ‘max_depth’ =&gt; 1,
  ) ,
  );
  $crawler-&gt;setFetchJobs($arrJobs)-&gt;run(); //这一行的疗效和下边两行的疗效一样
  其他的没变
  
  aa
  public function read() {
  $this-&gt;_strContent = curl_exec($this-&gt;_curlHandle);
  是_strContent取到了false造成的 这个是啥缘由呢Page default.php
  
  fanfank 文章作者
  我这儿返回的是403 forbidden,查了一下晓得缘由了,因为user_agent的问题csdn把爬虫给禁了。你可以这样更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,当然你可以可以改得更真实一点,例如哪些『Mozilla/5.0 AppleWebKit』之类的
  有些网站会依照UA来屏蔽恳求,可能是因为个别UA有恶意功击的特点,或者一些爬虫之类的开源爬虫框架,之前百度有一段时间屏蔽360浏览器就是通过360浏览器里一些特定的UA来做到的,当然后来360浏览器把UA给更改嗯,就须要依照其它特点屏蔽了。
  所以你这儿先改一下user_agent吧。
  
  aa
  多谢哈
  试着改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
  试了这儿的也不行 恐怕还是curl的问题
  
  fanfank 文章作者
  我这儿执行都是正常的,结果也能下来。还是通过微博私信说吧,这里说得刷屏了
  
  aa
  围脖id是?
  
  fanfank 文章作者
  另外是,你贴的代码上面,标点符号不对啊,你的start_page对应那一行的标点,怎么是英文的单冒号?后面的单冒号似乎也不是个单冒号吧?要全部用英语的单冒号才行。
  
  aa
  符号是对的哈 都是英语的 没句型错误
  
  joke
  为什么匹配的内容都一样?
  代码:
  sel(‘//span[@id=”text110″]’, 0)-&gt;plaintext);
  if (!empty($strFirstH1)) {
  echo “”;
  echo $page-&gt;sel(‘//span[@id=”text110″]’, 0)-&gt;plaintext;
  echo “”;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  ‘joke’ =&gt; array(
  ‘start_page’ =&gt; ‘#8217;,
  ‘link_rules’ =&gt; array(
  ‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
  ),
  ‘max_depth’ =&gt; 2,
  ) ,
  );
  $crawler-&gt;setFetchJobs($arrJobs)-&gt;run();
  
  fanfank 文章作者
  你的代码没贴全,而且匹配的内容都一样我没很理解是哪些意思,这个问题有点长,你直接在微博私信我,我帮你看一下
  
  fanfank 文章作者
  已经修补了。之前的问题是爬虫不认识站内链接,例如有的超链接是『/entry』这样的,而不是『』。现在最新的Phpfetcher早已就能辨识站内链接,可以试一下
  
  joke
  谢谢 ,搞定了
  
  modejun
  楼主您好,问问假如我晓得了一个网站开源爬虫框架,但是要递交post参数,这个要如何弄呢,朋友提供一下思路
  
  fanfank 文章作者
  提交post参数,那觉得场景很特殊的,因为这个就不是单纯地按照链接爬取网页内容了,而且假如真的提供这个功能,针对什么样的链接什么样的参数,怎么递交,然后返回的内容是如何处理这种,目前我觉得似乎不太适宜爬虫做。或者你在微博私信我,告诉我你的使用场景是哪些,我瞧瞧是不是考虑找时间加进去
  
  modejun
  场景就是有一翻页时用ajax post递交的page参数,如果是get就太easy。还有顺便问问,如果翻页我明天试了要解决的话就是调节深度,但是似乎最大是20,还有就是更改正则循环调用setFetchJobs这个方式,总是觉得不是这么完美,有哪些好的思路解决翻页这个问题吗,现在公司在定方案我想多了解把这个框架的优势发挥下来,感谢了。
  
  fanfank 文章作者
  如果像你说的是个post恳求,那么它返回的应当不是一个HTML格式的文档,通常都是json格式的,然后由当前页面将异步返回的内容加载显示下来。
  你们的post恳求应当是有类似pn,rn等参数,如果大家仅仅是想领到post恳求的所有内容,可以直接写一个for循环,然后使用php的curl来直接发送post恳求获取每一个页面内容,可以不使用爬虫,因为这个爬虫基本原理是针对GET恳求返回的HTML页面的,然后手动抽取HTML的标签
  最大深度可以更改类『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』变量,把20改成-1就没有限制了,不过建议还是设一个上限比较好
  可以不需要循环更改正则呀,设置正则规则的可以是一个链表,把上面的所有你认为合适的正则都列上就可以,除非说你的正则表达式还得依据页面的某个参数或则内容不同而更改,那这个情况还是相对特殊了一点···
  翻页的解决,如果是GET就用爬虫,如果是POST,那么直接for循环之后调用curl会更好。
  
  ;;;
  好像不错
  
  ;;;
  能不能写个DOM选择器和技巧的文档,最好支持css选择DOM标签,有子节点,父节点,兄弟节点选择才好
  
  fanfank 文章作者
  在这个项目的github页面:,中文说明的第2节上面,有介绍dom选择器的文档
  
  jeremy
  博主。。为什么https的页面没办法恳求呢? 查看全部

  报dom为空
  
  fanfank 文章作者
  完整的代码贴下来我看一下,或者在微博私信我,我帮你看一下
  
  aa
  //下面两行促使这个项目被下载出来后本文件能直接运行
  $demo_include_path = dirname(__FILE__) . ‘/../’;
  set_include_path(get_include_path() . PATH_SEPARATOR . $demo_include_path);
  require_once(‘phpfetcher.php’);
  class mycrawler extends Phpfetcher_Crawler_Default {
  public function handlePage($page) {
  var_dump($page);
  //打印处当前页面的第1个h1标题内荣(下标从0开始)
  $strFirstH1 = trim($page-&gt;sel(‘//title’, 0)-&gt;plaintext);
  if (!empty($strFirstH1)) {
  echo $page-&gt;sel(‘//title’, 0)-&gt;plaintext;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  //任务的名子随意起,这里把名子叫qqnews
  //the key is the name of a job, here names it qqnews
  ‘qqnews’ =&gt; array(
  ‘start_page’ =&gt; ‘#8217;, //起始网页
  ‘link_rules’ =&gt; array(
  /*
  * 所有在这里列举的正则规则,只要能匹配到超链接,那么那条爬虫才会爬到那条超链接
  * Regex rules are listed here, the crawler will follow any hyperlinks once the regex matches
  */
  //’#news\.qq\.com/a/\d+/\d+\.htm$#’,
  ),
  //爬虫从开始页面算起,最多爬取的深度,设置为2表示爬取深度为1
  //Crawler’s max following depth, 1 stands for only crawl the start page
  ‘max_depth’ =&gt; 1,
  ) ,
  );
  $crawler-&gt;setFetchJobs($arrJobs)-&gt;run(); //这一行的疗效和下边两行的疗效一样
  其他的没变
  
  aa
  public function read() {
  $this-&gt;_strContent = curl_exec($this-&gt;_curlHandle);
  是_strContent取到了false造成的 这个是啥缘由呢Page default.php
  
  fanfank 文章作者
  我这儿返回的是403 forbidden,查了一下晓得缘由了,因为user_agent的问题csdn把爬虫给禁了。你可以这样更改:找到文件Phpfetcher/Page/Default.php,然后搜『user_agent』,把上面改掉,我改成『firefox』就可以了,当然你可以可以改得更真实一点,例如哪些『Mozilla/5.0 AppleWebKit』之类的
  有些网站会依照UA来屏蔽恳求,可能是因为个别UA有恶意功击的特点,或者一些爬虫之类的开源爬虫框架,之前百度有一段时间屏蔽360浏览器就是通过360浏览器里一些特定的UA来做到的,当然后来360浏览器把UA给更改嗯,就须要依照其它特点屏蔽了。
  所以你这儿先改一下user_agent吧。
  
  aa
  多谢哈
  试着改成Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 也不行呢
  试了这儿的也不行 恐怕还是curl的问题
  
  fanfank 文章作者
  我这儿执行都是正常的,结果也能下来。还是通过微博私信说吧,这里说得刷屏了
  
  aa
  围脖id是?
  
  fanfank 文章作者
  另外是,你贴的代码上面,标点符号不对啊,你的start_page对应那一行的标点,怎么是英文的单冒号?后面的单冒号似乎也不是个单冒号吧?要全部用英语的单冒号才行。
  
  aa
  符号是对的哈 都是英语的 没句型错误
  
  joke
  为什么匹配的内容都一样?
  代码:
  sel(‘//span[@id=”text110″]’, 0)-&gt;plaintext);
  if (!empty($strFirstH1)) {
  echo “”;
  echo $page-&gt;sel(‘//span[@id=”text110″]’, 0)-&gt;plaintext;
  echo “”;
  echo “\n”;
  }
  }
  }
  $crawler = new mycrawler();
  $arrJobs = array(
  ‘joke’ =&gt; array(
  ‘start_page’ =&gt; ‘#8217;,
  ‘link_rules’ =&gt; array(
  ‘#/\woke\wtml/\w+/20151021\d+\.htm$#’,
  ),
  ‘max_depth’ =&gt; 2,
  ) ,
  );
  $crawler-&gt;setFetchJobs($arrJobs)-&gt;run();
  
  fanfank 文章作者
  你的代码没贴全,而且匹配的内容都一样我没很理解是哪些意思,这个问题有点长,你直接在微博私信我,我帮你看一下
  
  fanfank 文章作者
  已经修补了。之前的问题是爬虫不认识站内链接,例如有的超链接是『/entry』这样的,而不是『』。现在最新的Phpfetcher早已就能辨识站内链接,可以试一下
  
  joke
  谢谢 ,搞定了
  
  modejun
  楼主您好,问问假如我晓得了一个网站开源爬虫框架,但是要递交post参数,这个要如何弄呢,朋友提供一下思路
  
  fanfank 文章作者
  提交post参数,那觉得场景很特殊的,因为这个就不是单纯地按照链接爬取网页内容了,而且假如真的提供这个功能,针对什么样的链接什么样的参数,怎么递交,然后返回的内容是如何处理这种,目前我觉得似乎不太适宜爬虫做。或者你在微博私信我,告诉我你的使用场景是哪些,我瞧瞧是不是考虑找时间加进去
  
  modejun
  场景就是有一翻页时用ajax post递交的page参数,如果是get就太easy。还有顺便问问,如果翻页我明天试了要解决的话就是调节深度,但是似乎最大是20,还有就是更改正则循环调用setFetchJobs这个方式,总是觉得不是这么完美,有哪些好的思路解决翻页这个问题吗,现在公司在定方案我想多了解把这个框架的优势发挥下来,感谢了。
  
  fanfank 文章作者
  如果像你说的是个post恳求,那么它返回的应当不是一个HTML格式的文档,通常都是json格式的,然后由当前页面将异步返回的内容加载显示下来。
  你们的post恳求应当是有类似pn,rn等参数,如果大家仅仅是想领到post恳求的所有内容,可以直接写一个for循环,然后使用php的curl来直接发送post恳求获取每一个页面内容,可以不使用爬虫,因为这个爬虫基本原理是针对GET恳求返回的HTML页面的,然后手动抽取HTML的标签
  最大深度可以更改类『Phpfetcher_Crawler_Default』中的『MAX_DEPTH』变量,把20改成-1就没有限制了,不过建议还是设一个上限比较好
  可以不需要循环更改正则呀,设置正则规则的可以是一个链表,把上面的所有你认为合适的正则都列上就可以,除非说你的正则表达式还得依据页面的某个参数或则内容不同而更改,那这个情况还是相对特殊了一点···
  翻页的解决,如果是GET就用爬虫,如果是POST,那么直接for循环之后调用curl会更好。
  
  ;;;
  好像不错
  
  ;;;
  能不能写个DOM选择器和技巧的文档,最好支持css选择DOM标签,有子节点,父节点,兄弟节点选择才好
  
  fanfank 文章作者
  在这个项目的github页面:,中文说明的第2节上面,有介绍dom选择器的文档
  
  jeremy
  博主。。为什么https的页面没办法恳求呢?

phpspider: 《我用爬虫三天时间“偷了”知乎一百万用户

采集交流优采云 发表了文章 • 0 个评论 • 348 次浏览 • 2020-05-20 08:01 • 来自相关话题

  《我用爬虫三天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
  phpspider是一个爬虫开发框架。使用本框架爬虫技术用什么语言,你不用了解爬虫的底层技术实现,爬虫被网站屏蔽、有些网站需要登入或验证码识别才会爬取等问题。简单几行PHP代码,就可以创建自己的爬虫,利用框架封装的多进程Worker解释器,代码更简练,执行效率更高速率更快。
  demo目录下有一些特定网站的爬取规则,只要你安装了PHP环境,代码就可以在命令行下直接跑。 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。
  下面以糗事百科为例, 来看一下我们的爬虫长哪些样子:
  $configs = array(&#x000A; 'name' =&gt; '糗事百科',&#x000A; 'domains' =&gt; array(&#x000A; 'qiushibaike.com',&#x000A; 'www.qiushibaike.com'&#x000A; ),&#x000A; 'scan_urls' =&gt; array(&#x000A; 'http://www.qiushibaike.com/'&#x000A; ),&#x000A; 'content_url_regexes' =&gt; array(&#x000A; "http://www.qiushibaike.com/article/\d+"&#x000A; ),&#x000A; 'list_url_regexes' =&gt; array(&#x000A; "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"&#x000A; ),&#x000A; 'fields' =&gt; array(&#x000A; array(&#x000A; // 抽取内容页的文章内容&#x000A; 'name' =&gt; "article_content",&#x000A; 'selector' =&gt; "//*[@id='single-next-link']",&#x000A; 'required' =&gt; true&#x000A; ),&#x000A; array(&#x000A; // 抽取内容页的文章作者&#x000A; 'name' =&gt; "article_author",&#x000A; 'selector' =&gt; "//div[contains(@class,'author')]//h2",&#x000A; 'required' =&gt; true&#x000A; ),&#x000A; ),&#x000A;);&#x000A;$spider = new phpspider($configs);&#x000A;$spider-&gt;start();
  爬虫的整体框架就是这样, 首先定义了一个$configs链表, 里面设置了待爬网站的一些信息, 然后通过调用$spider = new phpspider($configs);和$spider-&gt;start();来配置并启动爬虫.
  
  更多详尽内容爬虫技术用什么语言,移步到:
  开发文档 查看全部

  《我用爬虫三天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序
  phpspider是一个爬虫开发框架。使用本框架爬虫技术用什么语言,你不用了解爬虫的底层技术实现,爬虫被网站屏蔽、有些网站需要登入或验证码识别才会爬取等问题。简单几行PHP代码,就可以创建自己的爬虫,利用框架封装的多进程Worker解释器,代码更简练,执行效率更高速率更快。
  demo目录下有一些特定网站的爬取规则,只要你安装了PHP环境,代码就可以在命令行下直接跑。 对爬虫感兴趣的开发者可以加QQ群一起讨论:147824717。
  下面以糗事百科为例, 来看一下我们的爬虫长哪些样子:
  $configs = array(&#x000A; 'name' =&gt; '糗事百科',&#x000A; 'domains' =&gt; array(&#x000A; 'qiushibaike.com',&#x000A; 'www.qiushibaike.com'&#x000A; ),&#x000A; 'scan_urls' =&gt; array(&#x000A; 'http://www.qiushibaike.com/'&#x000A; ),&#x000A; 'content_url_regexes' =&gt; array(&#x000A; "http://www.qiushibaike.com/article/\d+"&#x000A; ),&#x000A; 'list_url_regexes' =&gt; array(&#x000A; "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"&#x000A; ),&#x000A; 'fields' =&gt; array(&#x000A; array(&#x000A; // 抽取内容页的文章内容&#x000A; 'name' =&gt; "article_content",&#x000A; 'selector' =&gt; "//*[@id='single-next-link']",&#x000A; 'required' =&gt; true&#x000A; ),&#x000A; array(&#x000A; // 抽取内容页的文章作者&#x000A; 'name' =&gt; "article_author",&#x000A; 'selector' =&gt; "//div[contains(@class,'author')]//h2",&#x000A; 'required' =&gt; true&#x000A; ),&#x000A; ),&#x000A;);&#x000A;$spider = new phpspider($configs);&#x000A;$spider-&gt;start();
  爬虫的整体框架就是这样, 首先定义了一个$configs链表, 里面设置了待爬网站的一些信息, 然后通过调用$spider = new phpspider($configs);和$spider-&gt;start();来配置并启动爬虫.
  
  更多详尽内容爬虫技术用什么语言,移步到:
  开发文档

phpcms跟dedecms比较

采集交流优采云 发表了文章 • 0 个评论 • 338 次浏览 • 2020-04-26 11:01 • 来自相关话题

  现在做一个网站是越来越容易了,很多公司和个人站长开始使用内容管理系统,在CMS方面,尤其是PHP的CMS,更是百花齐放,当然了,质量也参差不齐。目前国外比较流行的有Dedecms和Phpcms,下面华来科技就这两个cms做一下简单的对比。
  首先从用户界面来看,也就是管理后台,首先是登陆,dedecms登录框下边的几个广告,着实叫人烦躁,看着不爽。当然了,毕竟人家靠这这点儿微薄的收入给俺开发出了如此强悍的cms系统。phpcms的登入界面就没有广告了,盛大也不缺这点儿钱。当步入后台主界面后,dedecms则变得有些狭小,界面也不是太华丽。在这一点上,phpcms做的很不错,大气,华丽。
  从使用上来看,dedecms的操作去集中在了左侧,条例太清楚。phpcms则把一级导航放到了里面,二级导航放到了左侧,但是当选择完后,却没有相应的指示,往往使用户不知道自己处于那个导航之中,而且,phpcms在导航手动收起功能,感觉象是鸡肋,每次他收起时,我正在进行的操作还会被打乱,还不如没有这个功能来的好,也许是我的浏览器是宽屏的,即使不收起,依然觉得左侧的可编辑区域不小。
  从模板开发上,dedecms面向的是中级站长,甚至不懂编程的计算机爱好者都可以,而且,dedecms的标签都不容许编程({dede:php}除外),完全都是模板标签操作,入门十分简单,当然了这也是以牺牲可定制性为代价的。phpcms的模板制做,也取样了dede同意的方法,标签式,但是这个要比dedecms宽松的多,你可以在上面嵌入php代码,可以在模板上面编程,虽然这是软件开发的三忌,但是模板的灵活性显著降低了,用户有了更多的权限和方法去实现自己想要的疗效。
  SEO方面,做完网站了,如果他人都不来访问,或者根本找不到你的网站,那就很没面子了,而且也没收入了。在SEO方面,这两个cms做的都很不错,最通常的关键词和描述都有,而且是针对每位页面的。默认都可以设置页面生成的文件名称(补充一点,这两个cms都可以生成静态的html页面,这也对seo有很大帮助)。phpcms相对于dedecms的一些不足之处,网站的seo优化没有dedecms设计的好火车头采集教程,dedecms可以很简单的在后台控制url的生成方法,并且重命名,而phpcms貌似很复杂,最重要的是官方不给一点详尽的说明。
  论坛活跃程度方面,如果使用dedecms遇到问题,可以去任何一个峰会发贴,很快有人回复,其峰会的活跃程度可不是通常的高。而phpcms呢,毕竟这个产品是盛大开发的,你问客服吧,不敢,我相信大部分人都和我一样,用的是免费的。所以只能老老实实的去峰会发贴,希望有人回答,但是峰会活跃程度远不如dedecms,而且phpcms还同时维护了两个版本,一个2008(听这名子,盛大也很懒了吧,4年不更新了),一个V9。
  其他方面,很多人离开dedecms而转投phpcms,还有一个很重要的方面,那就是phpcms有一个dede所没有的功能――站群,当年我就是,从一个站长峰会上面看见了站群的概念,看了看仍然使用的dedecms很是沮丧,果断Google了一下支持站群的cms,然后转入了phpcms门下。
  总结火车头采集教程,比较了这么多,两个cms都各有千秋,其实对于用户来说,还是使用习惯,当我们一旦习惯了一个工具的时侯,自然都会得心应手。 查看全部

  现在做一个网站是越来越容易了,很多公司和个人站长开始使用内容管理系统,在CMS方面,尤其是PHP的CMS,更是百花齐放,当然了,质量也参差不齐。目前国外比较流行的有Dedecms和Phpcms,下面华来科技就这两个cms做一下简单的对比。
  首先从用户界面来看,也就是管理后台,首先是登陆,dedecms登录框下边的几个广告,着实叫人烦躁,看着不爽。当然了,毕竟人家靠这这点儿微薄的收入给俺开发出了如此强悍的cms系统。phpcms的登入界面就没有广告了,盛大也不缺这点儿钱。当步入后台主界面后,dedecms则变得有些狭小,界面也不是太华丽。在这一点上,phpcms做的很不错,大气,华丽。
  从使用上来看,dedecms的操作去集中在了左侧,条例太清楚。phpcms则把一级导航放到了里面,二级导航放到了左侧,但是当选择完后,却没有相应的指示,往往使用户不知道自己处于那个导航之中,而且,phpcms在导航手动收起功能,感觉象是鸡肋,每次他收起时,我正在进行的操作还会被打乱,还不如没有这个功能来的好,也许是我的浏览器是宽屏的,即使不收起,依然觉得左侧的可编辑区域不小。
  从模板开发上,dedecms面向的是中级站长,甚至不懂编程的计算机爱好者都可以,而且,dedecms的标签都不容许编程({dede:php}除外),完全都是模板标签操作,入门十分简单,当然了这也是以牺牲可定制性为代价的。phpcms的模板制做,也取样了dede同意的方法,标签式,但是这个要比dedecms宽松的多,你可以在上面嵌入php代码,可以在模板上面编程,虽然这是软件开发的三忌,但是模板的灵活性显著降低了,用户有了更多的权限和方法去实现自己想要的疗效。
  SEO方面,做完网站了,如果他人都不来访问,或者根本找不到你的网站,那就很没面子了,而且也没收入了。在SEO方面,这两个cms做的都很不错,最通常的关键词和描述都有,而且是针对每位页面的。默认都可以设置页面生成的文件名称(补充一点,这两个cms都可以生成静态的html页面,这也对seo有很大帮助)。phpcms相对于dedecms的一些不足之处,网站的seo优化没有dedecms设计的好火车头采集教程,dedecms可以很简单的在后台控制url的生成方法,并且重命名,而phpcms貌似很复杂,最重要的是官方不给一点详尽的说明。
  论坛活跃程度方面,如果使用dedecms遇到问题,可以去任何一个峰会发贴,很快有人回复,其峰会的活跃程度可不是通常的高。而phpcms呢,毕竟这个产品是盛大开发的,你问客服吧,不敢,我相信大部分人都和我一样,用的是免费的。所以只能老老实实的去峰会发贴,希望有人回答,但是峰会活跃程度远不如dedecms,而且phpcms还同时维护了两个版本,一个2008(听这名子,盛大也很懒了吧,4年不更新了),一个V9。
  其他方面,很多人离开dedecms而转投phpcms,还有一个很重要的方面,那就是phpcms有一个dede所没有的功能――站群,当年我就是,从一个站长峰会上面看见了站群的概念,看了看仍然使用的dedecms很是沮丧,果断Google了一下支持站群的cms,然后转入了phpcms门下。
  总结火车头采集教程,比较了这么多,两个cms都各有千秋,其实对于用户来说,还是使用习惯,当我们一旦习惯了一个工具的时侯,自然都会得心应手。

PHP教程—DedeCMS二次开发(二)

采集交流优采云 发表了文章 • 0 个评论 • 309 次浏览 • 2020-04-10 11:01 • 来自相关话题

  
  织梦内容管理系统(DedeCMS),是一个集内容发布、编辑、管理检索等于一体的网站管理系统(Web CMS),他拥有美国CMS诸多特性之外,还结合中国用户的须要,对内容管理系统概念进行明晰剖析和定位。
  DedeCMS二次开发
  1、DedeCMS的二次开发
  为了使更多人了解二次开发,并更方便的了解DedeCMS的二次开发,下面将会简单的介绍关于DedeCMS二次开发的一些基础和大纲
  2、DedeCMS二次开发必备基础:
  · 非常熟悉HTML
  · 熟悉p+CSS的布局
  · 扎实的PHP基础php网站分类目录程序 网址导航程序 织梦二次开发,熟悉结构化编程,了解OOP,并能看懂和使用
  · 熟悉MYSQL,掌握SQL语言
  3、DedeCMS二次开发学习过程
  · 理解CMS是哪些
  · 熟悉DedeCMS的功能(如:栏目的分类,文档管理,模型的使用,系统的设置等常用的功能)
  · 掌握DedeCMS的模板标签使用及原理
  · DedeCMS目录结构剖析 熟悉每位文件夹上面主要装哪些文件,这样在二次开发的时侯晓得在那个文件夹下的哪些文件更改
  目录结构摘要:
  ./a 生成文件储存路径 .
  /data 缓存文件及数据中心
  /admin 管理后台数据
  /backupdata 备份数据
  /cache 缓存文件
  /enums 级别联动数据,JS,枚举类型的缓存文件
  /js 常用的JS
  /mark 水印相关文件
  /module 模块安装文件
  /rss Rss相关
  /sessions Session 存放路径
  /textdata 文本数据
  /tplcache 模板缓存
  /uploadtmp 上传文件缓存位置
  /ziptmp zip包解压缓存位置 ……
  DedeCMS文件结构剖析 熟悉每位文件的基本功能,方便做更改,知道每位文件的大约作用以后,可以便捷的对文件进行更改
  文件结构摘要:
  common.inc.php 数据库配置文件
  config.cache.bak.php 后台系统配置备份
  config.cache.inc.php 后台系统配置文件缓存
  downmix.data.php 采集混淆缓存文件
  mysql_error_track.inc MYSQL错误志
  safequestions.php 安全问题
  sitemap.html 站点地图
  sys_pay.cache.php 支付网段配置
  template.rand.php 随机模板设置 ……
  · DedeCMS数据库结构剖析,至少要熟悉每位表的作用 熟悉每位表的作用,了解几个核心表的设计及数组的含意,方便领到新的需求以后,能快速的判定是否加数组,还是新建表来处理。同时也能理解DedeCMS的数据库设计思想,把有用的设计思路加到自己的系统中。
  · DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登录,注册,文档管理,权限控制,分类管理,模型设置等一些常用流程控制。对几个核心文件进行解剖,了解其编程方法及安全机制
  · DedeCMS插件的开发(****式插件和内嵌式插件) 熟悉两种插件的编撰,插件的导出导入php网站分类目录程序 网址导航程序 织梦二次开发,插件搭配模型的使用
  作为国外第一个开源的内容管理系统,DedeCMS在创建以来都在摸索中国互联网内容管理系统的公路,并且推动诸多开源CMS前进的公路,程序由当初个人作品,现已成立团队,在提高用户服务、提高产品质量的同时,对中国网站内容管理系统进行研究,成为目前市场上最受欢迎的内容管理系统。 查看全部

  
  织梦内容管理系统(DedeCMS),是一个集内容发布、编辑、管理检索等于一体的网站管理系统(Web CMS),他拥有美国CMS诸多特性之外,还结合中国用户的须要,对内容管理系统概念进行明晰剖析和定位。
  DedeCMS二次开发
  1、DedeCMS的二次开发
  为了使更多人了解二次开发,并更方便的了解DedeCMS的二次开发,下面将会简单的介绍关于DedeCMS二次开发的一些基础和大纲
  2、DedeCMS二次开发必备基础:
  · 非常熟悉HTML
  · 熟悉p+CSS的布局
  · 扎实的PHP基础php网站分类目录程序 网址导航程序 织梦二次开发,熟悉结构化编程,了解OOP,并能看懂和使用
  · 熟悉MYSQL,掌握SQL语言
  3、DedeCMS二次开发学习过程
  · 理解CMS是哪些
  · 熟悉DedeCMS的功能(如:栏目的分类,文档管理,模型的使用,系统的设置等常用的功能)
  · 掌握DedeCMS的模板标签使用及原理
  · DedeCMS目录结构剖析 熟悉每位文件夹上面主要装哪些文件,这样在二次开发的时侯晓得在那个文件夹下的哪些文件更改
  目录结构摘要:
  ./a 生成文件储存路径 .
  /data 缓存文件及数据中心
  /admin 管理后台数据
  /backupdata 备份数据
  /cache 缓存文件
  /enums 级别联动数据,JS,枚举类型的缓存文件
  /js 常用的JS
  /mark 水印相关文件
  /module 模块安装文件
  /rss Rss相关
  /sessions Session 存放路径
  /textdata 文本数据
  /tplcache 模板缓存
  /uploadtmp 上传文件缓存位置
  /ziptmp zip包解压缓存位置 ……
  DedeCMS文件结构剖析 熟悉每位文件的基本功能,方便做更改,知道每位文件的大约作用以后,可以便捷的对文件进行更改
  文件结构摘要:
  common.inc.php 数据库配置文件
  config.cache.bak.php 后台系统配置备份
  config.cache.inc.php 后台系统配置文件缓存
  downmix.data.php 采集混淆缓存文件
  mysql_error_track.inc MYSQL错误志
  safequestions.php 安全问题
  sitemap.html 站点地图
  sys_pay.cache.php 支付网段配置
  template.rand.php 随机模板设置 ……
  · DedeCMS数据库结构剖析,至少要熟悉每位表的作用 熟悉每位表的作用,了解几个核心表的设计及数组的含意,方便领到新的需求以后,能快速的判定是否加数组,还是新建表来处理。同时也能理解DedeCMS的数据库设计思想,把有用的设计思路加到自己的系统中。
  · DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登录,注册,文档管理,权限控制,分类管理,模型设置等一些常用流程控制。对几个核心文件进行解剖,了解其编程方法及安全机制
  · DedeCMS插件的开发(****式插件和内嵌式插件) 熟悉两种插件的编撰,插件的导出导入php网站分类目录程序 网址导航程序 织梦二次开发,插件搭配模型的使用
  作为国外第一个开源的内容管理系统,DedeCMS在创建以来都在摸索中国互联网内容管理系统的公路,并且推动诸多开源CMS前进的公路,程序由当初个人作品,现已成立团队,在提高用户服务、提高产品质量的同时,对中国网站内容管理系统进行研究,成为目前市场上最受欢迎的内容管理系统。

官方客服QQ群

微信人工客服

QQ人工客服


线