PHP抓取网络数据

涉及到的知识点不多

file_get_contents:读取数据;

preg_match_all:正则匹配;

和匹配之后的数据分析。

不同网页所需要抓取的数据是不同的,所以正则表达式自然也不一样,针对抓取之后的数据的分析处理方式也不同。

用新浪的nba新闻为例,地址:http://roll.sports.sina.com.cn/s_2002-2003NBA_all/index.shtml

列表页面

详细页面

页面整合

  • 列表页面

第一步,分析这个页面的源码,找到需要匹配的标题的正则

PHP抓取网络数据_第1张图片

列表页面的代码如下:

php
$con = file_get_contents ( "http://roll.sports.sina.com.cn/s_2002-2003NBA_all/index.shtml" );
// echo $con;
$preg = '#(.*)(.*)#iUs';
preg_match_all ( $preg, $con, $arr );
// var_dump($arr);
echo '
';
$index=0;
foreach ( $arr[1] as $key => $value ) {
    //var_dump($value);//★这里是一些分析$arr的过程,分析之后可以知道$arr[1]、$arr[2]、$arr[3]分别是链接地址、标题文字内容、新闻日期时间
    //echo $value."
";//★
echo (++$index).'.$value.'">'.$arr[2][$key].'
';//★注意这里的$arr[2][$key]就是标题内容,而href中的则是链接地址 } echo '
';

 

 页面分析如图:

PHP抓取网络数据_第2张图片

  • 详细页面

之后是详细页面,同样随便找一条新闻的页面查看源码,分析新闻的标题以及具体内容的正则匹配:

PHP抓取网络数据_第3张图片

代码如下:

php
//$con = file_get_contents ( "http://sports.sina.com.cn/nba/2013-08-29/12136747450.shtml" );
$con = file_get_contents ( $_GET["url"] );

$preg = '#

(.*)

#iUs';//标题的正则匹配 $arr= preg($preg, $con); echo '
';
foreach ($arr[0] as $key=>$value){
    echo $value."
"; } $pregContent="#(.*)#iUs";//内容的正则匹配 $arrContent= preg($pregContent, $con); foreach ($arrContent[0] as $key=>$value){ echo $value; } echo '
'; function preg($preg, $con) { preg_match_all ( $preg, $con, $arr ); return $arr; }

 

 页面分析如图:

PHP抓取网络数据_第4张图片

  • 页面整合

最后一步整理,目的是自己处理之后的列表页直接跳转到对应的处理之后的详细页面,改动只有两个地方: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 = '#(.*)(.*)#iUs';
preg_match_all ( $preg, $con, $arr );
// var_dump($arr);
echo '
';
$index=0;
foreach ( $arr[1] as $key => $value ) {
    //var_dump($value);//★
    //echo $value."
";//★ //echo (++$index).'.'.$arr[2][$key].'
';//★
echo (++$index).'.$value.'>'.$arr[2][$key].'
';//★链接到本地的详细页面,并且配置上url参数 } echo '
';

 

2.详细页面

php
//$con = file_get_contents ( "http://sports.sina.com.cn/nba/2013-08-29/12136747450.shtml" );
$con = file_get_contents ( $_GET["url"] );//读取链接参数

$preg = '#

(.*)

#iUs';//标题的正则匹配 $arr= preg($preg, $con); echo '
';
foreach ($arr[0] as $key=>$value){
    echo $value."
"; } $pregContent="#(.*)#iUs";//内容的正则匹配 $arrContent= preg($pregContent, $con); foreach ($arrContent[0] as $key=>$value){ echo $value; } echo '
'; function preg($preg, $con) { preg_match_all ( $preg, $con, $arr ); return $arr; }

 

转载于:https://www.cnblogs.com/xtechnet/p/3290656.html

你可能感兴趣的:(PHP抓取网络数据)