可以说爬虫是学习 Python 的入门必修课。当能独立写出第一个完整的爬虫的时候,我们已经迈出了一大步。因为在这过程中,我们已经学会了如何查看文档,学会使用 Python 相关库的操作,怎样使用 Chrome 的开发者工具(相关工具)和把抓取的数据保存到数据库中等等一系列操作,当然收获最多的还是学习 Python 的自信心。

下面以抓取知乎图片为例,迈出我们自学 Python 爬虫的第一步。
整体思路

在浏览知乎的时候,经常会看到一些有趣的问题,例如有什么万能表情包?,回答中网友分享了收藏多年的表情。但是近1500多条回答,手动保存表情不现实,所以使用爬虫帮我们完成这项工作。

首先我们需要做的是收集此类问题。获取问题的 ID(URL 中 question 后的 ID),构建爬虫任务池。收集问题的工作可以交给爬虫,但是为了抓取的图片都符合预期,建议先手动收集此类问题。然后将问题的 ID 存入数据库中,爬虫运行时读库获取需要爬取的目标贴。通过写一个爬虫,生成任务池多线程调用。将获取到的答案数据清洗,只收集答案中的图片。本案例我们使用 mongo 数据库,因为 mongo 数据库简单方便,也方便我们之后增减字段。

存入库中的结构和知乎的类似:答案集合保存所有答案,每一个答案是一条独立的文档。

具体类似这种结构:

其中Answer为数据库的集合,集合中的每一项是一条回答。用这种格式保存的好处是我们只需通过贴子的 ID 查询答案即可,保存起来也非常方便。

知乎爬虫

开始之前

在开始之前需要安装项目依赖,只用到两个常用库:

python3 -m pip install requests pymongo

分别用来请求 URL 和操作数据库。安装完成后记得启动mongo服务。

Spider

爬虫代码比较简单,关键找到知乎答案的接口,解析即可。而且这个接口也是非常好找的。此处用到 Chrome 的开发者工具。

接口也没有任何加密或权限限制,在请求头中加入Cookies就可以了。最后,如果你的时间不是很紧张,并且又想快速的python提高,最重要的是不怕吃苦,建议你可以架微♥信:2028979958 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

通过 Chrome 开发者工具分析,请求携带了如下参数,我们只用到limit和offset,用来控制接口返回的数量和返回的位置。

完整的请求 URL 是:

只要动态更改其中的question,limit和offset就可以了。通过接口返回的答案总数,判断需要翻多少页,当然也可以通过接口返回的next和previous来获取下一页或前一页答案链接。

当然在翻页抓取的时候切记设置睡眠时间,放在服务器上爬的慢一点也没关系。我们控制好频率,不要影响到知乎的正常服务

请求成功后我们就可以根据自己的需求,存储数据了,至于如何判断答案中是否有图片,可以参考以下代码。

使用到了lxml库,也可以使用re库代替。

先判断回答中是否有img标签,如果没有直接返回空列表,如果有的话,通过data-original属性获取原始大小的图片链接。也是返回一个包含图片链接的列表。

在入库的时候,我们通过parse_content的返回判断是否需要入库,如果是[]就跳过,如果列表不为空就入库。这样在之后根据作者展示数据的时候不会只显示作者信息,却没有回答的情况了(其实是该作者回答中只有问题没有图片)。

调用爬虫

当我们完成上述操作,就可以单独写一个文件使用多线程调用爬虫了。

qid_list来自查库获取所有的知乎贴子 ID。使用concurrent.futures库并行执行任务,在我们的代码里使用ThreadPoolExecutor,它使用线程池来异步执行调用。max_workers控制最多线程的使用,本例中使用最多4个线程执行任务。ThreadPoolExecutor让我们使用多线程时更加简单。具体文档见 ThreadPoolExecutor。

总结

代码比较简单,项目只要思路明确,分而治之,实现了所有的小部分,也就实现了整个项目的大部分。

最后总结一下整体思路:我们先把需要抓取的 ID 存入数据库,作为任务池,爬虫调取任务池中的 ID,将爬取结果再保存到数据库。

等我们学会了 Python 爬虫,再学 Web 开发的时候,还能将我们抓取的结果展示出来,做一个表情包大全网站。一不小心又学习了 Python Web 开发,多好。

python福利教程领取方式:
1、点赞+评论(勾选“同时转发”)
2、关注小编。并私信回复关键字【19】
(一定要私信哦~点击我的头像就能看到私信按钮了)

