上一回我们拿百度做了测试,那么这一次开始做知乎下巴啦。
首先花个三五分钟设计一个Logo=。=作为一个程序员我一直有一颗做美工的心!
好吧做的有点小凑合,就先凑合着用咯。
接下来呢,我们开始制作知乎的爬虫。
首先,确定第一个目标:编辑推荐。
网页链接:http://www.zhihu.com/explore/recommendations
我们对上次的代码稍作修改,先实现能够获取该页面内容:
运行一下木有问题,接下来就是一个正则匹配的问题了。
首先我们先来获取该页面的所有的问题。
右击标题,审查元素:
啊哈,可以看到标题其实是一个a标签,也就是一个超链接,而其中能够和其他超链接区分开的,应该就是那个class了,也就是类选择器。
于是我们的正则语句就出来了:question_link.+?href=\"(.+?)\"
调用RegexString函数,并给它传参:
啊哈,可以看到我们成功抓到了一个标题(注意,只是一个):
等一下啊这一大堆的乱七八糟的是什么玩意?!
别紧张=。=它只是字符乱码而已。
编码问题可以参见:HTML字符集
一般来说,对中文支持较好的主流编码是UTF-8,GB2312和GBK编码。
网页可以通过meta标签的charset来设置网页编码,譬如:
我们右击,查看页面源代码:
可以看到,知乎采用的是UTF-8编码。
在这里和大家解释一下查看页面源代码和审查元素的区别。
查看页面源代码是显示整个页面的所有代码,没有按照HTML的标签进行排版,相当于是直接查看源码,这种方式对于查看整个网页的信息,比如meta比较有用。
审查元素,或者有的浏览器叫查看元素,是针对你右击的元素进行查看,比如一个div或者img,比较适用于单独查看某个对象的属性和标签。
好的,我们现在知道了问题出在了编码上,接下来就是对抓取到的内容进行编码转换了。
在java中实现很简单,只需要在InputStreamReader里面指定编码方式就行:
此时再运行程序,便会发现可以正常显示标题了:
好的!非常好!
但是现在才只有一个标题,我们需要的是所有的标题。
我们将正则稍加修改,把搜索到的结果存储到一个ArrayList里面:
这样就能匹配到所有的结果了(因为直接打印了ArrayList所以会有一些中括号和逗号):
OK,这样就算是完成了知乎爬虫的第一步。
但是我们可以看出来,用这样的方式是没有办法抓到所有的问题和回答的。
我们需要设计一个Zhihu封装类,来存储所有抓取到的对象。
Zhihu.java源码:
再新建一个Spider类来存放一些爬虫常用的函数。
Spider.java源码:
最后一个main方法负责调用。
Ok这样就算搞定了。运行一下看看结果:
好的效果不错。
接下来就是访问链接然后获取到所有的答案了。
下一回我们再介绍。