最近实验室项目涉及到很多爬虫相关的东西,在此做个整理,爬虫最难的问题应该是javascript和ajax的处理。现在很多网站使用大量ajax,普通爬虫无法获取js生成的内容。
对于普通的静态网页,HttpClient是Java中抓取网页的利器,然而针对像京东商品页面这样的页面却无能为力,例如:http://item.jd.com/10875285.html
主要原因是页面中的一部分信息比如商品评论是通过JavaScript异步加载的,如果直接通过HttpClient直接抓取只会得到其中的js代码,我们需要的信息却没有得到,解决这个问题有一下几个思路
方法一:分析浏览器加载页面的过程,找到JS加载数据的URL,用爬虫代码来模拟js代码,js读取页面元素值,我们也读取页面元素值;js发送ajax,我们就拼凑参数、发送ajax并解析返回的json。理论上,这种方法肯定可行,但太麻烦。
方法二:使用HtmlUnit,它可以模拟浏览器运行,解析JavaScript,但它对JS支持,并不是足够好,面对包含复杂JS的页面会发生错误,至少京东商品页面的抓取,用HtmlUnit就做不到
方法三:利用Selenium调用浏览器获取动态HTML值,再调用其API,可以很方面获取动态数据。由于是调用第三方像IE Chrome这样的浏览器,这种方法对JS的解析绝对可靠,但由于每个请求都会启动一个浏览器进程,同时浏览器还会加载图片等其他各种资源,所以效率会很低
时间: 2024-08-05 08:43:37