新手爬虫教程:Python爬取知乎文章中的图片

欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。

新手爬虫教程:Python爬取知乎文章中的图片

前言

知乎,与世界分享你刚编好的故事.......

今天咱们就爬取一下知乎文章上面的图片,突然发现知乎上面的小姐姐图片还是挺好看的

基本环境配置

版本:Python3

系统:Windows

相关模块:requests

储存:MongoDB

关于pymongo的一些操作

新手爬虫教程:Python爬取知乎文章中的图片

导入pymongo,使用MongClient连接数据库,连接到myinfo数据库

新手爬虫教程:Python爬取知乎文章中的图片

insert,insert_one()只能插入一条数据,插入多条数据的格式是db.user.insert([{条数1},{条数2}]),一定要加[],否则只会添加进去第一条(user是一个集合,除了用db["collection"]外也可以用db.collection来对集合进行操作

新手爬虫教程:Python爬取知乎文章中的图片

update,$set:更新操作,multi=True:是否对查询到的全部数据进行操作,upsert=True:如果找不到查询的结果是否插入一条数据

db.user.update_one({"age":"2"},{"$set":{"name":"qian","age":2}})
db.user.update({"name":"sun"},{"$set":{"name":"qian"}},upsert=True)

update_one也是只能对一条数据进行操作,$set是update操作的$操作符,也可以用$inc或$push,前两个操作速度差不多,$push操作速度较慢。

打印出查询结果

from bson import json_util as jsonb
print(jsonb.dumps(list(db.user.find({"name":"wu"}))))
print(db.user.find({"name":"wu"}))
可以看到上面两种方式,不转换与转换后的结果对比如下:

新手爬虫教程:Python爬取知乎文章中的图片

*jsonb.dumps()将查询出来的结果转换成了可以读的list的格式,否则打印出来的是<pymongo.cursor.Cursor object at 0x02096DF0>这种格式的
遍历col1=db.user.find()查询到的所有结果,以及它key=name的value
for i in col1:
 print(i)
 print(i["name"])

知乎文章图片选取操作库和爬取地址

新手爬虫教程:Python爬取知乎文章中的图片

爬取使用requests 存储使用 mongodb 就可以了

爬取地址经过分析之后,找到了一个可以返回json的数据接口

新手爬虫教程:Python爬取知乎文章中的图片

提取链接,方便我们程序模拟,连接进行了URL编码,去找个解码工具解析一下,编程下面的URL就比较好解释了,answers后面跟了一堆的参数,应该是返回的关键字,找到limit每页显示的数据量,offset偏移量,我们下拉滚动条,发现这个在不断的叠加+5,sort_by 就是排序。

做好上面的工作,接下来就是爬取了,我简化了一下爬取的地址,只保留了一些关键的信息

知乎文章图片代码

新手爬虫教程:Python爬取知乎文章中的图片

运行结果为

新手爬虫教程:Python爬取知乎文章中的图片