网页内容抓取 php(抓取前记得把php.ini中的max_time设置的大点不然)
优采云 发布时间: 2021-09-09 18:08网页内容抓取 php(抓取前记得把php.ini中的max_time设置的大点不然)
爬取前记得将php.ini中的max_execution_time设置为较大的值,否则会报错。
一、用 Snoopy.class.php 抓取页面
一个非常可爱的班级名称。功能也非常强大。用于模拟浏览器获取网页内容和发送表单的功能。
1 现在我要抓取网站的一个列表页的内容我要抓取全国各地医院的信息,如下图
2 我自然复制了URL地址,使用Snoopy类抓取前10页的内容放到本地,在本地创建一个html文件进行分析。
$snoopy=new Snoopy();//医院list页面
for($i = 1; $i fetch($url); file_put_contents("web/page/$i.html", $snoopy->results);
} echo 'success';
3 奇怪返回的内容不是国家内容而是上海相关内容
4之后,我怀疑可能是里面设置了cookie,然后用firebug查看。里面的故事真的很精彩
5 当请求中也放入cookie的值时,增加一个设置语句$snoopy->cookies["_area_"]。情况大不相同,国家信息顺利返回。
$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)
这是用来抓取网页内容的方法。
$URI 参数是被抓取网页的 URL 地址。
获取的结果存储在 $this->results 中。
如果您正在抓取一帧,Snoopy 将跟踪每一帧并将其存储在一个数组中,然后将其存储在 $this->results 中。
fetchtext($URI)
这个方法类似于fetch()。唯一不同的是,该方法会去除HTML标签等无关数据,只返回网页中的文本内容。
fetchform($URI)
这个方法类似于fetch()。唯一不同的是,该方法会去除HTML标签等无关数据,只返回网页中的表单内容(form)。
fetchlinks($URI)
这个方法类似于fetch()。唯一不同的是,该方法会去除HTML标签等无关数据,只返回网页中的链接。
默认情况下,相对链接会自动补全并转换成完整的网址。
提交($URI,$formvars)
此方法向$URL 指定的链接地址发送确认表单。 $formvars 是一个存储表单参数的数组。
提交文本($URI,$formvars)
这个方法类似于submit()。唯一不同的是,该方法会去除HTML标签等无关数据,仅在登录后返回网页中的文本内容。
提交链接($URI)
这个方法类似于submit()。唯一不同的是,该方法会去除HTML标签等无关数据,只返回网页中的链接。
默认情况下,相对链接会自动补全并转换成完整的网址。
类属性
$host
连接的主机
$端口
连接端口
$proxy_host
使用的代理主机(如果有)
$proxy_port
使用的代理主机端口(如果有)
$代理
用户代理伪装(史努比 v0.1)
$referer
访问信息(如果有)
$cookies
cookies(如果有)
$rawheaders
其他标题信息,如果有的话
$maxredirs
最大重定向次数 0=不允许 (5)
$offsiteok
是否允许异地重定向。 (真实)
$expandlinks
是否补全链接地址(真)
$用户
经过身份验证的用户名(如果有)
$pass
经过身份验证的用户名(如果有)
$接受
http 接受类型 (p_w_picpath/gif, p_w_picpath/x-xbitmap, p_w_picpath/jpeg, p_w_picpath/pjpeg, */*)
$错误
在哪里报告错误,如果有的话
$response_code
服务器返回的响应码
$headers
服务器返回的头部信息
$maxlength
最长返回数据长度
$read_timeout
读取操作超时(需要 PHP 4 Beta 4+)设置为 0 表示没有超时
$timed_out
如果读取操作超时,该属性返回 true(需要 PHP 4 Beta 4+)
$maxframes
允许跟踪的最大帧数
$状态