可以说爬虫是学习 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就可以了。

通过 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学爬虫、还没放出来_Python 爬虫学习没思路?可以看看这篇文章相关推荐

  1. 学计算机还在迷茫的你。请仔细的看完这篇文章

    据统计大部分普通本科及大专情况都是如下,在学校学着杂七杂八的课程:Office办公软件.C语言.计算机网络基础.操作系统原理.网络安全技术与防范.java语言.数据库.linux,html等等.学一门 ...

  2. python的坏处_六星教育:爬虫还分好坏?恶意爬虫到底会给你生活造成多大危害?...

    原标题:六星教育:爬虫还分好坏?恶意爬虫到底会给你生活造成多大危害? 随着互联网的兴起,数据时代的来临,Python越来越受到人们的重视,六星教育对此开设了Python课程,以帮助更多同学提升技能.不 ...

  3. python爬虫post请求翻页_python爬虫如何POST request payload形式的请求

    python爬虫如何POST request payload形式的请求 1. 背景 最近在爬取某个站点时,发现在POST数据时,使用的数据格式是request payload,有别于之前常见的 POS ...

  4. python爬虫资源路径报错_python爬虫

    一.网络爬虫介绍 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成. 例如,百度.google搜索某关键字时,就是爬取整个互联网上的相关资源,给呈现出来. 实际爬 ...

  5. python的requests库的添加代理_python爬虫之requests库使用代理

    python爬虫之requests库使用代理 发布时间:2020-03-25 17:00:54 来源:亿速云 阅读:110 作者:小新 今天小编分享的是关于python爬虫的requests库使用代理 ...

  6. python爬虫用多线程还是多进程_python爬虫之多线程、多进程爬虫

    多线程对爬虫的效率提高是非凡的,当我们使用python的多线程有几点是需要我们知道的: countdown是一个计数的方法,正常执行它,我们一般使用countdown(10),就可以达到执行的目的,当 ...

  7. python爬虫十二种方法_Python爬虫的N种姿势

    问题的由来 前几天,在微信公众号(Python爬虫及算法)上有个人问了笔者一个问题,如何利用爬虫来实现如下的需求,需要爬取的网页如下(网址为:https://www.wikidata.org/w/in ...

  8. python爬虫用到的技术_python爬虫技术的选择

    本篇文章不是入门帖,需要对python和爬虫领域有所了解. 爬虫又是另外一个领域,涉及的知识点比较多,不仅要熟悉web开发,有时候还涉及机器学习等知识,不过在python里一切变的简单,有许多第三方库 ...

  9. python豆瓣电影需研究的问题_python爬虫获取豆瓣电影——多线程问题

    25 May 2015 GIL全称Global Interpreter Lock(全局解释器锁),它是在实现Python解析器(CPython)时所引入的一个概念.但是它并不是Python的特性.Py ...

  10. python爬虫库是什么意思_Python爬虫基础-两个实用库

    用Python学爬虫最大的好处就是python有很多实用库,免去了我们自己造轮子的环节,那么找哪些轮子呢?Python爬虫有两个比较实用的库,Requests和Beautiful Soup.我认为学好 ...

最新文章

  1. cmd命令简单别木马的蛛丝马迹
  2. 蓝桥杯练习系统—算法训练 s01串
  3. sqoop将hive导出到mysql_Sqoop hive导出到mysql[转]
  4. mysql5.7.24怎么打开_mysql-5.7.24-winx64安装教程
  5. POJ-3041 匈牙利算法 二分图最大匹配
  6. linux hosts文件如何修改_3 种方法教你在 Linux 中修改打开文件数量限制
  7. clickhouse创建数据库以及表
  8. 实现截图页面并导出word
  9. 中介者模式(Mediator)
  10. 数字信号处理 matlab 答案,数字信号处理原理及其matlab实现课后习题解答
  11. 服务器无线网卡ap软件,无线网卡虚拟成无线AP工具(将无线网卡虚拟成无线AP软件) 2017最新版...
  12. 拼多多API接口(附上我的可用API)
  13. 台式win10电脑耳机没声音
  14. 不限专业和工作年限就能报考的证书有哪些?
  15. 刷题笔记——兑换零钱(一)
  16. 如何做好团队测试建设
  17. python合法标识符_Python isidentifier()判断是否为Python的合法标识符
  18. iMessage 群发
  19. 单片机彩灯移动实验_单片机动态控制64个彩灯实验报告
  20. Hibernate高级映射技术(二)自定义数据类型StringMap(转)

热门文章

  1. 推荐 | 一个超好的OpenCV4学习社区
  2. 超8千Star,火遍Github的Python反直觉案例集!
  3. 字节跳动 AI Lab 21届校招启动啦!
  4. 直击前沿技术:云原生应用低代码开发平台实践
  5. 连载丨《极简设计:苹果崛起之道》——硅谷伊甸园(三)
  6. 5.1 Attention(注意力)概述 原理、作用、计算流程
  7. python里面两个大于号_听说92.8%的人答不对这道Python题,我不信,后来我信了!真有趣...
  8. android 打包问题,Android离线打包常见问题
  9. 数据结构和算法liuyubobo_C++,java算法与数据结构-某课网价值166元实战教程
  10. ADT(Android) — Eclipse开发连接夜神模拟器方法(亲测有效!)