zoukankan      html  css  js  c++  java
  • 【phantomJs + selenium】动态cookie,数据采集记录

    这是工作中遇到的网站,算是自己遇到的一个新的类型.

    需要动态获取并传递cookie. 

    脚本中使用了selenium+phantomJs

    1. 最开始发现所有菜单中的数据都在同一个页面中,并且有效数据均有id特定包裹。并且,一个页面中涵盖了所有menu里面的模块,使用display切换。十分的友好....

      

      

            2.以id写完数据分析之后,入库测试。全为空值,再看network发现是该网站是用post请求返回的json数据。(这告诉我们以后要看准了在写啊, 很讨厌自己这个习惯.真的)

      3.目前看来,是在切换标签的时候,发送不同的post请求,获取json串。所以拿到json就很棒棒啦。

      4.构造了post请求,过程不赘述....因为..拿到的全是空值,它是假的=-=,最开始查看的例子是本来就没有这几个消息的所以没有过多的注意。

      5.最后盯紧了基本信息的post请求,发现所有的数据都在里面......其url=......./jbxx/qy/3702022814467?0.6979724272361008

      6.最后的字符串是类似id一样的东西,在页面中可以获取得到

      

      7.?后面get的参数..阅读源码发现是随机数

      

      本来想绕过,直接执行rendergtaic()函数,但是aicinfo是个全局变量,所以只有好好的构造数据包啦  

      利用js生成随机数构造url,尝试无果,返回307错误。

      再尝试,构造请求头,利用request库以及urllib2尝试抓取,均失败。

      再尝试phantomjs添加header,失败

      8.再抓取页面时....抓到了不一样的东西

      

      最开始找不出原因,控制台里跑了一下

      

        原来在这里设置了cookie然后再跳转到正常页面..

      那这个网站的验证机制就是,先赋值cookie,在访问详细页面的时候验证cookie,然后根据id和seesion发送post请求去请求数据(事后看起来真的是....我当时是怎么花了那么久搞不出来的??)

      第一次请求代码:

      while True:
                try:
                    res = c.phJs_get(url)#phantomJs带头发送请求,返回值res={'text':html,'cookie':cookies}
                except Exception, e:
                    res = None
                    self.log.error('html请求失败..重试中....')
                if res is not None:
                    try:
                        html = BeautifulSoup(res['text'], 'html.parser')
                    except Exception, e:
                        html = None
                        self.log.error('html解析失败...')
                    try:
                        self.pripid = html.find('input', id='pripid')['value']
                    except Exception, e:
                        self.pripid = None
                    if self.pripid is not None:
                        break

      获取数据的代码:  

     1  if self.pripid:
     2             url = self.rootUrl + '/pub/jbxx/qy/' + str(self.pripid) +'?' + str(rand)
     3             header = {
     4             'Accept':'application/json, text/javascript, */*; q=0.01',
     5             'Accept-Language':'zh-CN,zh;q=0.8',
     6             'Cookie':'UM_distinctid=15caef7925036-0bab5a718fff1d-323f5c0f-1fa400-15caef79251840; SESSION='+self.seesion + '; Hm_lvt_cdb4bc83287f8c1282df45ed61c4eac9=1497837663,1497850390,1497850402; Hm_lpvt_cdb4bc83287f8c1282df45ed61c4eac9=1497851908; AD_VALUE='+self.AD_VALUE,
     7             'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
     8             'X-CSRF-TOKEN':self.x_csrf_token,
     9             'X-Requested-With':'XMLHttpRequest',
    10             }
    11 
    12             res = c.HTTP_POST(url,{},HEADERS=header)
    13             self.log.info(json.loads(res))

      就能拿到json数据了

  • 相关阅读:
    前端笔记(关于解决打包时报node-sass错误的问题)
    前端笔记(Echarts学习总结)
    前端笔记(近期整理的一些开发备注)
    代码(css3向下箭头指引)
    Hexo 博客利用 Nginx 实现中英文切换
    prefetch 和 preload 及 webpack 的相关处理
    利用 Github 网络钩子实现自动化部署
    使用 Nginx 实现 301 跳转至 https 的根域名
    作为 attribute 和 property 的 value 及 Vue.js 的相关处理
    使用 Vue.js 改写 React 的官方教程井字棋
  • 原文地址:https://www.cnblogs.com/Hed-geh0g/p/7052907.html
Copyright © 2011-2022 走看看