用JAVA写一个知乎爬虫

用java来实现一个知乎爬虫

操作方法

  • 01

    这里,耗费了不少的业余时间,专门为爬虫入门或初中级写了一个知乎爬虫。为什么选择知乎呢?应为这里例子可以尽量多的将爬虫涉及的技术点包含进去,同时又不至于那么复杂,学习和提升兼顾。下面说明知乎爬虫的源码和涉及主要技术点: (1)程序package组织

  • 02

    (2)模拟登录(爬虫主要技术点1) 要爬去需要登录的网站数据,模拟登录是必要可少的一步,而且往往是难点。知乎爬虫的模拟登录可以做一个很好的案例。要实现一个网站的模拟登录,需要两大步骤是:(1)对登录的请求过程进行分析,找到登录的关键请求和步骤,分析工具可以有IE自带(快捷键F12)、Fiddler、HttpWatcher;(2)编写代码模拟登录的过程。

  • 03

    (3)网页下载(爬虫主要技术点2) 模拟登录后,便可下载目标网页html了。知乎爬虫基于HttpClient写了一个网络连接线程池,并且封装了常用的get和post两种网页下载的方法。

  • 04

    (4)自动获取网页编码(爬虫主要技术点3) 自动获取网页编码是确保下载网页html不出现乱码的前提。知乎爬虫中提供方法可以解决绝大部分乱码下载网页乱码问题。

  • 05

    (5)网页解析和提取(爬虫主要技术点4) 使用Java写爬虫,常见的网页解析和提取方法有两种:利用开源Jar包Jsoup和正则。一般来说,Jsoup就可以解决问题,极少出现Jsoup不能解析和提取的情况。Jsoup强大功能,使得解析和提取异常简单。知乎爬虫采用的就是Jsoup。

  • 06

    (6)正则匹配与提取(爬虫主要技术点5) 虽然知乎爬虫采用Jsoup来进行网页解析,但是仍然封装了正则匹配与提取数据的方法,因为正则还可以做其他的事情,如在知乎爬虫中使用正则来进行url地址的过滤和判断。

  • 07

    (7)数据去重(爬虫主要技术点6) 对于爬虫,根据场景不同,可以有不同的去重方案。(1)少量数据,比如几万或者十几万条的情况,使用Map或Set便可;(2)中量数据,比如几百万或者上千万,使用BloomFilter(著名的布隆过滤器)可以解决;(3)大量数据,上亿或者几十亿,Redis可以解决。知乎爬虫给出了BloomFilter的实现,但是采用的Redis进行去重。

  • 08

    (8)设计模式等Java高级编程实践 除了以上爬虫主要的技术点之外,知乎爬虫的实现还涉及多种设计模式,主要有链模式、单例模式、组合模式等,同时还使用了Java反射。除了学习爬虫技术,这对学习设计模式和Java反射机制也是一个不错的案例。

  • 09

    4. 一些抓取结果展示

(0)

相关推荐

  • 如何用java写石头剪刀布游戏

    学习了java基础的同学是有能力自己写一个游戏.这里分享给大家一个石头剪刀布的单机游戏.麻雀虽小五脏俱全. 一.创建玩家类 01 根据java面向对象的思想.玩游戏首先要有一个玩家,所以要创建一个玩家 ...

  • Windows下写一个文件备份脚本

    今天一个意外,我写的大半个月的日记加密文件受损,无法恢复。于是决定写一个专用备份的脚本文件。 主要思想就是在当前目录backup下根据当天的日期创建一个文件夹,然后将文件复制到该文件夹下。 脚本文件如 ...

  • 如何用word写一个中文邮件?

      如何用word写一个中文邮件? 1.打开word. 2.点击邮件界面. 3.点击收件人,如果你没有注册过,那么请略过这一步. 4.点击左上角的中文信封. 5.然后,如果有提示的话,你可以观看信封制 ...

  • 写一个简单的存储过程

    现在很多公司因为数据量大,基本面试都要求会sql编程,当然不止是增删查改,还要包括存储,触发器,如果对于一直只会增删查改的新手的话,写储存还是有点难度的,下面就演示写一个存储 操作方法 01 首先打开 ...

  • python3写一个比较数字大小的简单脚本

    自学有时候感觉真的很无奈,有的东西不懂,网上又找不到,就让人很难受,比如用python写个比较大小的练习脚本根本找不到(就算简单,也不能没有举例吧...)shell 的倒是会写,坏就坏在,当shell ...

  • 如何利用html写一个简单的搜索页面

    利用html,您可以写一个简单的搜索页面,不过实际的搜索页面需要利用数据库做支持,简单的搜索页面可以先用来练习,等以后您技术学好了,就可以做真正的搜索页面了. 操作方法 01 首先,创建一个html文 ...

  • 在文本文档中用html代码写一个两行两列的表格

    在文本文档中用html代码写一个两行两列的表格:这个是HTML代码中比较基础,涉及<table>表格.<tr>行.<td>列元素. 操作方法 01 新建一个文本文档 ...

  • 易语言如何写一个取随机数的程序

    还记得去年在新浪微博上,有一个加V的名微博发起了一个活动,然后抽奖选中几个用户,赠送什么礼品之类的.结果活动结束后,该博主发布了一条微博,大概意思是说在app store上买了个取随机数的软件,来抽取 ...

  • 怎样用html写一个简洁的提交表单?

    怎样用html写一个简洁的提交表单? 操作方法 01 新建一个html文件,写上html的头部. 02 写上form表单的外壳.<form></form> 03 为form这个 ...