PHP抓取网络数据
2024-09-19 10:22:49
涉及到的知识点不多
file_get_contents:读取数据;
preg_match_all:正则匹配;
和匹配之后的数据分析。
不同网页所需要抓取的数据是不同的,所以正则表达式自然也不一样,针对抓取之后的数据的分析处理方式也不同。
用新浪的nba新闻为例,地址:http://roll.sports.sina.com.cn/s_2002-2003NBA_all/index.shtml
- 列表页面
第一步,分析这个页面的源码,找到需要匹配的标题的正则
列表页面的代码如下:
<?php
$con = file_get_contents ( "http://roll.sports.sina.com.cn/s_2002-2003NBA_all/index.shtml" );
// echo $con;
$preg = '#<a href="(.*)" target="_blank">(.*)</a></span><span class="c_time">(.*)</span></li>#iUs';
preg_match_all ( $preg, $con, $arr );
// var_dump($arr);
echo '<pre>';
$index=0;
foreach ( $arr[1] as $key => $value ) {
//var_dump($value);//★这里是一些分析$arr的过程,分析之后可以知道$arr[1]、$arr[2]、$arr[3]分别是链接地址、标题文字内容、新闻日期时间
//echo $value."<br>";//★ echo (++$index).'.<a href="'.$value.'">'.$arr[2][$key].'</a><br>';//★注意这里的$arr[2][$key]就是标题内容,而href中的则是链接地址 } echo '</pre>';
页面分析如图:
- 详细页面
之后是详细页面,同样随便找一条新闻的页面查看源码,分析新闻的标题以及具体内容的正则匹配:
代码如下:
<?php
//$con = file_get_contents ( "http://sports.sina.com.cn/nba/2013-08-29/12136747450.shtml" );
$con = file_get_contents ( $_GET["url"] ); $preg = '#<h1 id="artibodyTitle">(.*)</h1>#iUs';//标题的正则匹配
$arr= preg($preg, $con);
echo '<pre>';
foreach ($arr[0] as $key=>$value){
echo $value."<br>";
} $pregContent="#<!-- 正文内容 begin -->(.*)<!-- 正文内容 end -->#iUs";//内容的正则匹配
$arrContent= preg($pregContent, $con); foreach ($arrContent[0] as $key=>$value){
echo $value;
} echo '</pre>'; function preg($preg, $con) {
preg_match_all ( $preg, $con, $arr );
return $arr;
}
页面分析如图:
- 页面整合
最后一步整理,目的是自己处理之后的列表页直接跳转到对应的处理之后的详细页面,改动只有两个地方:1.列表页面最后echo的链接地址的href值 2 详细页面使用$_GET读取链接参数
最终代码如下:
1.列表页面
<?php
$con = file_get_contents ( "http://roll.sports.sina.com.cn/s_2002-2003NBA_all/index.shtml" );
// echo $con;
$preg = '#<a href="(.*)" target="_blank">(.*)</a></span><span class="c_time">(.*)</span></li>#iUs';
preg_match_all ( $preg, $con, $arr );
// var_dump($arr);
echo '<pre>';
$index=0;
foreach ( $arr[1] as $key => $value ) {
//var_dump($value);//★
//echo $value."<br>";//★ //echo (++$index).'.<a href="'.$value.'">'.$arr[2][$key].'</a><br>';//★
echo (++$index).'.<a href=20130829.catchDataInfo.php?url='.$value.'>'.$arr[2][$key].'</a><br>';//★链接到本地的详细页面,并且配置上url参数 } echo '</pre>';
2.详细页面
<?php
//$con = file_get_contents ( "http://sports.sina.com.cn/nba/2013-08-29/12136747450.shtml" );
$con = file_get_contents ( $_GET["url"] );//读取链接参数 $preg = '#<h1 id="artibodyTitle">(.*)</h1>#iUs';//标题的正则匹配
$arr= preg($preg, $con);
echo '<pre>';
foreach ($arr[0] as $key=>$value){
echo $value."<br>";
} $pregContent="#<!-- 正文内容 begin -->(.*)<!-- 正文内容 end -->#iUs";//内容的正则匹配
$arrContent= preg($pregContent, $con); foreach ($arrContent[0] as $key=>$value){
echo $value;
} echo '</pre>'; function preg($preg, $con) {
preg_match_all ( $preg, $con, $arr );
return $arr;
}
最新文章
- Quart.NET实施参考
- WebApi接口传参不再困惑(4):传参详解(转载)
- 在JSP中上传图片到数据库中
- OpenCv椭圆皮肤模型
- 修改远程桌面端口号.bat
- 给用户添加sudo权限
- 使用post方式提交数据
- web开发基础(同步更新中)
- visual studio 2013 使用IIS Express附加调试MVC5
- html 浮动元素
- jquery左右自适应伸缩插件
- 敏捷开发用户故事系列之十一:CSDN博客用户故事分析
- [Elasticsearch] 控制相关性 (一) - 后面的相关度分值理论计算
- InstallShield -6109
- 微信小程序之微信登陆 —— 微信小程序教程系列(20)
- c#之AES加密解密
- Main Steps to Setup an ODI data sync
- python3+selenium入门13-操作cookie
- mybatis-高级结果映射之一对一
- 安装配置OSA运维管理平台
热门文章
- Android 架构 2.界面
- SeaJS入门
- [ubuntu Setup] ubuntu 14.10 安装 JDK
- django+celery+redis实现运行定时任务
- CMD一键获取cpu信息
- CentOS7.x 通过mail命令发,使用465端口(smtps协议)发送邮件
- [Python爬虫] 之十九:Selenium +phantomjs 利用 pyquery抓取超级TV网数据
- builder pattern
- ubuntu下wine操作usb串口
- ns3加入模块之vanet-highway