js提取网站数据

在服务器端扒数据快是快,可惜现在很多网页都会用ajax加载数据,明明页面上能看到的东西,拉回来的HTML里面却没有。我想问有没有服务器端能解释javascript并执行的。

虽然我也可以分析ajax的请求,分析javascript的动作 来拿回自己想要的数据。但是万一,人品极差的碰上了乱写的js或混淆过的Js,我可没有那么多心情。


浏览器,其实浏览器就已经把各种东西渲染好了,我能否利用浏览器用js来扒呢?


想法一,要分析很多页的数据,用iframe分别加载

想法二,js不能跨域操作和读取,利用host 文件重定向,欺骗一下js


大致步骤

1. 到host文件重定向 你要分析的域名(例如m.yuk.com)到127.0.0.1

2. 这时访问 m.yuk.com/fetch.html, 其实就是访问本机

3. 等这个fetch.html在浏览器上加载完后,到 host 文件将刚才的重定向注释掉

4. 各种清除DNS缓存,否则你是读不到真正网站的内容的。

5. 这时点击 fetch.html 上的某个 button,将 iframe src 指向要分析的页面,如 m.yuk.com/item_123.html,这时DNS会解释到真正的网站上

6. iframe 绑定 onload 事件,内容加载完后就会自动执行,分析页面数据的主要逻辑在这个步骤里

7. 分析完一个页面,就将 iframe src 指向下一个要分析的页面,加载完后又会触发 onload 事件,循环,直到所有页面分析完。。。


要注意的地方

找了两个著名的购物网站来试,效果不错,用起jquery来读隐藏得多深的数据都轻易易举,不过还是发现一些要注意的地方:

1. water fall

如果网站用了water fall 效果,页面需要滚动下来才会把内容加载完,引申开来,凡是要跟用户互动(滚动,点击,输入,或要等一段时间)再加载的内容,你需要在iframe中模拟这些事件。时间原因没有各个测试。


2. 一次只能处理一个域名

正常情况下,你这个假冒的m.yuk.com/fetch.html中的js只能处理m.yuk.com下的数据,不能跨域(www.esleSite.com)甚至跨子域(k.yuk.com)和父域(yuk.com)。除非父域或子域显式设置了 document.domain,而你的js程序也设置了一样的值,那才有可能跨到这些域上去。

所以正常情况下,用这种方法只能半自动操作,幸好大部分网站都不会有太多子域名。


3. 不能访问得太频繁了,小心对方把你列为黑名单。


与服务器端比较

js方式更适用于有复杂js行为或数据的网站,它的缺点是效率没有服务器快,加载图片 CSS JS等会消耗时间,而且也做不到完全自动化。


写在最后

扒数据仅用于学习和研究,请请勿用于各种不道德场合。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值