‘壹’ 使用php的cURL库进行网页抓取
使用模明仿PHP的cURL库可以简单和有效地去抓网页 你只需要运行一个脚本 然后分析一下你所抓取的网页 然后就可以以程序的方式得到你想要的数据了 无论是你想从从一个链接上取部分数据 或是取一个XML文件并把其导入数据库 那怕就是简单的获取网页内容 cURL 是一个功能强大的PHP库 本文主要讲述如果使用这个PHP库
启用 cURL 设置
首先 我们得先要确定我们的PHP是否开启了这个库 你可以通过使用php_info()函数来得到这一信息
﹤?phpphpinfo();?﹥
如果你可以在网页上看到下面的输出 那么表示cURL库已被开启
如果你看到的话 那么你需要设置你的PHP并开启这个库 如果你是在Windows平台下 那么非常简单 你需要改一改你的php ini文件的设置 找到php_curl dll 并取消前面的分号注释就行了 如下所示
//取消下在的注释extension=php_curl dll
如果你旦纤是在Linux下面 那么 你需要重新编译你的PHP了 编辑时 你需要打开编译参数——在configure命令上加上 –with curl 参数
一个小示例
如果一切就绪 下面是一个小例程
﹤?php// 初始化一个 cURL 对象$curl = curl_init();
// 设置你需要抓取的URLcurl_setopt($curl CURLOPT_URL //cocre );
// 设置headercurl_setopt($curl CURLOPT_HEADER );
// 设置cURL 参数 要求结果保存到字符串中还是输出到屏幕上槐链 curl_setopt($curl CURLOPT_RETURNTRANSFER );
// 运行cURL 请求网页$data = curl_exec($curl);
// 关闭URL请求curl_close($curl);
// 显示获得的数据var_mp($data);
如何POST数据
上面是抓取网页的代码 下面则是向某个网页POST数据 假设我们有一个处理表单的网址// example /sendSMS php 其可以接受两个表单域 一个是电话号码 一个是短信内容
﹤?php$phoneNumber = ;$message = This message was generated by curl and php ;$curlPost = pNUMBER= urlencode($phoneNumber) &MESSAGE= urlencode($message) &SUBMIT=Send ;$ch = curl_init();curl_setopt($ch CURLOPT_URL // example /sendSMS php );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_POST );curl_setopt($ch CURLOPT_POSTFIELDS $curlPost);$data = curl_exec();curl_close($ch);?﹥
从上面的程序我们可以看到 使用CURLOPT_POST设置HTTP协议的POST方法 而不是GET方法 然后以CURLOPT_POSTFIELDS设置POST的数据
关于代理服务器
下面是一个如何使用代理服务器的示例 请注意其中高亮的代码 代码很简单 我就不用多说了
﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPPROXYTUNNEL );curl_setopt($ch CURLOPT_PROXY fakeproxy : );curl_setopt($ch CURLOPT_PROXYUSERPWD user:password );$data = curl_exec();curl_close($ch);?﹥ 关于SSL和Cookie
关于SSL也就是HTTPS协议 你只需要把CURLOPT_URL连接中的//变成//就可以了 当然 还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点
关于Cookie 你需要了解下面三个参数
CURLOPT_COOKIE 在当面的会话中设置一个cookie
CURLOPT_COOKIEJAR 当会话结束的时候保存一个Cookie
CURLOPT_COOKIEFILE Cookie的文件
HTTP服务器认证
最后 我们来看一看HTTP服务器认证的情况
﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPAUTH CURLAUTH_BASIC);curl_setopt(CURLOPT_USERPWD [username]:[password] )
$data = curl_exec();curl_close($ch);?﹥
关于其它更多的内容 请参看相关的cURL手册 lishixin/Article/program/PHP/201311/21491
‘贰’ 网页需要登录,怎样抓取其内容
网站登录/认证有多种方式,要抽取/提取需要登录的网页内容,需要实现有针对性的网页抓取软件模块:
1,HTTPS
2,HTTP Digest
3,HTTP Basic
4,使用网页Form
其中,前三种是通信协议层面的,如果使用PHP,Python,javascript, Java等语言编程,一般需要控制HTTP通信做相应的动作;而第四种是应用层面的,只需要模拟用户填写Form然后提交即可,相对容易一些。另外,还要考虑服务器是否推送cookie以及会话控制等等,所以,要自己编程把所有的都实现了是一个很大的挑战,但是,如果利用浏览器平台能力,这个就好解决了,例如,利用Firefox的安全管理器,网站认证都委托给Firefox,只需要编写应用逻辑代码即可。网页抓取/数据抽取/信息提取软件工具包MetaSeeker就是采用了这种方案,用统一的方法实现所有方式的认证,一种最简单的操作方法:先访问一次目标页面,认证通过后安全信息都记录在安全服务器上,后续的抓取工作就像针对不需要认证的页面一样,当然,这个第一次认证操作可以用程序自动完成。
MetaSeeker工具包是免费使用的,下载地址: http://www.gooseeker.com
‘叁’ 软件推荐丨GoldDataSpider —— 网页数据抽取工具
GoldDataSpider 是用于抓取网页和抽取数据的工具。其核心代码是从金色数据抓取融合平台分离而来。
该项目提供抓取和抽取来自网页数据,不仅可以抽取网页内的内容,还能抽取URL、HTTP报头、Cookie里的数据。
该项目定义了一种简洁、灵活、敏捷的结构或者说是规则语法。极尽其所能将网页内容、HTTP报头、Cookie、甚至关联其它网页、其它网站数据,抽取出有意义有价值数据字段,组成一条数据记录。除此之外,还能内嵌http请求,以补充数据字段,比如某些字段需要向词典提供翻译这样的字段等等。
该项目还可支持从各种类型文档抽取数据,比如html/xml/json/javascript/text等。
我们还提供了规则可视化配制,请下载采集数量不受限、爬虫数量不受限、导出数据数量不受限的完全免费金色数据平台社区版 。以及详尽的文档
使用入门
首先,我们需要将依赖加入项目当中,如下:
1、对于maven项目
2、对于gradle项目
然后你将可以使用该依赖所提供的简洁清晰的API,如下:
运行上面的测试,你将可以看类似下野郑面的输出:
当作Service或者API使用
你可以在项目中,可以当作调用服务和API使用。例如如下:
对于可视化配制,可以参考免费社区版文档。以下就免费社区版做简单介绍 ,详情见官网!
免费社区版:
开源/免费
让用户更好理解和使用产品
我们针对数据采集免费,还开放和维护核心的开源代码项目。让用户可以更好的使用、理解采集,用好采集。 让用户在各种场景应用金色数据采集带来的便利,我们有信心让客户见到一个开放的数据平台,让用户放心/省心/省力。
自由/灵活
透出一股强大的采集核心
我们的采集器,将向用户暴露一切目标数据,除了常规网页内容,还有如URL、HTTP报头、Cookie等。还提供了各种解析工具和函数,让用户不仅能得到网页内容里的数据,还能得到URL、HTTP报头、Cookie里隐藏的核心数据,还能稿租灵活做到智能防封。
分布式采集
私有云,更灵活,更安全,更放心
可以根据自身需求,随意部署采集器数量,7*24小时不间断运行,采集后端集中灵活控制。可自由指挥数据在哪个采集器采集。可定义定时采集,无需人员值守。
数据可关联可追踪
恢复/重建数据内在与外在价值
可以让每条数据随着目标网站目键脊兆标内容更新(如商品价格)、而更新用户应用表该条数据相关字段内容。
非侵入式融合
融合从未如此现实和简单
完全可以在不改变用户应用表结构(增删改表列),而将采集数据融入到应用表中。
自动化/一体化
无需人力操作,即抓即用
不只是采集可以自动化抓取,融合也提供了手动化和强大自动化功能。还将采集与融合操作无缝对接,可将目标数据抓一条融合一条,实时流向应用表,做到即抓即用!
点击下方链接,获取软件下载地址↓↓↓
GoldDataSpider首页、文档和下载 - 网页数据抽取工具 - 开源中国
‘肆’ php获取指定网页内容
此类方法一共有三种
第一种方法
<?php
$c = curl_init();
$url = 'www.badcatxt.com';
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($c);
curl_close($c);
$pos = strpos($data,'utf-8');
if($pos===false){$data = iconv("gbk","utf-8",$data);}
preg_match("/<title>(.*)</title>/i",$data, $title);
echo $title[1];
?>
第二种方法:使用file()函数
<?php
$lines_array = file('http://www.badcatxt.com/');
$lines_string = implode('', $lines_array);
$pos = strpos($lines_string,'utf-8');
if($pos===false){$lines_string = iconv("gbk","utf-8",$lines_string);}
eregi("<title>(.*)</title>", $lines_string, $title);
echo $title[1];
?>
第三种方法:使用file_get_contents
<?php
$content=file_get_contents("http://www.badcatxt.com/");
$pos = strpos($content,'utf-8');
if($pos===false){$content = iconv("gbk","utf-8",$content);}
$postb=strpos($content,'<title>')+7;
$poste=strpos($content,'</title>');
$length=$poste-$postb;
echo substr($content,$postb,$length);
?>
‘伍’ PHP怎样抓取网页代码中动态显示的数据
你是想抓别人网页上ajax动态载入的数据吧?
1、要找到它的ajax载入的URL地址
2、利用PHP的file_get_contents($url)函数读取那个url地址。
3、对抓取到的内容进行分析或正则过滤。
‘陆’ 怎么用phpquery抓取网页实时数据使用CI框架
phpquery和框架并无关系,我现在也是用CI的
先将pq引入进来
$content = file_get_content('https://personalbank.cib.com.cn/pers/main/pubinfo/ifxQuotationQuery.do');
phpQuery::newDocumentHTML($content);
$containers = pq("xxxx");就可以了,但你要抓取这个网站数据,他数据是js加载的,所以你只需要
$content = file_get_content('https://personalbank.cib.com.cn/pers/main/pubinfo/ifxQuotationQuery!list.do?_search=false&dataSet.nd=1440145968553&dataSet.rows=100&dataSet.page=1&dataSet.sidx=&dataSet.sord=asc');这个地址返回是json数据,你直接json_decode()就OK