怎么爬取动态生成的网页?
比如京东的商品列表页,列表中的价格和评论都是通过jsonp获取,再渲染出来的。而用 nodecrawler 只能爬取最原始的页面,请问如何才能等页面的js执行完毕后才返回html? 先谢谢各位大佬的提议。
30 回复
方向1 headless类
- 工具:puppeteer(推荐), phantomjs(基本已经不会再更新)
- 场景:如果对抓取不熟悉,或者页面js做了太多事情,接口响应和你最终要的东西相差很多时。
- 优点:省心,前端开发熟悉的套路。headless类的帮你模拟出浏览器的加载过程,你自己拿渲染生成好的数据就可以了。
- 缺点:可定制化低-> 易被防抓; 性能差
方向2 抓接口
- 工具:你熟悉语言的httpRequest库
- 场景:熟悉抓取,你能分析出你要的数据来自那些接口以及接口的前后逻辑;性能要求高
- 优点:可定制化高,请求你想发成啥样都可以;性能好
- 缺点:对开发者分析能力和动手能力要求高
至于性能相差多少,可以理解成进程级别和请求级别,这要看具体抓取目标环境和你的具体实现了。
如果楼主还是一脸懵的话,建议你甭管用啥,先run起来,渐渐就有感觉了
@JZLeung puppeteer 只是一个 headless 的 chromium 浏览器而已,Google 官方出来的,所以之前的 phantomjs,casperjs,nightmare 就结束了历史使命了。
抓取速度只看你网速,反正一般爬虫你都是搞集群的,所以 puppeteer 的启动速度可以忽略不计(比起其他几个,它的启动速度已经是最快的了)。
还是要看你的具体业务场景,简单的那种还是直接 curl 快,需要执行 js 的,非 puppeteer 莫属。
@atian25 我只是个业余的,集群什么的都不懂。现在正在研究puppeteer 但是扔上服务器后(阿里的装不上chromium,扔的国外)动不动就30s超时。醉了。