2020-10-28
phpQuery采集网页实现代码实例

phpQuery采集网页实现代码实例

前言 平时开发中可能遇到一个问题。采集网页,小偷程序等等。各种花式秀正则的话,虽然能体现出geek,但是我觉得做事却不够优雅。采集到的网页说白了也是DOM,jQuery各种优雅地获取节点。幸好,有这个类库,帮我们解决了这个,那就是phpQuery. 为什么使用phpQuery phpQuery是基于php5新添加的DOMDocument。而DOMDocument则是专门用来处理html/xml。它提供了强大的xpath选择器及其他很多html/xml操作函数,使得处理html/xml起来非常方便。 尤其对于新手,看到一堆”不知所云”的字符评凑在一起,有种脑袋都要炸了的感觉。如果要分离的对象没有太明显的特征,正则写起来更是麻烦。 学习成本低,jQuery是PHP程序员的标配,那么懂jQuery的话,是可以无缝衔接的,学习成本几乎为0。选择器,节点,节点信息,over 下载地址 https://code.google.com/archive/p/phpquery/downloads(需要翻墙,或者自行百度phpQuery) 实验 既然开始了,那么就做个实验,比如我们要获取SF的所有标签名称https://segmentfault.com/tags,审查元素,得到部分标签属性。<a class="tag" data-original-title="负载均衡">负载均衡</a> Demo <?php require("phpQuery.php");//导入phpQuery库 $html = phpQuery::newDocumentFile("https://segmentfault.com/tags"); $hrefList = pq(".tag"); //获取标签为a的所有对象$(".tag") foreach ($hrefList as $href) { echo $href->getAttribute("data-original-title"),"<br>"; } 结果 总结 0.网页采集真特么无脑暴力,成功绕过恶心的正则 1.写法参照jQuery 2.体会Dom的思想 3.此类库并非万金油,更适合网页采集 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持梦主博客。 ...
技术教程 890次浏览 0条评论
2020-10-27
PHP网页缓存技术优点及代码实例

PHP网页缓存技术优点及代码实例

