知乎爬虫(scrapy默认配置下单机1小时可爬取60多万条数据)

版本:1.0
作者: AlexTan
CSDN: http://blog.csdn.net/alextan_
e-mail: alextanbz@gmail.com
Github: https://github.com/AlexTan-b-z

代码请移步GitHub:ZhihuSpider


前言:

在这里特别鸣谢: 九茶 http://blog.csdn.net/bone_ace


学了爬虫差不多快一年了,然而由于项目原因,这还是第一次发爬虫的博客,在学习的过程中,受益最大的就是看了九茶的微博爬虫吧,所以在这里特别鸣谢。 他的代码里涉及了很多:自动化技术、模拟登录、分布式、redis、mongodb等都有涉及,而且还讲了代码的可复用性,深受启发。 不过,对于爬虫的知识块儿来讲,还没涉及抓包(因为个人觉得,如果只抓取json数据的话,会比抓取普通网页速度来得快得多)、以及自动更换IP技术,于是在这里写一个知乎爬虫的博客,这篇博客里,除了九茶的微博爬虫所涉及的知识以外,还有抓包、以及更换ip技术,欢迎大家提问,互相学习。

环境:

  1. Ubuntu16.04
  2. Python环境是ubuntu自带的python3.5.2
  3. 需要安装的软件Redis, MongoDB, Phantomjs;
  4. 需要安装的python模块:scrapy, scrapy-redis, selenium
  5. 电脑是用的小米笔记本4999元的那个版本,如果是台式机的话速度应该会更快。(ps:如果想更快,可以加大setting.py 中的 CONCURRENT_REQUESTS的值,这个值默认是16,可以调大,直到CPU使用率达到80-90%,相信速度会快很多,绝不仅仅是一分钟6000多条。当然也可以在单机上多进程爬取)

使用说明:

  1. 打开cookie.py,填入你的知乎账号密码
  2. 运行爬虫 : scrapy crawl zhishuspider 即可
  3. 分布式扩展:把代码考到新一台机器上,只需要把setting.py里的REDIS_HOSTFILTER_HOST改成主机的地址就好,其他的根据自己的具体情况修改。然后运行即可。
  4. 提示:如果你的账号数量不够多,建议把DOWNLOAD_DELAY开启(即把代码里注释的那四行取消注释掉),数值多少根据自己具体情况更改。

代码说明:

  1. 爬虫基于scrapy+redis架构进行开发、优化。
  2. 爬虫支持断点续爬。
  3. 非常简易地,便可实现分布式扩展。
  4. 使用Redis的“位”进行去重,1G的内存可满足80亿个用户ID的瞬间去重。
  5. 将种子优化到不足40个字符,大大降低了Redis的内存消耗,也提高了各子爬虫从Redis取种子的速度。
  6. 维护了一个Cookie池,各子机器共用一个Cookie池,断点续爬不会重复获取Cookie,当某个Cookie失效时会自动更新。
  7. 直接爬取通过抓包得到的json格式的链接,请求速度更快、爬取速度更快。单机一小时可爬取60多万条数据
  8. 代码中自带proxy(自动更换ip),但并未启用,经测试,只要账号数量够多,暂不需要启用,如需启用,请自行购买代理ip,并修改代码proxy.py中GetIPPOOLS()函数(我是用的大象代理,5元20000个,不是广告,挺便宜,但真心觉得不咋好用,每十个ip差不多有一个能用(延迟在2s内)),如果你是用的大象代理,就不需要修改代码。
  9. 支持手动识别验证码和自动识别验证码,如需自动登录,请自行购买云打码平台账号。默认启动的是手动识别,需要手动输入验证码。如果你想自己写个代码识别验证码,那也是可以的。

爬取内容:

  1. 用户的个人信息以及粉丝和关注的人(可以生成用户的拓扑关系图)
  2. 用户的回答
  3. 用户的提问
  4. 文章

爬取字段:

ZhihuItem(用户个人信息):

字段名 含义
user_id 用户id
user_image_url 用户头像链接
name 用户昵称
locations 用户住址
business 用户所在行业
employments 用户职业经历
gender 用户性别
education 用户教育经历
followees_num 用户关注数
followers_num 用户粉丝数

RelationItem(关系):

字段名 含义
user_id 用户id
relation_type 关系类型
relations_id 关系的人的id

AnswerItem(回答):

字段名 含义
answer_user_id 回答的用户
answer_id 回答内容的id
question_id 问题的id
cretated_time 创建的时间戳
updated_time 更新的时间戳
voteup_count 赞成数
comment_count 评论数
content 回答内容

QuestionItem(问题):

字段名 含义
ask_user_id 提问人的id
question_id 问题的id
ask_time 提问时间
answer_count 回答数量
followees_count 关注数量
title 提问标题

ArticleItem(文章):

字段名 含义
author_id 作者id
title 文章标题
article_id 文章id
content 文章内容
cretated_time 创建时间戳
updated_time 更新时间戳
voteup_count 赞成数
comment_count 评论数

关于抓包获取到的几个链接问题:

未登录状态下需要Authorization才能访问json数据的链接,带登录后的cookie访问就不需要了。

Authorization可以通过访问任意一个用户页面在请求json数据链接中的header中获取,建议通过模拟浏览器的方式获取,不过如果登陆了就不需要了,故代码中没有获取Authorization


