Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 629|回复: 0

python爬虫——绕开杂乱无章的代码和堵住请求的302异常(2)

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-15 15:59:13 | 显示全部楼层 |阅读模式

      淘宝那次抓包,居然发现不了要抓的url位置,三星中。。。

      不过不怕,不就是没法快点分析出包嘛,下次用phantomJS硬杠,或者有时间慢慢分析也好。

      今天挑战一个稍微好爬的网站:狗搬家(误)

      打开后台代码一看,山口山

      

      一堆<p style="display:none;">直接影响分析数据。

      有个运用无头浏览器的爬虫使用了图像分析法,不过老夫真心认为这玩意还是不要随便用比较好,就像一些简单的网站不要用phantomJS一样

      稍微分析ip那里的代码就可以找到解的(避免查水表不发布源代码)去除html标签,连着里面的元素去除什么的,用regex还是比较简单的

      结果想再爬这个网页时,出现了302重定向

      这里,直接ban掉重定向没有多大用,关键是识别到状态再根据情况重新请求。

      从stackoverflow一哥们那里搞来了这段代码:

    self.log("(parse_page) response: status=%d, URL=%s" % (response.status, response.url))
            if response.status in (302,) and 'Location' in response.headers:
                self.log("(parse_page) Location header: %r" % response.headers['Location'])
                yield Request(response.headers['Location'],callback=self.parse,meta=self.meta)
    View Code

      这段代码判定返回状态,并根据情况决定要不要重传。(这里应该有urljoin的,不知为何我安装的scrapy没有)

      结果是yield后面的代码没有运行就退出了。

      还是一样去stackoverflow求助,结果有人告诉我,ban了filter。

      dont_filter这个参数开始是为了防止程序死循环设计的,然鹅在这个框架就成了问题,它不能yield第二层request

      初始化request时,dont_filter=true,程序就会不管3721把请求提交,然后数据就返回了

      幸好这里的302不会一直302,只要cookies对上了,返回的就是200和网页代码,不会出现栈溢出

    self.log("(parse_page) response: status=%d, URL=%s" % (response.status, response.url))
            if response.status in (302,) and 'Location' in response.headers:
                self.log("(parse_page) Location header: %r" % response.headers['Location'])
                yield Request(response.headers['Location'],callback=self.parse,meta=self.meta,dont_filter=True)
    View Code

       后来仔细看源码。。。特码这个教程只解决了display:none和302的问题,实际的数据还是有毒。。。

      看了下http://www.cnblogs.com/w-y-c-m/p/6879551.html这位兄台的方法,姿势get到了!不仅知道了如何反混淆,还学会了debug网站

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 16:15 , Processed in 0.063186 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表