php实战开发网络爬虫,实现采集功能
php实现实时获取当天天气小工具
//获取天气预报网站的网页内容
$html = file_get_contents("http://www.weather.com.cn/weather1d/101210101.shtml");
//正则表达式
$reg = '#hour3data.+?\[".+?,.+?,(?<tianqi>.+?),(?<wendu>.+?),#';
//如果匹配成功,就输出温度相关的信息
if(preg_match($reg, $html, $mat)){
echo "今天".$mat['tianqi'].",温度".$mat['wendu'];
}
从起点网采集指定的小说章节保存到txt文件
$url = "http://read.qidian.com/chapter/e3dzHPdshCDbhZU9AFSCzA2/JRRO4JeEqtFp4rPq4Fd4KQ2";
$html = file_get_contents($url);
$reg = '#<title>(?<title>.+?)</title>[\s\S]+?<div class="read-content j_readContent">(?<content>[\s\S]*?)</div>#';
if(preg_match($reg, $html, $mat)){
//print_r($mat);
$mat['content'] = preg_replace("#<.*?>#","\r\n",$mat['content']);
echo $mat['title']."\n\n\n\n".$mat['content'];
file_put_contents($mat['title'].".txt",$mat['content']);
}
根据qq号获取昵称和头像
要求:根据qq账号,在网页中显示出对应的昵称和用户头像。
提示:通过这个地址可以获取到相关信息 http://r.pengyou.com/fcg-bin/cgi_get_portrait.fcg?uins=841116165
提示:此处显示图片有小坑。搜索关键词 “防盗链”
$url = "http://r.pengyou.com/fcg-bin/cgi_get_portrait.fcg?uins=841116165";
$html = file_get_contents($url);
$reg = '#.+?\["(.+?)",.+?,.+?,.+?,.+?,.+?,"(.+?)"#';
if(preg_match($reg, $html, $mat)){
//由于防盗链,无法直接使用腾讯的头像链接,所以要先下载到本地
file_put_contents("1.jpg",file_get_contents($mat[1]));
echo "<img src='./1.jpg' />".$mat[2];
}
根据ip获取地址信息(作业)
用户输入一个ip地址,显示这个ip的地理位置信息。
提示:通过后面的地址即可获取到地址信息 http://ip.chinaz.com/36.24.128.67
答案:
$ip = "36.84.128.67";
$html = file_get_contents("http://ip.chinaz.com/".$ip);
$regex = '#<p class="WhwtdWrap bor-b1s col-gray03">[\s\S]+?<span class="Whwtdhalf w50-0">(.+?)</span>[\s\S]+?</p>#';
if(preg_match($regex, $html, $mat)){
echo $mat[1];
}
php获取最近7天天气预报信息(作业)
从起点采集一本指定的小说所有的章节内容,合并到一个txt文件。(作业)
提示:先采集列表的url,再循环采集每个章节的内容,追加到文件中。
//ini_set('max_execution_time','0');
$html = file_get_contents("http://book.qidian.com/info/1004608738");
$regex = '#<li data-rid="\d+?"><a href="(.+?)"[\s\S]+?>(.+?)</a>[\s\S]+?</li>#';
if(preg_match_all($regex, $html, $mats)){
foreach($mats[1] as $k => $v){
$html1 = file_get_contents("http:".$v);
$regex1 = '#<div class="read-content j_readContent">([\s\S]+?)</div>#';
//匹配内容
if(preg_match($regex1, $html1, $mat)){
$mat[1] = preg_replace('#<.+?>|\s+?#', "",$mat[1]);
$content = "\r\n".$mats[2][$k]."\r\n".$mat[1];
file_put_contents("1.txt", $content, FILE_APPEND);
} else {
echo "内容没有匹配成功";
}
echo $mats[2][$k]."\n";
}
}