使用Snoopy进行模拟登陆、采集

Snoopy是一个使用PHP写的采集类,使用了一下发现功能比较强大,几乎可以模拟浏览器的所有行为,可以实现的功能有:

比起使用curl,fsockopen等函数来说方便很多,下面总结一下这个类一些属性与方法的作用。

方法:

fetch($url) 该方法用于抓取网页内容,类似于file_get_contents
    submit($posturl,$params,$files)
该方法提交表单数据,第二个参数是一个一维数组,例如array(‘user‘=>‘zhangsan‘,‘pwd‘=>‘lisi‘),第
三个参数是可选参数,上传文件时用到,例如array(‘myfile‘ => ‘./images/test.jpg‘)
    fetchlinks($url) 该方法用于获取网页所有链接
    fetchform($url) 该方法用于获取网页上的form表单内容
    fetchtext($url) 该方法用户获取不带标签的网页内容
    submitlinks($posturl,$params) 该方法提交表单数据参数与submit方法相同,不同点是获取到的结果数据是链接
    submittext($posturl,$params) 该方法提交表单数据参数与submit方法相同,不同点是获取到的结果数据是文本数据
    set_submit_multipart() 该方法没有参数,文件上传时有效类似于设置表单中的enctype="multipart/form-data"
    set_submit_normal() 该方法没有参数,相当于设置一个普通表单,不可用户文件
    setcookies() 该方法没有参数,保存响应cookie信息 用于下一次请求

常用属性:

$obj->agent = ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.25) Gecko/20111212 Firefox/3.6.25‘;//伪装浏览器
    $obj->rawheaders[‘Cookie‘] = ‘username=zhangsan;password=123456‘;//伪装cookie不能与$obj->cookies同时使用
    $obj->rawheaders[‘X_FORWARDED_FOR‘] = ‘115.47.134.108‘; //伪造IP
    $obj->referer = ‘http://www.com133.com/‘; //伪造来源地址
    $obj->cookies[‘test‘] = ‘zhangsan‘; //伪装cookie 不能与$obj->rawheaders[‘Cookie‘]同时使用
    $obj->results 获取采集结果

下面给出示例代码供参考

  1. <?php
  2. include ‘./Snoopy.class.php‘;
  3. $obj = new Snoopy();
  4. $obj->agent = ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.25) Gecko/20111212 Firefox/3.6.25‘;//伪装浏览器
  5. $obj->rawheaders[‘Cookie‘] = ‘username=zhangsan;password=123456‘;//伪装cookie不能与$obj->cookies同时使用
  6. $obj->referer = ‘http://www.com133.com/‘; //伪造来源地址
  7. //$obj->cookies[‘test‘] = ‘zhangsan‘; //伪装cookie 不能与$obj->rawheaders[‘Cookie‘]同时使用
  8. //POST 数据
  9. $params[‘username‘] = ‘zhangsan‘;
  10. $params[‘password‘] = ‘123456‘;
  11. //上传文件
  12. $obj->set_submit_multipart();
  13. $files = array(‘f‘ => ‘./test.php‘);
  14. $posturl = ‘http://www.lmblog.com/snoopy/test.php‘;
  15. //$obj->fetch($posturl);//抓取网页内容 get方式
  16. //模拟表单提交
  17. $obj->submit($posturl,$params,$files);//第三个参数是可选参数,如果不上传文件无需该参数
  18. //$obj->submitlinks($posturl,$params);//获取提交或的链接
  19. $obj->setcookies();//保存响应cookie信息 用于下一次请求
  20. print_r($obj->results);//获取结果
  21. ?>

Snoopy类及演示文件下载

时间: 2024-10-14 10:45:14

使用Snoopy进行模拟登陆、采集的相关文章

PHP实现curl和snoopy类模拟登陆方法

