«

»

用CasperJS抓取京东的价格数据

casperjs 瀑布流初学CasperJS,很多问题困惑不解。比如京东的价格数据采集。打开一个有商品的京东页面。在Chrome中检查元素,可以看到有价格数据。但如果选择查看页面源码,就会发现价格的位置是空的。查看页面源码功能可能只显示从服务器获得的HTML文件本身,所以这里价格数据为空也正常。但是CasperJS不是可以执行JS渲染吗?为什么在CasperJS里抓取这个价格数据,甚至在设置了几十秒的延迟之后,仍然是空呢?

到处搜索答案,在Q群里求教,终于遇到位大神分析出原因:

原来京东的这个页面类似于瀑布流布局。就是说商品数据并非一开始就呈现的,而是随着读者往下滚动页面,而逐步加载的。虽然仍是执行JS从后台获取数据,但这JS的执行却需要一个触发条件,就是浏览器窗口的向下滚动。如果不滚动,等待多久也不会触发数据的加载。自然CasperJS就抓不到东西。

大神用Fiddler分析出了问题所在。用Chrome开始者工具里的“网络”一栏,也能看到随着页面往下滚动,逐渐加载了更多的图片等内容。

用:

这段代码执行页面的滚动。然而滚动之后的JS对数据的加载何时结束却不知如何判断。也许可以拿页尾的最后一张图片来执行this.waitForResource。但是这种等待需要对具体页面进行分析了。所以要在滚动之后延迟若干秒钟再开始捕获数据。

所以结论是,CasperJS对JS渲染的执行并无问题。相反自己需要补习一下各种Web前端技术的知识。

由此联想到页面数据采集的一些复杂场景,比如需要登录,需要cookie,需要点击某个按钮才会出现相应页面数据等。看来试图制作一个通用的页面采集程序还是非常困难的一件事情。

1 星2 星3 星4 星5 星 (尚无评分)
Loading...Loading...

相关文章

CSS中的属性选择器 有句谚语叫“条条大路通罗马”,本意是说到一个城市可能有许多路径可选。对于CSS选择器也是一样。使用HTML...
CasperJS中querySelector使用的一些问题 CasperJS是PhantomJS(一个Webkit内核的无界面浏览器)和SlimerJS(对应于Gecko内核)的一个封装,用于...
浏览器中元素的定位类型 网页中元素的定位用由position属性确定,分为绝对定位,相对定位。除此之外还有浮动定位。position的取...
浏览器中CSS的盒模型 首先是CSS中画布的概念,根据CSS2规范,名词“画布”描述为“格式化的结构渲染所用的空间”---也就是浏览器...
浏览器的绘制阶段 在浏览器的绘制阶段,会遍历渲染者树,并调用渲染者的“paint”方法在屏幕上显示内容。绘制需要用到UI基础...
浏览器的布局 下来就是浏览器的布局过程。当渲染者被创建并且增加到树上时,它并没有位置和尺寸。计算这些值被称为布...
浏览器样式表的规则匹配和级联顺序 浏览器中CSS样式的匹配并非总是那么简单,某些情况下可能需要对规则加以处理以使匹配更容易。下面是几个...
浏览器中使用规则树来计算样式 当计算某个元素的样式内容时,我们首先计算规则树里的一条路径或是使用一条已经存在的路径。接下来就开...

发表评论

电子邮件地址不会被公开。