php抓取网页域名(抓取前记得把php.ini中的max_time设置的大点会报错的)
优采云 发布时间: 2022-01-09 17:04php抓取网页域名(抓取前记得把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 fetch($url);
$html = $snoopy->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。
获取文本($URI)
该方法与 fetch() 方法类似,唯一不同的是该方法会移除 HTML 标签和其他不相关的数据,只返回网页中的文本内容。
获取表单($URI)
该方法与 fetch() 方法类似,唯一不同的是该方法会去除 HTML 标签等无关数据,只返回网页中的表单内容(form)。
获取链接($URI)
该方法与 fetch() 类似,唯一的区别是该方法会移除 HTML 标签和其他不相关的数据,只返回网页中的链接。
默认情况下,相对链接将自动完成为完整的 URL。
提交($URI,$formvars)
此方法向 $URL 指定的链接地址发送确认表单。$formvars 是一个存储表单参数的数组。
提交文本($URI,$formvars)
该方法与submit()类似,唯一不同的是该方法会去除HTML标签等无关数据,登录后只返回网页的文本内容。
提交链接($URI)
该方法与 submit() 类似,唯一的区别是该方法会移除 HTML 标签和其他不相关的数据,只返回网页中的链接。
默认情况下,相对链接将自动完成为完整的 URL。
类属性
$主机
连接主机
$端口
连接端口
$proxy_host
使用的代理主机(如果有)
$proxy_port
要使用的代理主机端口(如果有)
$代理
用户代理伪装(史努比 v0.1)
$推荐人
到达信息,如果有的话
$cookies
饼干(如果有)
$原创头文件
其他标题信息(如果有)
$maxredirs
最大重定向数 0 = 不允许 (5)
$offsiteok
是否允许异地重定向。(真的)
$展开链接
是否完成链接到完整地址(true)
$用户
身份验证用户名(如果有)
$通行证
身份验证用户名(如果有)
$接受
http 接受类型(image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$错误
错误在哪里,如果有的话
$response_code
服务器返回的响应码
$标头
从服务器返回的标头
$最大长度
最大返回数据长度
$read_timeout
读取操作超时(需要 PHP 4 Beta 4+)设置为 0 表示无超时
$timed_out
如果读取操作超时,则返回 true(需要 PHP 4 Beta 4+)
$最大帧数
允许跟踪的最大帧数
$状态