博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP通过读取DOM抓取信息
阅读量:6497 次
发布时间:2019-06-24

本文共 2002 字,大约阅读时间需要 6 分钟。

hot3.png

    今天突发奇想,想是一下抓取网页的信息,然后我学院网站的老师的信息就成为了我的目标了。

    顺便打一下广告,我学院(华南农业大学信息学院)的教师的网址是:http://info.scau.edu.cn/nav-contact.asp

    我新建了一个PHP项目,HtmlCatcher,里面包括三个文件Teacher.php(老师的实体),index.php(进口),view.php(页面)。

Teacher.php的代码如下:

getElementsByTagName('td'); if($cells_list->length != 5) { return null; } $teacher = new Teacher(); foreach ($cells_list as $cell) { $div_list = $cell->getElementsByTagName('div'); $div = $div_list->item(0); $class = $div->getAttribute('class'); if (strpos($class, 'ofc') !== false) { $teacher->office = $div->nodeValue; } else if (strpos($class, 'name') !== false) { $teacher->name = $div->nodeValue; } else if (strpos($class, 'type') !== false) { $teacher->position = $div->nodeValue; } else if (strpos($class, 'max-col') !== false) { $teacher->email = $div->nodeValue; } else { $teacher->phone = $div->nodeValue; } } return $teacher; } } ?>
老师的实体类,包括了老师的职位、姓名、办公电话、邮箱、办公室。

parse方法是解析一个DOM节点,把里面属于老师的信息整理出来,如果符合要求的话,返回一个Teacher,否则返回null。

index.php代码如下:

loadHTMLFile($url); $htmlDoc->normalizeDocument(); $tables_list = $htmlDoc->getElementsByTagName('table'); $arr = Array(); $table = $tables_list->item(0); $rows_list = $table->getElementsByTagName('tr'); foreach ($rows_list as $row) { $teacher = Teacher::parse($row); if(!is_null($teacher)) { $teacherName = $_GET['name']; if (is_null($teacherName)) { array_push($arr, $teacher); } else { if ($teacher->name == $teacherName) { array_push($arr, $teacher); break; } } } } include_once(ROOT.DS."view.php"); ?>
首先读取网站的DOM,然后获取table标签,table标签,再从中提取tbody标签,然后获取所有tr标签,解析成一个Teacher的数组$arr。

view.php代码:

	信息学院教师信息	
office." ".$teacher->phone ." ".$teacher->name." ".$teacher->position .$teacher->email; echo "
"; } ?>
显示$arr中的Teacher的信息。

显示结果如下

到此完毕。。。。

转载于:https://my.oschina.net/zlLeaf/blog/161244

你可能感兴趣的文章
(译)OpenGL ES2.0 – Iphone开发指引
查看>>
@RestController 与 @RequestMapping
查看>>
黑马程序员.bobo.DAY.1
查看>>
Unity shader 官网文档全方位学习(二)
查看>>
pbrun
查看>>
浏览器加载和渲染网页顺序
查看>>
微服务架构springcloud
查看>>
深入剖析Android系统试读样章
查看>>
测试用例出错重跑--flaky插件
查看>>
yaf的安装
查看>>
比较java与C++的不同
查看>>
Twitter Storm入门
查看>>
使用scikit-learn进行文本分类
查看>>
Ansible自动化运维配置与应用(结合实例)
查看>>
下面简要介绍软件工程的七条原理
查看>>
java POI实现excel实现表格导出
查看>>
Lua(三)——语句
查看>>
TensorFlow的基本运算01
查看>>
怎么看电脑有没有安装USB3.0驱动
查看>>
overflow清除浮动的原理
查看>>