Python爬取知乎圖片代碼實(shí)現(xiàn)解析
首先,需要獲取任意知乎的問題,只需要你輸入問題的ID,就可以獲取相關(guān)的頁(yè)面信息,比如最重要的合計(jì)有多少人回答問題。
問題ID為如下標(biāo)紅數(shù)字
編寫代碼,下面的代碼用來(lái)檢測(cè)用戶輸入的是否是正確的ID,并且通過拼接URL去獲取該問題下面合計(jì)有多少答案。
import requests
import re
import pymongo
import time
DATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.zhihuone # 準(zhǔn)備插入數(shù)據(jù)
BASE_URL = "https://www.zhihu.com/question/{}"
def get_totle_answers(article_id):
headers = {
"user-agent": "需要自己補(bǔ)全 Mozilla/5.0 (Windows NT 10.0; WOW64)"
}
with requests.Session() as s:
with s.get(BASE_URL.format(article_id),headers=headers,timeout=3) as rep:
html = rep.text
pattern =re.compile( '<meta itemProp="answerCount" content="(\d*?)"/>')
s = pattern.search(html)
print("查找到{}條數(shù)據(jù)".format(s.groups()[0]))
return s.groups()[0]
if __name__ == '__main__':
# 用死循環(huán)判斷用戶輸入的是否是數(shù)字
article_id = ""
while not article_id.isdigit():
article_id = input("請(qǐng)輸入文章ID:")
totle = get_totle_answers(article_id)
if int(totle)>0:
zhi = ZhihuOne(article_id,totle)
zhi.run()
else:
print("沒有任何數(shù)據(jù)!")
完善圖片下載部分,圖片下載地址在查閱過程中發(fā)現(xiàn),存在json字段的content中,我們采用簡(jiǎn)單的正則表達(dá)式將他匹配出來(lái)。細(xì)節(jié)如下圖展示

編寫代碼吧,下面的代碼注釋請(qǐng)仔細(xì)閱讀,中間有一個(gè)小BUG,需要手動(dòng)把pic3修改為pic2這個(gè)地方目前原因不明確,可能是我本地網(wǎng)絡(luò)的原因,還有請(qǐng)?jiān)陧?xiàng)目根目錄先創(chuàng)建一個(gè)imgs的文件夾,用來(lái)存儲(chǔ)圖片
def download_img(self,data):
## 下載圖片
for item in data["data"]:
content = item["content"]
pattern = re.compile('<noscript>(.*?)</noscript>')
imgs = pattern.findall(content)
if len(imgs) > 0:
for img in imgs:
match = re.search('<img src="(.*?)"', img)
download = match.groups()[0]
download = download.replace("pic3", "pic2") # 小BUG,pic3的下載不到
print("正在下載{}".format(download), end="")
try:
with requests.Session() as s:
with s.get(download) as img_down:
# 獲取文件名稱
file = download[download.rindex("/") + 1:]
content = img_down.content
with open("imgs/{}".format(file), "wb+") as f: # 這個(gè)地方進(jìn)行了硬編碼
f.write(content)
print("圖片下載完成", end="\n")
except Exception as e:
print(e.args)
else:
pass
運(yùn)行結(jié)果為

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Pytorch mask_select 函數(shù)的用法詳解
今天小編就為大家分享一篇Pytorch mask_select 函數(shù)的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-02-02
Pyqt清空某一個(gè)QTreeewidgetItem下的所有分支方法
今天小編就為大家分享一篇Pyqt清空某一個(gè)QTreeewidgetItem下的所有分支方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-06-06
python樹狀打印項(xiàng)目路徑的實(shí)現(xiàn)
在Python中,要打印當(dāng)前路徑,可以使用os模塊中的getcwd()函數(shù),本文主要介紹了python樹狀打印項(xiàng)目路徑,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
postman發(fā)送文件請(qǐng)求并以python服務(wù)接收方式
這篇文章主要介紹了postman發(fā)送文件請(qǐng)求并以python服務(wù)接收方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
python matplotlib擬合直線的實(shí)現(xiàn)
這篇文章主要介紹了python matplotlib擬合直線的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
jupyter notebook更換皮膚主題的實(shí)現(xiàn)
這篇文章主要介紹了jupyter notebook更換皮膚主題的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

