新手爬蟲教程:Python爬取知乎文章中的圖片

嗨學程式設計發表於2019-01-17

前言

知乎,與世界分享你剛編好的故事.......

今天我們們就爬取一下知乎文章上面的圖片,突然發現知乎上面的小姐姐圖片還是挺好看的

基本環境配置

版本:Python3

系統:Windows

相關模組:requests

儲存:MongoDB

本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並不斷的成長,掌握Python核心技術,才是掌握真正的價值所在。 

關於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爬取知乎文章中的圖片


相關文章