php 网页内容抓取(做抓取前,记得把php.ini中的max_execution)
优采云 发布时间: 2022-01-04 09:14php 网页内容抓取(做抓取前,记得把php.ini中的max_execution)
爬取前记得将php.ini中的max_execution_time设置为较大的值,否则会报错。
一、使用Snoopy.class.php抓取页面
一个非常可爱的班级名称。功能也很强大,用来模拟浏览器的功能,可以获取网页内容,发送表单等等。
1)现在我要抓取网站的一个列表页的内容,我要抓取的是全国医院信息的内容,如下图:
2)我自然是复制URL地址,使用Snoopy类抓取前10页的内容,并将内容放到本地,在本地创建一个html文件,稍后分析使用。<//p
ppre$snoopy=new Snoopy();
//医院list页面
for($i = 1; $i = 10; $i++) {
$url = 'http://www.guahao.com/hospital/areahospitals?p=全国&pageNo=' . $i;
$snoopy-fetch($url);
file_put_contents("web/page/$i.html", $snoopy->results);
}
echo 'success';
3)奇怪的是,返回的内容不是国家内容,而是上海相关内容
4)怀疑里面可能设置了cookie,然后用firebug查看了一下,果然有惊天动地的内幕
5)在请求中放入cookie的值,并添加设置语句$snoopy->cookies["_area_"],情况大不相同,顺利返回国家信息。<//p
ppre$snoopy=new Snoopy();
//医院list页面
$snoopy->cookies["_area_"] = '{"provinceId":"all","provinceName":"全国","cityId":"all","cityName":"不限"}';
for($i = 1; $i results;
}
2)使用phpQuery获取节点信息,如下DOM结构所示:
使用一些phpQuery方法,结合DOM结构读取各个医院信息的URL地址。
for($i = 1; $i attr('href')); //医院详情
}
}
3)根据读取到的URL地址列表,抓取指定页面。
$detailIndex = 1;
for($i = 1; $i results);
$detailIndex++;
}
}
FQ 工具下载:
克服障碍.rar
演示下载:
史努比类的一些说明:
类方法
获取($URI)