[精选]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代码进行分析,然后结合字符串操作函数、正则匹配等方法从中提取出你想要的数据。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线