zhaobig 2019-01-17
欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。
知乎,与世界分享你刚编好的故事.......
今天咱们就爬取一下知乎文章上面的图片,突然发现知乎上面的小姐姐图片还是挺好看的
版本:Python3
系统:Windows
相关模块:requests
储存:MongoDB
导入pymongo,使用MongClient连接数据库,连接到myinfo数据库
insert,insert_one()只能插入一条数据,插入多条数据的格式是db.user.insert([{条数1},{条数2}]),一定要加[],否则只会添加进去第一条(user是一个集合,除了用db["collection"]外也可以用db.collection来对集合进行操作
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"})) 可以看到上面两种方式,不转换与转换后的结果对比如下:
*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"])
爬取使用requests 存储使用 mongodb 就可以了
爬取地址经过分析之后,找到了一个可以返回json的数据接口
提取链接,方便我们程序模拟,连接进行了URL编码,去找个解码工具解析一下,编程下面的URL就比较好解释了,answers后面跟了一堆的参数,应该是返回的关键字,找到limit每页显示的数据量,offset偏移量,我们下拉滚动条,发现这个在不断的叠加+5,sort_by 就是排序。
做好上面的工作,接下来就是爬取了,我简化了一下爬取的地址,只保留了一些关键的信息
运行结果为