最后,欢迎大家提出问题,共同学习!!!

转载请注明出处,谢谢!(原文链接: http://blog.csdn.net/AlexTan_/article/details/77057068)

知乎爬虫(scrapy默认配置下单机1小时可爬取60多万条数据)相关推荐

  1. (转)Python网络爬虫实战:世纪佳缘爬取近6万条数据

    又是一年双十一了,不知道从什么时候开始,双十一从"光棍节"变成了"双十一购物狂欢节",最后一个属于单身狗的节日也成功被攻陷,成为了情侣们送礼物秀恩爱的节日. 翻 ...

  2. Python网络爬虫实战:世纪佳缘爬取近6万条小姐姐数据后发现惊天秘密

    翻着安静到死寂的聊天列表,我忽然惊醒,不行,我们不能这样下去,光羡慕别人有什么用,我们要行动起来,去找自己的幸福!!! 我也想"谈不分手的恋爱" !!!内牛满面!!! 注册登陆一气 ...

  3. denied 登陆后access_Python网络爬虫实战:世纪佳缘爬取近6万条小姐姐数据后发现惊天秘密...

    翻着安静到死寂的聊天列表,我忽然惊醒,不行,我们不能这样下去,光羡慕别人有什么用,我们要行动起来,去找自己的幸福!!! 我也想"谈不分手的恋爱" !!!内牛满面!!! 注册登陆一气 ...

  4. Python爬虫实战:世纪佳缘爬取近6万条小姐姐数据!脱单的有望!

    马上又是一年双十一了,不知道从什么时候开始,双十一从"光棍节"变成了"双十一购物狂欢节",最后一个属于单身狗的节日也成功被攻陷,成为了情侣们送礼物秀恩爱的节日. ...

  5. scrapy框架下的豆瓣电影评论爬取以及登录,以及生成词云和柱状图

    由于豆瓣在今年5月份已经禁止展示所有短评,只展示最热的500条数据,并且在爬取到240条的时候,如果没有登录的话,会提示登录. 因此几天的爬虫,包括豆瓣的自动登录和数据爬取后批量存入pymysql数据 ...

  6. python爬取新浪新闻首页_Python爬虫学习:微信、知乎、新浪等主流网站的模拟登陆爬取方法...

    微信.知乎.新浪等主流网站的模拟登陆爬取方法 摘要:微信.知乎.新浪等主流网站的模拟登陆爬取方法. 网络上有形形色色的网站,不同类型的网站爬虫策略不同,难易程度也不一样.从是否需要登陆这方面来说,一些 ...

  7. 【爬虫+数据可视化】Python爬取CSDN博客访问量数据并绘制成柱状图

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业及非法用途,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/ ...

  8. 分布式爬虫联系项目1–阳光热线网站的分布式爬取

    要爬取的目标网站地址:http://wz.sun0769.com/political/index/politicsNewest?id=1&page=1 要爬取的内容为问政标题和处理状态. 1. ...

  9. python—简单数据抓取七(采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用,利用ip池访问网页并将scrapy爬取转移到items的数据存入到数据库)

    学习目标: Python学习二十七-简单数据抓取七 学习内容: 1.采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用 2.利用ip池访问网页并将scrapy爬取转移到it ...

最新文章

  1. 阿里云推出全球首个影像类应用一站式解决方案:智能云相册
  2. 算法--------俄罗斯套娃信封问题(Java版本)
  3. 怀旧服湖畔镇服务器位置,《魔兽世界怀旧服》今天再开10组新服 47组服务器免费转服开启...
  4. ROS+Turtlebot3+RVIZ 显示机器人历史轨迹方法
  5. 【阿里云OSS】OSS概述
  6. 6410 gpio控制及接口
  7. 【第五组】头脑风暴+核心竞争力+NABCD+个人(用例+功能+技术说明书) 最后修改时间 2017.07.13...
  8. 档案信息化管理的最好解决方案
  9. OneNote怎样显示或者隐藏网格线
  10. 下一个十年,互联网升级的大致方向在哪里?
  11. 如何去定义一个jquery插件
  12. LINUX下设置定时运行PERL脚本
  13. sqlite数据库文件的下载编译和VS中数据库创建demo
  14. 别人的计算机网络看不到,局域网内看不到别人的电脑怎么办
  15. 【JavaBigDecimal练习】利用BigDecimal精确计算欧拉数
  16. Process finished with exit code -1073740791 (0xC0000409)报错解决方案
  17. chmod的使用 czy:czy 文件名
  18. 屏幕尺寸、分辨率、像素密度及其三者之间的关系
  19. mysql frm ibd 创建表_MySQL数据库实现从.frm文件和.ibd文件恢复数据表方法
  20. Linux 运维经验

热门文章

  1. vulnhub:DC1靶机
  2. 问卷调查工具实力榜单发布
  3. 03-HTML框架介绍——body
  4. 同济大学计算机学院徐老师,罗怡桂 - 师资队伍 - 同济大学软件学院
  5. 问题解决:windows未能启动,原因可能是最近更改了硬件或软件
  6. 针对不同消费行为,如何开展个性化会员管理?
  7. Python四平方和
  8. premiumSoft激活方法
  9. 计算机中的进制(二进制,八进制,十进制,十六进制)
  10. word多个文档替换内容