需求
爬取商品价格、销量、评论、收藏量、款式等基本数据以及详情图。
遇见的主要问题以及解决方式
对于一个从来没写过爬虫的人来说很多地方都是很困惑的。而且公司要求两三天就得出结果并用于生产,再加上自己轻微的代码洁癖,综合起来还是有些压力的。
所以也没时间去学习一些爬虫框架或者道友们的一些实现方案,回头来看,都是些常规操作。
写完之后,发觉这并不是一篇好文章,朋友们在这篇文章中可能获得不了太多有价值的信息
这篇文章其实不错
第一个问题
最开始抽取所有的商品URL,要爬取的网站的数据是Ajax动态加载的。所以直接代码获取链接数据,只会返回最初的静态页面。里面几乎不会有什么可用的信息。
你可以下载一个”toggle JavaScript”的插件,启动后点击该插件,可以看到哪些显式是通过JS异步加载过来的(是点击该插件,而不是仅仅启动就可以)
比如,未使用该插件时:
点击该插件过后,会发现很多数据没有加载出来,这里加载出来的都是最初的静态页面。往往都是“item.html“
要解决这个问题,主要得找到是哪个js脚本返回的数据,找到后用jousp解析html。我们需要一个个的去查看,看是哪个地方返回了我们需要的数据
数据往往都是以JSON的形式返回的,找到该入口后,接下来就是解决翻页。
我这里是直接在URL尾部添加&pageNo=,是可行的。
Document doc = null;
try {
// 解决UnsupportedMimeTypeException:ignoreContentType(true)
doc = Jsoup.connect(entry.getValue()).headers(SpiderHeader.headers).ignoreContentType(true).timeout(30000).get();
} catch (IOException e) {
e.printStackTrace();
}
后来发现请求淘宝移动端API可以基本满足我的需求,故没有继续慢慢的踩Ajax异步加载的坑
API中可能会有