最近我编辑了一个程序抓取某平台的用户的新信息并将其以邮件的形式发送。与普通的抓取页面信息不同的是,此程序涉及到了模拟登陆的过程。
技术:php的curl扩展和smtp/mime 发送邮件
难点说明:1.模拟登陆对于cookie的处理是将其存在一个文件中,页面跳转抓取信息时用来当通信证,程序结束时再删除该文件。
$cookie= dirname(__FILE__).'/cookie_inbound.txt'; //文件的绝对路径下建立新文件存储cookie
curl_setopt($curl, CURLOPT_COOKIEJAR,$cookie);
抓取信息时:
curl_setopt($curl, CURLOPT_COOKIEFILE,$cookie); //此语句读取存储cookie的文件信息用来跳转页面抓取信息
但是,当使用此方式时打印页面结果总是说“请重新登陆”,检查模拟登陆结果显示登陆成功。
怀疑是cookie不正确,或者平台虽然给了cookie但是没有存储该cookie。
解决方法:通过浏览器登陆平台,F12查看页面信息。Net -> ALL -> Request Headers -> cookie -> ???
"???"的详细内容为 ???-?????-enable=?; ???_???=???; PHPSESSID=67jfs8ofb5bs234b3a2p4ool94
抓取信息时直接设置cookie:$ckie = "PHPSESSID=".$cookie(提取的id信息)
curl_setopt($curl, CURLOPT_COOKIE,$ckie);
这样就可以任意跳转页面抓取信息了。
2.通过url地址抓取相应的信息,但是此平台使用了ajax异步加载信息。所以无法抓取到有用的信息。
解决方法:F12查看加载页面时有哪些请求,url地址变成相应url请求加cookie,通过模仿请求给js相应的参数得到信息。
3.页面信息抓取得是带有html标签的内容:用到的技术有preg_match_all()和strip_tags()。
匹配所有符合的信息和去掉标签。匹配模式中的“.*?”代表匹配尽可能少的任意字符。
技术:php的curl扩展和smtp/mime 发送邮件
难点说明:1.模拟登陆对于cookie的处理是将其存在一个文件中,页面跳转抓取信息时用来当通信证,程序结束时再删除该文件。
$cookie= dirname(__FILE__).'/cookie_inbound.txt'; //文件的绝对路径下建立新文件存储cookie
curl_setopt($curl, CURLOPT_COOKIEJAR,$cookie);
抓取信息时:
curl_setopt($curl, CURLOPT_COOKIEFILE,$cookie); //此语句读取存储cookie的文件信息用来跳转页面抓取信息
但是,当使用此方式时打印页面结果总是说“请重新登陆”,检查模拟登陆结果显示登陆成功。
怀疑是cookie不正确,或者平台虽然给了cookie但是没有存储该cookie。
解决方法:通过浏览器登陆平台,F12查看页面信息。Net -> ALL -> Request Headers -> cookie -> ???
"???"的详细内容为 ???-?????-enable=?; ???_???=???; PHPSESSID=67jfs8ofb5bs234b3a2p4ool94
抓取信息时直接设置cookie:$ckie = "PHPSESSID=".$cookie(提取的id信息)
curl_setopt($curl, CURLOPT_COOKIE,$ckie);
这样就可以任意跳转页面抓取信息了。
2.通过url地址抓取相应的信息,但是此平台使用了ajax异步加载信息。所以无法抓取到有用的信息。
解决方法:F12查看加载页面时有哪些请求,url地址变成相应url请求加cookie,通过模仿请求给js相应的参数得到信息。
3.页面信息抓取得是带有html标签的内容:用到的技术有preg_match_all()和strip_tags()。
匹配所有符合的信息和去掉标签。匹配模式中的“.*?”代表匹配尽可能少的任意字符。