PHP爬虫 爬取污染数据实例

PHP爬虫 爬取污染数据实例

标签(空格分隔): PHP HTML 爬虫


抓取的目标页面 http://www.pm25.com/city/shenzhen.html

抓取后输出的Json数组:
http://1.enigma2015.sinaapp.com/WebBots/lib/data2json.php
检查Json格式是否正确:http://web.chacuo.net/formatjson

可以被正常解析,格式无误。
思路:
1.获取页面
2.从页面提取出需要的值
3.为不同类型的值分别创建数组,并将获得的值按顺序依次填入相应数组
4.新建字符串,利用PHP的拼接符“.”将各个数组和自定义字符串拼接成合法Json字符串
5.输出字符串

开始!
我们先打开目标网页,确定我们需要抓取的数据。
这里我希望抓取的数据有:监测站点位置,AQI值,空气质量,PM2.5的值,和PM10的值。
然后用浏览器看源代码(“审查元素”),找到这些数据所在的代码块。观察其专属的标签属性。
不难发现:
所有的“监测站点”都放在了标签内
所有的“空气质量”都放在了标签内
所有的“AQI”值,PM2.5,PM10都放在了标签内
如下所示:

荔园

39
25 μg/m³
39 μg/m³

想要抓取和解析的话,需要用到LIB_parse.php 解析库和 LIB_http.php PHP/CURL库

这里用到的函数有:
http_get 获取页面
parse_array 根据首末字符串截取出字符串,返回数组
remove 根据首末字符串删除字符串,返回字符串
implode 将数组转换为字符串
关键步骤:
找到所需数据所在标签的共同点
找到冗余标签的共同点
合理分块 再分别处理
具体步骤如下:

");
for($xx=0; $xx");
//获取所有带有pjadt_location属性的a标签,存入数组
$str_location = parse_array($web_page['FILE'], "");
//将数组转换为字符串
$str_location1 = implode($str_location);
//移除无用属性
$str_location2 = remove($str_location1, "class=\"pjadt_location\" h", "数据\"");
//找到字符串中所有a标签 存入location数组
$location = parse_array($str_location2, "");
//移除标签 保留文本、数据
for($xx=0; $xx<11; $xx++){
$location_real[$xx] = remove($location[$xx], "<", ">");
}
$str_quality = parse_array($web_page['FILE'], "");
$str_quality1 = implode($str_quality);
$str_quality2 = remove($str_quality1, "class=\"pjadt_quality", "_1\"");
$quality_temp = parse_array($str_quality2, "");
//移除标签 保留文本、数据
for($xx=0; $xx<11; $xx++){
$quality[$xx] = remove($quality_temp[$xx], "<", ">");
}
$str0 = implode($span_tag_array);
$str1 = remove($str0, "");
$str2 = remove($str1, "PM1", "span>");
$str3 = remove($str2, "PM2", "span>");
$stri = remove($str3, "");
$aqi_temp = parse_array($stri, "","span>");
for($xx=0; $xx<11; $xx++){
$aqi[$xx] = remove($aqi_temp[$xx], "<", ">");
}
$pm25_temp = parse_array($stri, "");
for($xx=0; $xx<11; $xx++){
$pm25[$xx] = remove($pm25_temp[$xx], "<", ">");
}
$pm10_temp = parse_array($stri, "");
for($xx=0; $xx<11; $xx++){
$pm10[$xx] = remove($pm10_temp[$xx], "<", ">");
}
for($xx=0; $xxrunSql($sql);    
      }
      //数据库反馈是否成功录入信息
      if($mysql->errno() != 0 )
     {
        echo "
录入失败
"; die( "错误:
" . $mysql->errmsg() ); } else { echo "
数据录入成功!
"; } $mysql->closeDb(); ?>

参考资料:《Webbots、Spiders和Screen Scrapers技术解析与应用实践》

你可能感兴趣的:(实例)