设为首页 收藏本站
查看: 869|回复: 0

[经验分享] 用PHP抓取页面并分析

[复制链接]

尚未签到

发表于 2017-12-30 17:58:55 | 显示全部楼层 |阅读模式
DSC0000.gif   用了这个类能像jQuery那样操作DOM,不必为采集网站内容而使用那些头疼的正则算法了,用法上与jQuery相似,只是$()换成了pq()。主页放在google的code中,被屏蔽了得FQ一下,下面的附件中我分享了一个最新版本的fgFQ软件。用法很简单只要打开fg742p.exe文件就可以了。
  1)我要获取每一页内容中的每个具体医院的信息,例如要获取301医院的信息。

  每页的内容页面已经在前面的操作中抓取到了本地。所以可以直接用localhost了。
  

  $snoopy=new Snoopy();  
 for($i = 1; $i <= 10; $i++) {
  
$url = "http://localhost/spider/web/page/$i.html";
  
$snoopy->fetch($url);
  
$html = $snoopy->results;
  
}
  

  2)用phpQuery获取到节点信息,如下图的DOM结构:

  使用一些phpQuery的方法,结合DOM结构读取每个医院信息的URL地址。

  

for($i = 1; $i <= 10; $i++) {  
//...抓取本地页面...
  
phpQuery::newDocument($html);  //初始化对象
  
$urls = array();
  
foreach(pq('.search-hos-info dl dt a') as $item) {
  
array_push($urls, pq($item)->attr('href')); //医院详情
  
}
  
}
  


  3)根据读取到的URL地址列表,抓取指定的页面。

  

$detailIndex = 1;  
for($i = 1; $i <= 10; $i++) {
  
//...抓取本地页面...
  
//...获取指定节点的href地址信息...
  
$len = count($urls);
  
for($row = 1; $row <= $len; $row++) {
  
$snoopy->fetch($urls[$row - 1]);
  
file_put_contents("web/hospital/$detailIndex.html", $snoopy->results);
  
$detailIndex++;
  
}
  
}
  


  FQ工具下载:
  翻越障碍.rar
  demo下载:
  http://download.csdn.net/detail/loneleaf1/8089507
  Snoopy类的一些说明:
  类方法

fetch($URI)
这是为了抓取网页的内容而使用的方法。  $URI参数是被抓取网页的URL地址。
  抓取的结果被存储在 $this->results 中。
  如果你正在抓取的是一个框架,Snoopy将会将每个框架追踪后存入数组中,然后存入 $this->results。

fetchtext($URI)
本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中的文字内容。
fetchform($URI)
本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中表单内容(form)。
fetchlinks($URI)
本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中链接(link)。  默认情况下,相对链接将自动补全,转换成完整的URL。

submit($URI,$formvars)
本方法向$URL指定的链接地址发送确认表单。$formvars是一个存储表单参数的数组。
submittext($URI,$formvars)
本方法类似于submit(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回登陆后网页中的文字内容。
submitlinks($URI)
本方法类似于submit(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中链接(link)。  默认情况下,相对链接将自动补全,转换成完整的URL。
  类属性
  


$host
连接的主机
$port
连接的端口
$proxy_host
使用的代理主机,如果有的话
$proxy_port
使用的代理主机端口,如果有的话
$agent
用户代理伪装 (Snoopy v0.1)
$referer
来路信息,如果有的话
$cookies
cookies, 如果有的话
$rawheaders
其他的头信息, 如果有的话
$maxredirs
最大重定向次数, 0=不允许 (5)
$offsiteok
whether or not to allow redirects off-site. (true)
$expandlinks
是否将链接都补全为完整地址 (true)
$user
认证用户名, 如果有的话
$pass
认证用户名, 如果有的话
$accept
http 接受类型 (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$error
哪里报错, 如果有的话
$response_code
从服务器返回的响应代码
$headers
从服务器返回的头信息
$maxlength
最长返回数据长度
$read_timeout
读取操作超时 (requires PHP 4 Beta 4+),设置为0为没有超时
$timed_out
如果一次读取操作超时了,本属性返回 true (requires PHP 4 Beta 4+)
$maxframes
允许追踪的框架最大数量
$status
抓取的http的状态
$temp_dir
网页服务器能够写入的临时文件目录 (/tmp)
$curl_path
cURL binary 的目录, 如果没有cURL binary就设置为 false

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429759-1-1.html 上篇帖子: [PHP][thinkphp5] 学习一:增删改查 下篇帖子: PHP语句【变量、运算符表达式、语句】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表