php如何抓取网页数据?(一)_数据库_
优采云 发布时间: 2022-05-17 18:07php如何抓取网页数据?(一)_数据库_
php如何抓取网页数据?这是一个我们老常问的问题,毕竟业内也不会很少接触php抓取,或者听说过php抓取这种看上去高深得不得了的名词,那么我们今天就来说说php是如何抓取一个网页的。正式开始之前,我们先说说网页是如何保存在浏览器页面中的,我们普遍采用的方式是js方式,也就是浏览器被加载之后,js代码在加载下来的时候会被php解析。
那么问题来了,php想要抓取网页,为什么要用js呢?在第一次加载网页时抓取网页数据,再在解析的时候解析js代码,这种事情听上去蛮cool的,每个人的实际场景不一样,但是如果使用的是,在php解析js代码之后将数据从浏览器中post到数据库中,而后再解析js代码获取数据应该会更加方便一些。数据库中的数据是php解析js代码写入的,php解析是建立在js基础上的,所以不像解析js直接获取数据,当php解析器遇到不认识的js代码时解析不出数据,甚至还要再进行js的hook,而js是基于javascript的,所以就算是很简单的js程序,都会认识javascript。
比如下面这个典型的网页中html代码可以看到title被解析为title,time被解析为time,name被解析为name,ad被解析为ad,index被解析为index,在php代码解析post请求的时候会先对http请求进行解析,然后根据规范对数据的格式进行解析,然后根据数据库表中的记录进行相应的解析。
代码我们今天不太展示了,有兴趣的朋友可以参考我们的文章:一个关于简单爬虫的设计与实现。数据库我们直接来看一个单纯post请求的例子,代码如下:constrequest=require('localhost').request();functionpost(url,username,password){if(url.split('/').length===。
1){constbody=request。urlopen(url)。readystate;constjson=json。parse(body);if(json。stringify(body)){returnconsole。log('posts:'+json。tostring());}else{//获取头部信息returnusername=body['cookie']。slice(1,。
1)[1];json。stringify(body['headers'])。length===2;returnnull;}}}functionpostdata(url,params){constmykey=request。urlopen(url)。key。split('/')。length===1&&mykey。
split('')。length===1?mykey:'';returnbody['headers']。slice(1,。
1)[1];}functionclean(postrepo=''){constdeletedelay=date.satellite().minday.millisecon