最近抓取新浪微博的相关内容,遇到了很多问题也解决了很多问题。一开始我是使用httpclient爬虫抓取网页,但是后面发现微博网页内容很多都是嵌入到js中的;所以改用了htmlunit。下面重点总结几点我的经验吧!
httpclient、htmlunit、新浪微博API这三者的优缺点:
httpclient:
优点:爬虫比较稳定,相关使用方法很详细,可以参考《自己动手写网络爬虫》这本书。
缺点:没法解析js。
htmlunit:
优点:可以解析JS,可以模拟表单提交,使用方法比较简单。
缺点:爬虫不稳定,特别是解析JS时,可能会抛异常。
新浪微博API:
优点:提供各种内容的抓取。
缺点:限制太多。
由于我是使用htmlunit抓取新浪微博内容的,接下来讲几个爬虫遇到的问题。
一、模拟登录
想要模拟登陆,必须了解新浪微博登录的流程,因为新浪微博登录变化比较多,这个地方需要你抓包分析他的登录过程;建议你安装一个抓包工具,比如httpfox。
登录流程:
1.模拟用户名输入框焦点失去。向服务器发起一次请求。
2.获取第一步请求的返回的数据,提取参数。
3.加密密码。(新浪加密算法可能已经改变)
4.将第二步和第三步的相关参数封装到post请求,发起post请求
5.请求成功,获取cookie;保存cookie。
二、JS解析
方法一:调用htmlpage的save方法,可将获取的网页保存至本地,在读取该文件的时候你会发现,里面的js已经解析好了。
方法二:提取特定js,由于js里面的内容是有规律的;我们只要提取js中的html即可;然后通过htmlcleaner解析提取出来的html。
方法三:直接使用htmlpage提供的getByXpath方法,但是这个方法不稳定。可能获取不到元素对象。
三、验证码
方法一:
1.发起请求获取验证码图片
2.保存本地。
3.打开图片,手动输入验证码。
4.获取验证码值,请求认证。
方法二:
破解验证码。这个方法太难了!!!
方法三:
绕过验证码,抓取手机端的微博内容;当然啦!手机端的相对于web端的内容没那么详细,有的东西可能没有。
写到这感觉差不多,以后可能还会遇到其他问题。这些算前车之鉴吧!仅供参考!!代码就不贴了,写的太随意就不献丑了。