通过Java爬虫Jsoup httpclient获取动态生成的数据
之前我们详细讲过Jsoup,发现这个东西就是这样的。只要是一个可访问的静态资源页面,就可以直接使用它来获取需要的数据。有关详细信息,jump -Jsoup爬虫会详细解释。但在很多情况下,网站为了防止数据被恶意抓取,做了很多掩饰,比如加密、动态加载等,无形中给我们编写的爬虫程序造成了很大的麻烦。那么如何才能突破这个梗,获得我们迫切需要的数据呢?
让我们详细解释如何获得它
string startPage=' https://item . JD.com/11476104681 . html ';document document=Jsoup . connect(start page)。user agent(' Mozilla/5.0(Windows NT 10.0;WOW64)applebwebkit/537.36(KHTML,像Gecko)Chrome/52 . 0 . 2743 . 116 Safari/537.36’)。get();此时实际已经获取了整个页面的数据,但是商品价格是通过回调函数获取然后填写的,所以这就需要我们爬虫开发者耐心寻找价格数据的回调接口。我们可以直接访问这个界面来获取这个价格。下面是一个演示:
通过这个截图,可以看到他只传递了一个完全没有价格参数的静态资源页面,那么价格是怎么来的呢?继续找到这个界面:
你会发现这个界面上拼接了很多参数,所以我们要做的就是分析是否所有的参数都有用
https://p.3.cn/prices/mgets?callback=jquery9734926 type=1 rea=1p dtk=pduid=14930020970791835891856 ppdin=JD _ 6738608 E8 eedpdbp=0 skuids=j _ 11476104681 source=item-PC可以尝试删除一些参数,最终找到这个接口需要的参数
https://p.3.cn/prices/mgets?回调=jquery 9734926 Type=1 Area=1 kuids=j _ 11476104681 Source=item-PC很兴奋看到这里。你实际上可以得到当前价格和最高价格,就像其他一些JD产品ID一样。我不知道它是什么价格。我们需要做的就是编写一个Httpclient模拟请求接口。
string DoGet=Httputils . DoGet(' https://p . 3.cn/prices/mgets?callback=jquery9734926 type=1 rea=1 kuids=J _ ' ' 11476104681 ' ' source=item-PC ',null);system . out . println(DoGet);结果是这样的:
jQuery9734926([{ ' id ' : ' J _ 11476104681 ',' p':'880.00 ',' m':'980.00 ',' op ' : ' 980.00 ' }]);至于后者,如果直接解析JSON字符串,就会得到想要的数据。
注意它
这是在重新请求回调所请求的数据,这只是对之前商品价格动态获取的补充。在这种情况下,价格本身不会通过主链接被带到页面,而是在加载过程中被异步请求填充。有时候数据是带过来的,但是相关JS处理完了我们还是拿不到。此时,我们必须通过其他方式获得这些数据,这将在后面解释
将这些Jsoup和httpclient集成到一个爬虫模板中,可以完全完成一些基本的数据抓取操作。如何整合它们取决于你的个人喜好。
感谢您的阅读,希望对大家有所帮助,感谢您对本网站的支持!