[精选] 模拟登陆并抓取数据,用php也是可以做到的

优采云 发布时间: 2022-05-08 11:27

  [精选] 模拟登陆并抓取数据,用php也是可以做到的

  点击加入:

  商务合作请加微信(QQ):2230304070

  精选文章正文

  服务器活动推荐:【腾讯云12月份服务器限时秒杀活动,最低99元】活动地址:

  使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据。具体实现的流程如下

  1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息:

  1)登录页面的地址;

  2)验证码的地址;

  3)登录表单需要提交的各个字段的名称和提交方式;

  4)登录表单提交的地址;

  5)另外要需要知道要抓取的数据所在的地址。

  2. 获取cookie并存储(针对使用cookie文件的网站)

  $login_url = 'http://www.xxxxx';  //登录页面地址<br />$cookie_file = dirname(__FILE__)."/pic.cookie";  //cookie文件存放位置(自定义)<br />$ch = curl_init();<br />curl_setopt($ch, CURLOPT_URL, $login_url);<br />curl_setopt($ch, CURLOPT_HEADER, 0);<br />curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);<br />curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);<br />curl_exec($ch);<br />curl_close($ch);<br />

  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人工客服


线