前台静态化:把动态页面解析后保存为静态页面 文件缓存:把查询结果保存为文件,XML 内存缓存:memcache php缓存器:XCache、eaccelerator等 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。  Memcache是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。  Memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。 XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率 2 到5 倍, 降低服务器负载. ****************************************************************************************************************************************************** 1、普遍缓存技术:   数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得。   用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表。   举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永远是瓶颈,用硬盘换速度,是这个的关键点。 2、 页面缓存:   每次访问页面的时候,都会先检测相应的缓存页面文件是否存在,如果不存在,就连接数据库,得到数据,显示页面并同时生成缓存页面文件,这样下次访问的时候页面文件就发挥作用了。(模板引擎和网上常见的一些PHP缓存机制类通常有此功能) 3、 时间触发缓存:    检查文件是否存在并且时间戳小于设置的过期时间,如果文件修改的时间戳比当前时间戳减去过期时间戳大,那么就用缓存,否则更新缓存。 4、 内容触发缓存:    当插入数据或更新数据时,强制更新PHP缓存机制。 5、 静态缓存:   这里所说的静态缓存是指静态化,直接生成HTML或XML等文本文件,有更新的时候重生成一次,适合于不太变化的页面,这就不说了。 以上内容是代码级的解决方案,我直接CP别的框架,也懒得改,内容都差不多,很容易就做到,而且会几种方式一起用,但下面的内容是服务器端的缓存方案,非代码级的,要有多方的合作才能做到 6、 内存缓存:   Memcached是高性能的,分布式的内存对象PHP缓存机制系统,用于在动态应用中减少数据库负载,提升访问速度。 7、 php的缓冲器:    有eaccelerator, apc, phpa,xcache,这个这个就不说了吧,搜索一堆一堆的,自己看啦,知道有这玩意就OK 8、 MYSQL缓存:   这也算非代码级的,经典的数据库就是用的这种方式,看下面的运行时间,0.09xxx之类的 9、 基于反向代理的Web缓存:    如Nginx,SQUID,mod_proxy(apache2以上又分为mod_proxy和mod_cache) 10、 DNS轮询:     BIND是一款开放源码的DNS服务器软件,这个要说起来就大了,自己搜索去,大家知道有这个东西就行了。   我知道的有chinacache等大站就是这样做的,说简单点就是多服务器啦,把同一个页面或文件缓存到不同的服务器上,按南北自动解析到相关的服务器中。 PHP网页缓存实例 ob_start():页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中; ob_get_contents():用来获取页面缓存中的内容,获取到以后呢,我们就可以想怎么处理这些内容都行了,过滤字段啦,匹配内容啦,都可以~~~ :) ob_end_flush():表示页面缓存结束。并且经我验证,缓存的内容将输出到当前页面上,也就是可以显示缓存内容。 用此三个php函数,就可以实现强大的功能。如果数据库查询量较大,可以用cache来解决这个问题。 首先,设定过期时间,如果要求缓存文件2个小时过期,就可以设定cache_time为3600*2;通过filectime()来获取缓存文件的创建时间(或 filemtime()获取修改时间),如果当前时间跟文件的创建时间超过限定的过期时间,就可以通过上面三个函数,首先从数据库中取出数据,然后开始缓存ob_start(),然后把要生成的页面的html代码写在缓存中,缓存结束后通过ob_get_contents()获取到缓存的内容,然后通过fwrite把缓存内容写到静态页面html。 如果未过期,直接读取cache中的静态页面即可,避免了大量的数据库访问。 <?php $_time =10; $dir="D:\\php\\"; function cache_start($_time, $dir) { $cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html'; $cachetime = $_time; ob_start(); if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime)) { include($cachefile); ob_end_flush(); exit; } } function cache_end($dir) { $cachefile = $dir.'/'.sha1($_SERVER['REQUEST_URI']).'.html'; $fp = fopen($cachefile, 'w'); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_flush(); } cache_start($_time, $dir); //以下是输出的内容,放在cache_start和cache_end两个方法之间 for ($i=0;$i<5;$i++) { echo $i; sleep(1); } cache_end($dir); ?> 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持梦主博客。...
技术教程 920次浏览 0条评论
2020-10-22
快速SEO方法?网页消噪处理教程!

快速SEO方法?网页消噪处理教程!

关于网站页面消噪的定义、原理以及作用,网上已经有太多相关的理论分享,网站运营者朋友可以很容易的查询获取到,但是关于具体有效的页面消噪处理方法确实比较零碎和分散,因此17交流网小编就整理了一份详细的页面消噪处理方法分享给所有的SEOer,希望能够帮助到更多的网站运营者们。 对网页做消噪处理其实就是对页面内容中不重要的信息点做清理处理,从而提升主题内容在整个页面内容的占比,既然要对页面内容进行改造或者清理,所以就要求SEOer具有一定的前端技术,最起码对HTML、JS和CSS能够熟练的运用,如果拥有独立编辑和更改网站页面模板的能力更佳,下面合肥网络公司17交流网小编就将整理的页面消噪方法从由浅入深一一讲解给大家! 1、DIV+CSS 关于第一点,我想很多朋友都已经非常熟悉了,目前大多数的网站页面模板均是通过DIV+CSS的方式来做的,TABLE只有在特殊的情况下才会被应用到页面模板中,DIV+CSS精简代码的益处我就不多做介绍,你只要记住在使用的时候谨记避免多层嵌套使用,否则也就失去了它的作用; 2、CSS和JS封装 整个页面的CSS和JS如果不是写入HTML代码标签的属性来使用的话,全部做封装处理,在服务的根目录下面建立规范的文件夹,把所有的CSS和JS文件存储在合理的位置,然后在页面代码中通过link和script做外部调用,关于这一点,SEOer前期一定要提供给前端开发人员相应的SEO规范,切勿为了渲染页面效果,在页面HTML中滥用CSS和JS处理。 3、nofollow使用 如果你已经看了关于页面噪声的定义和原理,我想你已经能够分辨出页面内容中那些板块信息点属于噪音的范畴,在这一点上,小编比较主观,不能因为了解了噪声原理,就把一个页面上除了核心内容之外所有的链接地址做nofollw处理,这里主要还是要网站建设运营者自己把控好页面元素的重要性,做有针对性处理,通过nofollw标签告诉搜索引擎在这个模板页面中那些元素是不重要的,从而节省搜索引擎计算资源,提高分析效率。 4、Iframe框架的合理使用 Iframe还是小编上大学那会儿最喜欢使用的一个标签,后来从事SEO知道它的劣处,一般都会慎用。Iframe这个标签主要是嵌套入一张页面,在呈现给用户看的时候没有任何问题,问题就在于页面被抓取却获取不到用户看到的内容,有点欺骗搜索引擎的性质,但其实这个标签是没有问题的。在消噪处理上,合理的使用Iframe可以起到奇效,针对一些不重要的公共模块,比如版权声明、合作资质等,这些内容对SEO没有任何益处,但是对用户确实有用的,所以页面一般都会把它作为公共区域引用在某一个位置,一般是页面底部,为了能够达到消噪的目的,通过Iframe可能很好的解决掉这个问题。 5、JS跳转 在第三步中提到了nofollow标签的使用,虽然nofollow标签可以起到避免权重流失的作用,但是它本身是站位分摊了一个页面传递的权重值,页面中其他的链接地址不会因为某个链接增加了nofollw从而分摊了这个链接地址被分配的权重,所以比较彻底的做法就是通过js实现跳转某些不重要的链接地址板块。而js的做法主要通过在标签中使用onclick事件或者open()方法实现。如果你不太懂这一点的具体做法,可以交给技术去做,你只要懂这样做要达到什么目的即可。 6、Ajax实现隐藏和显示 关于这一点主要应用于详情页的评论互动模块,玩过自媒体的运营者朋友都知道,用户的评论信息是受条数限制的,而且有的是需要经过审核才可以在页面里调取出来,之所以要这么做就是为了保证页面主题内容的质量,避免不相关的评论信息喧宾夺主,如果你看今日头条的文章会发现,页面底部评论默认是只显示5条评论信息,如果要查看更多的话可以点击“查看更多评论”,而这个功能就是通过Ajxa技术来实现的,从而达到变相消噪的目的。Ajxa也是一门JS框架技术,如果你是从事技术方面工作的话并不难,一般还是做网站开发的人员使用较多,前端技术只要通过JS做好效果处理即可。 关于页面噪声处理之消噪处理技术分享就包含这么多,当然还有通过变相“加噪”处理实现消噪目的做法,这个主要体现的主题内容改造层面,在网上也能够找到相应的信息点,小编这篇文章就不再过多赘述,总之网站页面做消噪处理的核心目的就是要突出主题内容,节省搜索引擎在抓取页面之后预处理、过滤、分词以及索引的分析时间,从而赢得搜索引擎的信赖。 ...
网站运营 940次浏览 0条评论
微信二维码