写爬虫遇到坑和总结

标签: 爬虫 测试
31人阅读 评论(0) 收藏 举报
分类:

最近一直在使用scrapy编写各种爬虫,遇到一些坑,下面来总结一下,以免下次遇到又花费很多时间

(1)

我们在请求前拼接headers时,并不需要把所有request headers都拼接上,可以使用在线http请求,如http://coolaf.com/去测试比如下面refer只要截取前面就可以,后面参数可能是动态生成的,对每次请求都一一对应的,只能适用一次请求,所以一次要爬取很多页面就把它去掉
这里写图片描述

(2)

有时候我们请求,即使把所有参数带上返回还是空
这里写图片描述
这种情况可能被加密了,可以看到参数eleven的值是64位无规律字符串,这就是网站在前端用js加密的key
这里写图片描述
我们可以找到网站js解密方法

这里写图片描述
解密步骤:解密使用普通js方法,去掉方法头尾在页面Console跑一次,会返回js方法,然后又去掉该js方法头尾再跑一次,这次就返回我们需要的密码了

代码解决方法
跟爬虫类似,根据url请求返回我们需要的加密js代码,去掉方法头
这里写图片描述

 url = 'http://hotels.ctrip.com/international/Tool/cas-ocanball.aspx?callback=%s&_=%s' % (n, t)
                headers = {'User-Agent': random.choice(user_agent_list),
                           'Referer': 'http://hotels.ctrip.com/international/%s.html?isFull=F' % hotel_id,
                           'Host': 'hotels.ctrip.com',
                           'Accept-Language': 'zh-CN,zh;q=0.9',
                           'Accept-Encoding': 'gzip, deflate'}
                # content = requests.get(url, headers=headers, proxies={'http': proxy}).content
                content = requests.get(url, headers=headers).content
                content = content.replace('eval', '')
                key = self.ec.jiemi_2(content, n, headers["Refe````````````
er"])

从代码看出,拿到一次解密返回的js代码,也就是上面的content,再进行第二次解密

 def jiemi_2(cls, js, callback, local):
        eval_js = cls.execute_script('return ' + js)
        index = eval_js.index('new Function')
        result = re.findall('\+\s([a-zA-Z0-9_]+)\s+\+', eval_js[index:])[0]
        index = eval_js.index(callback)
        eval_js = eval_js[14: index]
        eval_js = eval_js.replace('window.location.href', '"%s"' % local)
        key = cls.execute_script(eval_js + '; return ' + result)
        return key

第二次就是返回我们想要的key了
最后我们在scpray中间件,去调用我们的解密方法,拿到eleven密码,然后拼接参数就可以爬取我们想要的数据了

 eleven = self.js.jiemi_1(id)
 url = request.meta.get('target_url')
 request._set_url(url + ('&eleven=%s' % eleven))
查看评论

vue遇到的坑

父级组件采用数据驱动渲染出来的导航栏之后,由于页面渲染的是子组件,这个时候在子组件中去触发父级组件上的事件并没有发生,这个时候反复找了网上查找了一些资料,刚开始百度到了一个关于v-for与click事...
  • limy_cxm
  • limy_cxm
  • 2017-06-08 16:07:44
  • 1194

css 自己爬过的一些坑

css 自己爬过的一些坑
  • walliamliu
  • walliamliu
  • 2016-12-25 13:24:16
  • 258

CSS样式坑总结

1、对inline-block设置overflow: hidden会造成baseline移动,因此需要设置vertical-align才不会出现样式问题。...
  • clarkt
  • clarkt
  • 2016-06-15 01:43:36
  • 513

Android开发遇到的坑

最近在开发中总会遇到各种坑,由于记忆力不好,先记录在这里。 以前看过的一些总结,基本上很齐全了: http://jcodecraeer.com/plus/view.php?aid=3773 https...
  • ly635676581
  • ly635676581
  • 2016-11-25 16:31:30
  • 601

爬虫踩过的坑!!!

case:爬取10万数量级的英文新闻。目标站点:卫报(是英国的全国性综合内容日报)看我细数那些坑: xpath路径容易搞错。google网页自带的copy.xpath得到的路径一不留神就会出错,而且他...
  • summer6364
  • summer6364
  • 2017-08-07 21:05:39
  • 107

前端开发遇到的坑(纯属吐槽)

沟通问题!! 没别的就是沟通问题!!!
  • qq_2842405070
  • qq_2842405070
  • 2017-04-17 16:44:47
  • 1182

写js过程中遇到的坑

1.js中的变量提升机制 2.js中原生js的兼容性问题:eg:nextSibling和nextElementSibling在不同浏览器的应用范围 3.js中jquery对象和javaScript...
  • flying461
  • flying461
  • 2017-02-16 14:48:12
  • 503

爬虫中遇到的问题

昨天在爬一个综合型网站里面的公司具体信息的时候遇到了一些问题,因为是刚毕业工作,所以也许遇到的小问题对于我来讲也很重要。 1.总是出现read time out情况: 这个问题出现的原因有很多,一...
  • MovingC
  • MovingC
  • 2016-07-14 08:53:58
  • 322

scrapy 爬虫遇到的坑

-  第一部分  scrapy   开始一个工程 1    scrapy startproject suning_spidei      2 scrapy gensider suning suning...
  • qq_37634812
  • qq_37634812
  • 2017-09-07 11:48:46
  • 646

开发 - kafka的一次小坑

在Kafka中进行生产消费,默认kafka有几种生产消费的消息 1.kafka如果不指定key进行生产,会按照kafka自带的一直性算法 根据 message的一致性hash算法去进行判断,然后...
  • u012983826
  • u012983826
  • 2016-07-09 15:48:34
  • 1043
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 20万+
    积分: 3660
    排名: 1万+
    博客专栏
    我的微信公众号
      欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!