知乎爬虫
====
zhihu-crawler是一个基于Java的高性能、支持免费http代理池、支持横向扩展、分布式抓取爬虫项目,主要功能是抓取知乎用户、话题、问题、答案、文章等数据,如果觉得不错,请给个star。
## 爬取结果
* 下图为爬取117w知乎用户数据的简单统计<br>
![](https://github.com/wycm/zhihu-crawler/blob/2.0/src/main/resources/img/zhihu-charts.png)
* 详细统计见 https://www.vwycm.cn/zhihu/charts
## 需要
1. jdk 1.8
2. redis
3. mongodb
## 快速开始
1. 修改```zhihu/src/main/resources/application.yaml```redis、mongodb相关配置,[application.yaml](https://github.com/wycm/zhihu-crawler/blob/3.0/zhihu/src/main/resources/application.yaml)
2. 初始化```zhihu/src/main/resources/mongo-init.sql```mongodb脚步,[mongo-init.sql](https://github.com/wycm/zhihu-crawler/blob/3.0/zhihu/src/main/resources/mongo-init.sql)
3. 设置日志路径,默认在`/var/www/logs`[logback-spring.xml](https://github.com/wycm/zhihu-crawler/blob/3.0/zhihu/src/main/resources/logback-spring.xml)
4. Run with [ZhihuCrawlerApplication.java](https://github.com/wycm/zhihu-crawler/blob/3.0/zhihu/src/main/java/com/github/wycm/zhihu/ZhihuCrawlerApplication.java )
## 使用到的接口
* 地址(url):```https://www.zhihu.com/api/v4/members/${userid}/followees```
* 请求类型:GET
* **请求参数**
| 参数名 |类型 | 必填 | 值 | 说明|
| :------------ | :------------ | :------------ | :----- | :------------ |
| include | String | 是| ```data[*]answer_count,articles_count``` |需要返回的字段(这个值可以改根据需要增加一些字段,见如下示例url) |
| offset | int | 是| 0 | 偏移量(通过调整这个值可以获取到一个用户的```所有关注用户```资料) |
| limit | int | 是| 20 | 返回用户数(最大20,超过20无效) |
* url示例:```https://www.zhihu.com/api/v4/members/wo-yan-chen-mo/followees?include=data[*].educations,employments,answer_count,business,locations,articles_count,follower_count,gender,following_count,question_count,voteup_count,thanked_count,is_followed,is_following,badge[?(type=best_answerer)].topics&offset=0&limit=20```
* 响应:json数据,会有关注用户资料
## 特性
* 大量使用http代理,突破同一个客户端访问量限制(注:使用的都是网上公开的免费代理,近期测试来看,部分免费代理网站都做了反爬,可用的免费代理比以前少了很多,抓取速度相比以前慢了很多)。
* 支持持久化(mongodb)。
* 多线程、高性能、支持横向扩展分布式爬取。
## TODO
* 新增问题、答案、文章抓取
* 支持实时抓取,每小时更新知乎全站所有热门内容
## 更新
### 2019.02.21
* 基于Spring Boot重构项目,支持横向扩展,分布式抓取
* 数据持久化采用mongodb
* 采用基于Netty的AsyncHttpClient代替HttpClient4.5
#### 2018.07.09
* 知乎网站更新,不再需要authorization验证
* 完善单测
* 修复已知bug
#### 2017.11.05
* 知乎authorization文件更新,修改authorization获取方式。
#### 2017.05.26
* 修复代理返回错误数据,导致java.lang.reflect.UndeclaredThrowableException异常。
#### 2017.03.30
* 知乎api变更,关注列表页不能获取到关注人数,导致线程池任务不能持续下去。抓取模式切换成原来ListPageThreadPool和DetailPageThreadPool的方式。
#### 2017.01.17
* 增加代理序列化。
* 调整项目结构,大幅度提高爬取速度。不再使用ListPageThreadPool和DetailPageThreadPool的方式。直接下载关注列表页,可以直接获取到用户详细资料。
#### 2017.01.10
* 不再采用登录抓取,并移除登录抓取相关模块,模拟登录的主要逻辑代码见[ModelLogin.java](https://github.com/wycm/zhihu-crawler/blob/2.0/src/main/java/com/crawl/zhihu/ModelLogin.java)。
* 优化项目结构,加快爬取速度。采用ListPageThreadPool和DetailPageThreadPool两个线程池。ListPageThreadPool负责下载”关注用户“列表页,解析出关注用户,将关注用户的url去重,然后放到DetailPageThreadPool线程池。
DetailPageThreadPool负责下载用户详情页面,解析出用户基本信息并入库,获取该用户的"关注用户"的列表页url并放到ListPageThreadPool。
#### 2016.12.26
* 移除未使用的包,修复ConcurrentModificationException和NoSuchElementException异常问题。
* 增加游客(免登录)模式抓取。
* 增加代理抓取模块。
## 免责申明
* 本项目仅供个人学习与交流使用,严禁用于商业以及不良用途。
## 最后
* 有问题的请提issue。
* 欢迎贡献代码。
* 爬虫交流群:633925314,欢迎交流。
* 需要数据的,关注公众号即可(117w知乎用户基本信息资料,该数据仅供个人学习与交流使用,严禁用于商业以及不良用途):lwndso<br>
![一个程序员日常分享,包括但不限于爬虫、Java后端技术,欢迎关注](https://raw.githubusercontent.com/wycm/md-image/master/2019-02-28/9.png)
没有合适的资源?快使用搜索试试~ 我知道了~
zhihucrawler是一个基于Java的高性能支持免费http代理池支持横向扩展分布式爬虫项目项目资源.zip
共147个文件
java:107个
sample:14个
xml:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 154 浏览量
2024-12-04
08:11:13
上传
评论
收藏 5.9MB ZIP 举报
温馨提示
是的第一步 重点:所有项目都有sql文件,比其他博主项目要严谨一万倍所有项目本人亲自测试可运行使用!!有任何问题私我解决! 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 求注关 所有9.9的项目,企业项目都有SQL文件,购买后运行部署可联系包你满意。不容易啊,谢谢大家支持!!
资源推荐
资源详情
资源评论
收起资源包目录
zhihucrawler是一个基于Java的高性能支持免费http代理池支持横向扩展分布式爬虫项目项目资源.zip (147个子文件)
.git\logs\refs\heads\3.0 192B
.git\refs\heads\3.0 41B
.git\config 298B
.git\description 73B
.git\HEAD 20B
.git\index 18KB
.git\info\exclude 240B
.git\logs\HEAD 192B
.git\logs\refs\remotes\origin\HEAD 192B
.git\packed-refs 404B
.git\refs\remotes\origin\HEAD 29B
.gitignore 105B
.git\objects\pack\pack-4522deb415663ea43ea4c37fbfd09fbf5f12c4ee.idx 111KB
common\src\main\java\com\github\wycm\common\util\SimpleHttpClient.java 7KB
proxy\src\main\java\com\github\wycm\proxy\AbstractPageTask.java 6KB
zhihu\src\main\java\com\github\wycm\zhihu\task\ZhihuProxyPageDownloadTask.java 5KB
zhihu\src\main\java\com\github\wycm\zhihu\task\ZhihuUserTask.java 5KB
common\src\main\java\com\github\wycm\common\Proxy.java 5KB
zhihu\src\main\java\com\github\wycm\zhihu\ZhihuConstants.java 5KB
zhihu\src\main\java\com\github\wycm\zhihu\task\TopicActivityPageTask.java 5KB
proxy\src\main\java\com\github\wycm\proxy\AbstractHttpClient.java 5KB
zhihu\src\main\java\com\github\wycm\zhihu\task\ZhihuTopicPageTask.java 4KB
common\src\main\java\com\github\wycm\common\TaskQueueService.java 4KB
common\src\main\java\com\github\wycm\common\ProxyQueue.java 4KB
zhihu\src\test\java\com\github\wycm\zhihu\util\Temp.java 3KB
zhihu\src\main\java\com\github\wycm\zhihu\service\sender\ZhihuUserTaskSender.java 3KB
proxy\src\main\java\com\github\wycm\proxy\AbstractPageProxyTestTask.java 3KB
zhihu\src\main\java\com\github\wycm\zhihu\service\sender\TopicPageTaskSender.java 3KB
common\src\main\java\com\github\wycm\common\util\Constants.java 3KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\ZhihuQuestionMongodbDao.java 3KB
proxy\src\main\java\com\github\wycm\proxy\ProxyPageProxyPool.java 3KB
zhihu\src\main\java\com\github\wycm\zhihu\service\receiver\BaseReceiver.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\ZhihuTopicMongodbDao.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\service\sender\ProxyPageDownloadTaskSender.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\task\ZhihuPageProxyTestTask.java 2KB
zhihu\src\test\java\com\github\wycm\zhihu\util\RedisLockTest.java 2KB
common\src\main\java\com\github\wycm\common\util\SimpleThreadPoolExecutor.java 2KB
common\src\main\java\com\github\wycm\common\util\ThreadPoolUtil.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\ZhihuTopicActivityMongodbDao.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\service\ZhihuComponent.java 2KB
common\src\main\java\com\github\wycm\common\util\RedisLockUtil.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\ZhihuUserMongodbDao.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\task\ZhihuProxyPageProxyTestTask.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\service\receiver\ProxyPageProxyTestReceiver.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\service\receiver\ProxyPageDownloadTaskReceiver.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\service\receiver\ZhihuPageProxyTestReceiver.java 2KB
common\src\main\java\com\github\wycm\common\LocalIPService.java 2KB
proxy\src\main\java\com\github\wycm\proxy\site\ip181\Ip181ProxyListPageParser.java 2KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\CrawledUrlMongodbDao.java 2KB
common\src\main\java\com\github\wycm\common\util\ThreadPoolMonitor.java 2KB
proxy\src\main\java\com\github\wycm\proxy\util\ProxyUtil.java 2KB
common\src\main\java\com\github\wycm\common\util\CrawlerUtils.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\parser\ZhihuTopicActivityMongoPageParser.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\ZhihuArticleMongodbDao.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\ZhihuAnswerMongodbDao.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\configuration\SpringMongoConfig.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\ZhihuUser.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\task\MultUrlsAbstractPageTask.java 1KB
proxy\src\main\java\com\github\wycm\proxy\site\qydaili\QydailiProxyListPageParser.java 1KB
proxy\src\main\java\com\github\wycm\proxy\config\JedisConfiguration.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\parser\ZhihuTopicMongoPageParser.java 1KB
proxy\src\main\java\com\github\wycm\proxy\site\ip66\Ip66ProxyListPageParser.java 1KB
proxy\src\main\java\com\github\wycm\proxy\site\ip89\Ip89ProxyListPageParser.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\parser\ZhihuUserPageParser.java 1KB
common\src\main\java\com\github\wycm\common\CrawlerMessage.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\Answer.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\CrawledUrl.java 1KB
proxy\src\main\java\com\github\wycm\proxy\site\xicidaili\XicidailiProxyListPageParser.java 1KB
proxy\src\main\java\com\github\wycm\proxy\site\mimiip\MimiipProxyListPageParser.java 1KB
proxy\src\main\java\com\github\wycm\proxy\site\kuaidaili\KuaiProxyListPageParser.java 1KB
proxy\src\main\java\com\github\wycm\proxy\ProxyHttpClient.java 1KB
common\src\main\java\com\github\wycm\common\Page.java 1KB
common\src\main\java\com\github\wycm\common\util\Md5Util.java 1KB
proxy\src\main\java\com\github\wycm\proxy\site\cnproxy\CnProxyListPageParser.java 1KB
proxy\src\main\java\com\github\wycm\proxy\site\ProxyListPageParserFactory.java 1KB
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\BaseMongodbDao.java 988B
common\src\main\java\com\github\wycm\common\ShutdownService.java 957B
zhihu\src\main\java\com\github\wycm\zhihu\service\receiver\TopicPageTaskReceiver.java 924B
proxy\src\test\java\com\github\wycm\proxy\site\xicidaili\XicidailiProxyListPageParserTest.java 909B
zhihu\src\main\java\com\github\wycm\zhihu\service\receiver\ZhihuUserTaskReceiver.java 900B
zhihu\src\main\java\com\github\wycm\zhihu\ZhihuHttpClient.java 892B
proxy\src\test\java\com\github\wycm\proxy\site\qydaili\QydailiProxyListPageParserTest.java 844B
proxy\src\test\java\com\github\wycm\proxy\site\mimiip\MimiipProxyListPageParserTest.java 823B
proxy\src\test\java\com\github\wycm\proxy\site\kuaidaili\KuaiProxyListPageParserTest.java 820B
zhihu\src\main\java\com\github\wycm\zhihu\util\CrawledUrlUtil.java 813B
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\Question.java 785B
common\src\main\java\com\github\wycm\common\util\PatternUtil.java 775B
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\Article.java 773B
proxy\src\main\java\com\github\wycm\proxy\site\ihuan\IhuanProxyListPageParser.java 742B
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\Target.java 723B
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\Author.java 702B
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\Topic.java 695B
zhihu\src\main\java\com\github\wycm\zhihu\configuration\ZhihuCrawlerConfiguration.java 678B
common\src\test\java\com\github\wycm\common\util\PatternUtilTest.java 637B
zhihu\src\main\java\com\github\wycm\zhihu\ZhihuCrawlerApplication.java 519B
zhihu\src\main\java\com\github\wycm\zhihu\dao\mongodb\entity\TopicActivity.java 498B
zhihu\src\test\java\com\github\wycm\zhihu\ExceptionTest.java 460B
common\src\main\java\com\github\wycm\common\CommonProperties.java 454B
zhihu\src\main\java\com\github\wycm\zhihu\ServletInitalizer.java 452B
zhihu\src\test\java\com\github\wycm\zhihu\util\AsyncHttpClientUtilTest.java 446B
共 147 条
- 1
- 2
资源评论
项目资源总站点博客专家
- 粉丝: 1528
- 资源: 6778
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功