Snoopy.class.php下载 方法/步骤 第一种:使用snoopy类实现模拟登陆 1.在网上下载一个Snoopy.class.php的文件   2.代码实现: <?php set_time_limit(0); require "Snoopy.class.php"; $snoopy=new Snoopy(); $snoopy->referer='你要模拟登陆的域名';//例如:http://www.baidu.com/ $snoopy->agent="

22.天眼查cookie模拟登陆采集数据

通过账号登录获取cookies,模拟登录(前提有天眼查账号),会员账号可查看5000家,普通只是100家,同时也要设置一定的反爬措施以防账号被封.拿有权限的账号去获取cookies,去访问页面信息,不过这样呢感觉还是不合适,因为之前也采集过都是避开登录和验证码的问题,因为这些数据只是人家网站让不让你拿,该怎样去拿的问题.这里只是简单地做一下测试,实际采集会遇到各种问题的,这里只是个解题思路仅供参考.不然会被检测如图: # coding:utf-8 import requests from lxm

php模拟登陆的两种实现方法分析

php模拟登陆的实现方法分析 本文实例分析了php模拟登陆的实现方法.分享给大家供大家参考.具体分析如下: php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网.具体实例代码如下: 1)使用snoopy模拟登陆: [php] view plaincopy<?php set_time_limit(0); require "Snoopy.class.php"; $snoopy=new Snoopy(); $snoopy->referer='http://www.la

php爬虫(curl) 模拟登陆获取cookie,然后使用cookie查看个人中心

<!-- curl的高级使用 --> <?php //模拟登陆获取cookie保存到电脑 header("content-Type: text/html; charset=UTF-8"); /*$cookie_file = tempnam('d:/', 'cookie');*/ $cookie_file = 'd:/demo.txt'; $login_url="http://www.php-z.com/member.php?mod=logging&a

PHP CURL模拟登陆

通过CURL模拟登录并获取数据,一些网站需要权限认证,必须登录网站后,才能有效地抓取网页并采集内容,这就需要curl来设置cookie完成模拟登录网页,php的curl在抓取网页内容方面效率是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些. 模拟登录的代码如下所示: <?php/* 函数login_post(),需要提供一个url地址,一个保存cookie文件,以及post的数据(用户名和密码等信息),注意php自带的http_build_query()函数可以

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

模拟登陆国内著名知识交流网站

之前看了很长时间的前端相关知识,怕python手生,写个模拟登陆恢复一下 zhihu网上的info有些是需要登陆后才能访问爬去的,所以不妨试一试 1 首先自己登陆,然后用fiddler进行抓包 发现登陆zhihu需要post以下data: A?, 验证码哪去了,算了,没有更好. 下面就要编写代码了,稍等,先看一下zhihu的response resp的类型是json格式,经过检查,msg的值就是我们的登录状态了,所以一会我们会打印出这个值证明是否登录. 2 下面就不多说了,直接上代码 #!/us

模拟登陆、Cookie传递

---恢复内容开始--- 上个月月底把模拟登陆的问题解决了,现在有时间就正好记录并复习一下. 主要使用httpclient 来进行模拟登陆 首先做一个登陆布局  一直以来都是简单拖几个控件 没有啥特效  这次我想使用一点 Material Design设计风格    查了一下 TextInputLayout这个控件  还不错 TextInputLayout 来自于 Android Design Support Library    可以让edittext的hint在用户输入的时候  自动跳到上方

Python——新浪微博爬虫之模拟登陆

在编写微博爬虫的过程中,免不了要进行模拟登录,因为新浪微博不登陆只能访问少量的微博信息. 然而,由于新浪微博的反爬虫功能在不断更新,例如改变了密码的加密算法(RSA),以前的一些模拟登陆方式已经不适用了.所以一开始试了好几种方法,均不能成功.后来受http://www.jb51.net/article/46053.htm启发,已经实现了. 目前,亲测能用的步骤是:①通过预登录,使用GET方法,获得登录所需的servertime, nonce, pubkey, rsakv:②使用encode64加