Crossin的编程教室

标题: 如何分析ajax页面中js数据的生成, 为稍后python抓取做准备? [打印本页]

作者: anyone    时间: 2016-7-20 03:22
标题: 如何分析ajax页面中js数据的生成, 为稍后python抓取做准备?
本帖最后由 anyone 于 2016-7-20 03:33 编辑

首先感谢crossin一直以来的帮助, 我从连安装python都不会的程度, 到现在已经可以顺利的抓取静态页面的水平, 在这里学到很多.

最近我正在学习如何抓取ajax页面, 一如既往, 遇到了一个瓶颈, 看了很多资料, 到处碰壁, 所以才在这里发帖, 希望crossin能拨冗给我指点一下迷津. 非常感谢.

样例网站: Clipboard01.jpg 我想抓取他的图片. 显然, 他使用了异步请求, 并且也有js代码生成, 还有cookies等, 来保护图片信息.

首先, 我排除了python中的浏览器模拟这样的方式, 我觉着这种方式效率太差, 而且也不能从中学到更多. 所以我选择用js分析的方法, 也就是js调试吧?

目前其他的我基本搞定, 也可以通过chrome的inspect工具来获得异步请求地址( 异步地址 ), 由于这个地址是有规律的, 所以我可以在python中生成完整的异步请求地址, 然后获得请求返回的数据, 达到下载的目的.

但是这种方法有很多运气的成分. 所以我想学习一种更加深入/万能的方法: 也就是了解这个页面中的js是如何运行并生成异步请求地址的. 这样我可以在python中模拟这种方式.

我自己尝试了一些方式从页面中调试出来他是如何生成上面这个异步请求地址的, 目前只知道是在chapternew_v2.js(中途还调用了一下jquery-1.4.1.js)中运算了一下,  其中的一个x返回了异步地址的后半部分. 但是js是从哪里获得的数据, 又怎么生成的这个地址, 完全没有头绪. 不知道crossin可否指点一二? 最好有个在chrome中调试的具体步骤, 我实在是chrome调试的白丁, 万分感谢.



帖子中涉及到地址的地方我都用的是图片, 如果看不清点开看大图即可. 这么做也是为了不要有不必要的麻烦.
作者: crossin先生    时间: 2016-7-20 12:47
你现在用的方法,就是通常采集用的方法,去查看它发出去的请求,寻找规律,然后批量抓取。

你想从页面中的js了解它怎么生成的,这个chrome调试就帮不了你了,你只有去阅读它的js源代码分析。但其实这也并不是一个万能的方法。代码一样有可能更新。
你如果要深入分析,你现在的方式没什么问题,就是找头绪,一点点跟着代码走,找到它的核心代码。只不过这么搞肯定是挺费事的
作者: anyone    时间: 2016-7-20 21:10
哦, 这么说来, 也许万能一些的做法就是浏览器模拟, 对吗?
作者: crossin先生    时间: 2016-7-21 09:55
anyone 发表于 2016-7-20 21:10
哦, 这么说来, 也许万能一些的做法就是浏览器模拟, 对吗?

不太清楚你说的浏览器模拟是什么。我觉得你现在用的方法,从开发者工具来找规律,就是一般爬虫采取的方法。
作者: karlchen    时间: 2016-7-21 10:54
不是太明白你的意思,这种异步请求不同的网页参数什么的都不太一样,怎么能找到一个万能的方式呢?
或许你可以通过先请求一次,获取到http包的各种信息,但是也不能保证你传递过去的数据后台没有做限制,如果某些参数后台程序有校验,你传递的刚好是违规的,最后还是不行的吧
作者: anyone    时间: 2016-7-21 13:50
crossin先生 发表于 2016-7-21 09:55
不太清楚你说的浏览器模拟是什么。我觉得你现在用的方法,从开发者工具来找规律,就是一般爬虫采取的方法 ...

浏览器模拟我也没有深入的学习, 比如: Selenium, 似乎是让页面包括js在一个模拟浏览器的环境下运行, 然后这个模拟环境将结果反馈给python. 所以只要页面最终显示什么, python都可以得到, 无论这些内容是xhr还是js生成的.

Selenium 似乎也可以模拟登录过程. 所以我想是不是就可以说是万能的方式? 缺点就是效率低吧?
作者: anyone    时间: 2016-7-21 14:14
karlchen 发表于 2016-7-21 10:54
不是太明白你的意思,这种异步请求不同的网页参数什么的都不太一样,怎么能找到一个万能的方式呢?
或许你 ...

关于这个, 我懂的有限. 目前根据有限的了解:

你说的"不一样的参数", 其实都在页面里, 只是因为有了ajax, 所以不是很明显. 这也是我想找到一个方法去了解页面中js的运算方式的原因. 如果知道了这个, 就可以知道那些发送给服务器的数据, 也就是你说的参数是怎么来的了.

我想这种方法要比只是获取xhr异步通信地址, 然后猜测结果来的"万能"一些. 现在一些视频网站, 为了防范爬取内容, 异步通信地址里面会有一个没有规律的字串.


作者: crossin先生    时间: 2016-7-22 10:15
anyone 发表于 2016-7-21 13:50
浏览器模拟我也没有深入的学习, 比如: Selenium, 似乎是让页面包括js在一个模拟浏览器的环境下运行, 然后 ...

我没用过selenium,听上去你模拟浏览器的时候不还是需要人工参与吗,它又不能自动帮你分析链接。
你说的对方网站加字符串,或者加权限验证,这个显然没有万能方式吧。最多是,可以有东西帮你方便地提取请求,但这个chrome已经做得很好了。
你想直接看到别人代码里生成请求的东西,那不太可能
作者: anyone    时间: 2016-10-16 20:02
crossin先生 发表于 2016-7-22 10:15
我没用过selenium,听上去你模拟浏览器的时候不还是需要人工参与吗,它又不能自动帮你分析链接。
你说的 ...

好的. 抱歉这么久才回复, 这期间一直在忙工作.

希望这里越来越好.




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5