Python 爬虫没有思路?可以看看这篇文章相关推荐

  1. 实现Python爬虫的思路、原理

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云,作者:梧雨北辰 是在学习Python基础知识之后的一次小小尝 ...

  2. Python爬虫设计思路

    Python爬虫设计思路 一.爬虫架构 爬虫调度端:一般指的入口函数,发起动作的入口. URL管理器:存放待爬取网站的URL和已爬取过的URL的功能(python内存.关系数据库.缓存数据库). 网页 ...

  3. Python爬虫获取简书的用户、文章、评论、图片等数据,并存入数据库

    Python爬虫获取简书的用户.文章.评论.图片等数据,并存入数据库 爬虫定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维 ...

  4. python爬虫用途-Python爬虫入门知识:解析数据篇

    首先,让我们回顾一下入门Python爬虫的四个步骤吧: 而解析数据,其用途就是在爬虫过程中将服务器返回的HTML源代码转换为我们能读懂的格式.那么,接下来就正式进入到解析数据篇的内容啦. Part 1 ...

  5. 时隔3年,摄影网站依旧可用,果然靠谱,Python爬虫100例,第2篇复盘文章

    爬虫 100 例专栏复盘系列第二篇文章 本次要复盘爬虫 100 例专栏中的,第 5,6,7,8 篇博客,刷新部分案例,以及解答大家在评论区提供的相关问题. 案例五:图片网爬虫 原案例学习博客参考:ht ...

  6. python爬虫防呆笔记:正则表达式篇之一

    python爬虫笔记 第一部分:正则表达式 基本效果展示 加载猫眼电影网的html文本作为训练文本 这里先讲一下header,这里的header就写一项,不写就爬不出来,这一项是User-Agent, ...

  7. 听说你的爬虫老是被封?这篇文章来给你指路!

    时间过得真快,距离这个系列的上一篇文章< 那么在准备篇中,我们了解了一下搭建 4G 代理所需要的软硬件,也知道了各种选择的优劣势.现在,我们就可以开始实际搭建了,相信大家也是期待已久了. 基本思 ...

  8. 学习python很无趣?看看这篇文章教你采集无水印美女视频(含视频教程)

    前言 嗨嗨,大家下午好 ~ 我又来给你们送福利了嘿嘿 今天教你们如何用python实现批量采集美女视频 ~ 小声说:这次还有视频教程! 正文 环境使用 Python 3.8 Pycharm 谷歌浏览器 ...

  9. python装饰器原理-看完这篇文章还不懂Python装饰器?

    原标题:看完这篇文章还不懂Python装饰器? 1.必备 2.需求来了 初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作.redis调用.监控API等功能.业务部门 ...

最新文章

  1. vector 作为dll 接口参数_DLL中传递STL参数,vector对象作为dll参数传递等问题(转)...
  2. 【Python-ML】非线性映射降维-KPCA方法
  3. 启动之OS_CPU_C
  4. TensorFlow Lite学习笔记
  5. 《白鹿原》金句摘抄(三)
  6. 1.1.29 加入项目符号后换行文字未对齐
  7. ai的弹窗点了都不响应_怎么吃都不胖?这8点增重看了就能跟着做
  8. Mbox vs Maildir - 两者原理和区别
  9. .htaccess文件玩转Rewrite
  10. ThinkPHP5 助手函数
  11. selenium启动火狐浏览器_selenium之nodejs入门使用
  12. 什么是cc攻击以及个人网站遭到cc攻击的解决方法
  13. 计算机奖项含金量排名,2019五大学科竞赛含金量排名
  14. WPS添加下划线,文字尾部不显示下划线问题解决(一个So stupid问题)
  15. Selenium+Firefox/Chrome及驱动的安装和使用
  16. Error in sitecustomize; set PYTHONVERBOSE for traceback: NameError: name 'modules_list' is not defin
  17. python---持续学习
  18. Linux 时间同步systemd-timesyncd介绍
  19. 教你读懂大数据,云计算,AI
  20. Jetson 开发软件栈介绍

热门文章

  1. JAVA 的面向对象设计的特点-书后感-01-21天学通JAVA-深入分析
  2. python 文件相似度分析_使用Python做人群相似度分析
  3. 链表中环的入口结点 python_【Github 5K星】BAT头条滴滴小米等笔试面经+深度学习/算法/NLP资源汇总!...
  4. optimized mysql_MySQL解释计划中“Select tables optimized away”的含义
  5. web项目java程序的作用_基础知识(javaWeb工程目录结构)及各文件夹的作用
  6. mysql创建表时外连接_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)_MySQL...
  7. eclipse 插件扩展新建java页面_java-Eclipse插件:创建动态菜单和相应的处理...
  8. 鹤岗一中2021年高考成绩查询,2021鹤岗市地区高考成绩排名查询,鹤岗市高考各高中成绩喜报榜单...
  9. python sendfile_python发邮件
  10. api pdo php,从PHP Mysql API转换为PDO时如何处理数据类型