[精选]PHP是如何模拟用户登录并抓取数据的
优采云 发布时间: 2022-09-11 10:46[精选]PHP是如何模拟用户登录并抓取数据的
点击加入:
商务合作:请加微信(QQ):2230304070
技术交流微信群
我们在学习中单*敏*感*词*匹马,还不如一次短短的交流,你可以在别人吸取各种学习经验,学习方法以及学习技巧,所以,学习与交流少不了一个圈子,提升你的学习技能,请点击加技术群:IT技术交流微信群
<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><p style="max-width: 100%;min-height: 1em;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />
视频教程分享</p>
1 2小时教你轻松搞定支付宝、微信扫码支付 <br />公众号里回复:20191108 <br /> <br />2 ThinkPHP6.0极速入门 <br />公众号里回复:20190923 <br /><br />3 Linux编程Shell从入门到精通视频教程(完整版) <br />公众号里回复:shell0915<br /> <br />4 亿级pv多级缓存并发架构案例分析<br />链接:http://www.mano100.cn/thread-1691-1-1.html<br /><br />5 PHP性能优化-协程在高并发场景下的应用<br />链接:http://www.mano100.cn/thread-1693-1-1.html<br /><br />6 PHP实现大型电商平台团购功能的开发<br />链接:http://www.mano100.cn/thread-1692-1-1.html
<br />
精选文章正文
模拟登陆经常会遇到吧,但是你是如何模拟的呢?我们可以使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。
具体实现的流程如下
1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:
(1)登录页面的地址;
(2)验证码的地址;
(3)登录表单需要提交的各个字段的名称和提交方式;
(4)登录表单提交的地址;
(5)另外要需要知道要抓取的数据所在的地址。
2. 获取cookie并存储(针对使用cookie文件的网站):
3. 获取验证码并存储(针对使用验证码的网站):
$verify_url = "http://www.xxxx"; //验证码地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $verify_url);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br />$verify_img = curl_exec($ch);<br />curl_close($ch);<br />$fp = fopen("./verify/verifyCode.png",'w'); //把抓取到的图片文件写入本地图片文件保存<br />fwrite($fp, $verify_img);<br />fclose($fp);<br />
由于不能实现验证码的识别,所以我这里的做法是,把验证码图片抓取下来存放到本地文件中,然后在自己项目中的html页面中显示,让用户去填写,等用户填写完账号、密码和验证码,并点击提交按钮之后再去进行下一步的操作。
4. 模拟提交登录表单:
$ post_url = 'http://www.xxxx'; //登录表单提交地址<br />$post = "username=$account&password=$password&seccodeverify=$verifyCode";//表单提交的数据(根据表单字段名和用户输入决定)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $ post_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //提交方式为post<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />
5. 抓取数据:
$data_url = "http://www.xxxx"; //数据所在地址<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $data_url);<br />curl_setopt($ch, CURLOPT_HEADER, false);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);<br />curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);<br />$data = curl_exec($ch);<br />curl_close($ch);<br />
到目前为止,已经把数据所在地址的这个页面都抓取下来存储在字符串变量$data中了。
需要注意的是抓取下来的是一个网页的html源代码,也就是说这个字符串中不仅包含了你想要的数据,还包含了许多的html标签等你不想要的东西。所以如果你想要从中提取出你需要的数据的话,你还要对存放数据的页面的html代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。