爬取知乎热门问答的java爬虫

JavaSpider

能够爬取各话题下的热门内容的Java爬虫

0.写在最前

最近想复习一下正则表达式,同时想到之前一直看大佬们所说的爬虫,想到java擅长的也是网络方面,因此就想自己来实现一个
需要的知识:

  • 正则表达式
  • java多线程线程池池知识
  • httpclient网络库及json和html结构

1.如何使用

第一次运行:
在cmd中cd到项目目录下运行

source 工作目录/sql/createtable.sql
source 工作目录/sql/QAtable.sql

来建立数据库表

getTopicId(); //用于获取主话题id
getAllChildTopics();  //用于获取子话题id

通过获取的子话题id来爬取相应的热门问答

loadAllTopicHotQA(); //爬取热门问答

如果您希望每隔一段时间爬取一次数据可以设置定时器来让程序每隔一段时间执行一次该方法

2.如何调优

若您希望爬取速度更快那么可以修改线程池的大小:

ExecutorService exec = Executors.newFixedThreadPool(2);

爬取过快或造成ip被封,可使用代理用不同的ip进行爬取

3.写代码过程中踩过的坑

1.在爬虫爬取的过程中很多子话题下会拥有相同的问题

很多主题类似的子话题下有相同的问题,在写代码测试的过程中一直以为出错了。。


爬取知乎热门问答的java爬虫_第1张图片
运动话题下的热门
爬取知乎热门问答的java爬虫_第2张图片
健身话题下的热门

2.在未登录的情况下有时无法爬取到用户的username

爬取知乎热门问答的java爬虫_第3张图片
爬取到的username为知乎用户

这种情况可能会造成正则匹配的位置错误
具体代码及思路详见 java知乎爬虫写作过程和思路
gayhub:gayhub

你可能感兴趣的:(爬取知乎热门问答的java爬虫)