本篇文章為大家展示了Python中如何使用requsets獲取知乎最有價(jià)值的內(nèi)容,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
十多年的嵩明網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整嵩明建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“嵩明網(wǎng)站設(shè)計(jì)”,“嵩明網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。一 前言
使用requsets 爬取知乎中最優(yōu)價(jià)值的內(nèi)容,寫一段獲取內(nèi)容的python程序。
二 踐行
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import re
import requests
import os
from urlparse import urlsplit
from os.path import basename
def getHtml(url):
session = requests.Session()
# 模擬瀏覽器訪問(wèn)
header = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
'Accept-Encoding': 'gzip, deflate'}
res = session.get(url, headers=header)
if res.status_code == 200:
content = res.content
else:
content = ''
return content
def mkdir(path):
if not os.path.exists(path):
print '新建文件夾:', path
os.makedirs(path)
return True
else:
print u"圖片存放于:", os.getcwd() + os.sep + path
return False
def download_pic(img_lists, dir_name):
print "一共有 {num} 張照片".format(num=len(img_lists))
for image_url in img_lists:
response = requests.get(image_url, stream=True)
if response.status_code == 200:
image = response.content
else:
continue
file_name = dir_name + os.sep + basename(urlsplit(image_url)[2])
try:
with open(file_name, "wb") as picture:
picture.write(image)
except IOError:
print("IO Error\n")
return
finally:
picture.close
print "下載 {pic_name} 完成!".format(pic_name=file_name)
def getAllImg(html):
# 利用正則表達(dá)式把源代碼中的圖片地址過(guò)濾出來(lái)
#reg = r'data-actualsrc="(.*?)">'
reg = r'https://pic\d.zhimg.com/[a-fA-F0-9]{5,32}_\w+.jpg'
imgre = re.compile(reg, re.S)
tmp_list = imgre.findall(html) # 表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
# 清理掉頭像和去重 獲取data-original的內(nèi)容
tmp_list = list(set(tmp_list)) # 去重
imglist = []
for item in tmp_list:
if item.endswith('r.jpg'):
img_list.append(item)
print 'num : %d' % (len(imglist))
return imglist
if __name__ == '__main__':
question_id = 35990613
zhihu_url = "https://www.zhihu.com/question/{qid}".format(qid=question_id)
html_content = getHtml(zhihu_url)
path = 'zhihu_pic'
mkdir(path) # 創(chuàng)建本地文件夾
img_list = getAllImg(html_content) # 獲取圖片的地址列表
download_pic(img_list, path) # 保存圖片
本代碼還存在一些不足的地方,無(wú)法完全獲取全部的圖片,需要在兼容 自動(dòng)點(diǎn)擊 ”更多“ 加載更多答案。
代碼第二版解決了第一版代碼中不能自動(dòng)加載的問(wèn)題。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import re
import requests
import os
from urlparse import urlsplit
from os.path import basename
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
'Accept-Encoding': 'gzip, deflate'}
def mkdir(path):
if not os.path.exists(path):
print '新建文件夾:', path
os.makedirs(path)
return True
else:
print u"圖片存放于:", os.getcwd() + os.sep + path
return False
def download_pic(img_lists, dir_name):
print "一共有 {num} 張照片".format(num=len(img_lists))
for image_url in img_lists:
response = requests.get(image_url, stream=True)
if response.status_code == 200:
image = response.content
else:
continue
file_name = dir_name + os.sep + basename(urlsplit(image_url)[2])
try:
with open(file_name, "wb") as picture:
picture.write(image)
except IOError:
print("IO Error\n")
continue
finally:
picture.close
print "下載 {pic_name} 完成!".format(pic_name=file_name)
def get_image_url(qid, headers):
# 利用正則表達(dá)式把源代碼中的圖片地址過(guò)濾出來(lái)
#reg = r'data-actualsrc="(.*?)">'
tmp_url = "https://www.zhihu.com/node/QuestionAnswerListV2"
size = 10
image_urls = []
session = requests.Session()
# 利用循環(huán)自動(dòng)完成需要點(diǎn)擊 “更多” 獲取所有答案,每個(gè)分頁(yè)作為一個(gè)answer集合。
while True:
postdata = {'method': 'next', 'params': '{"url_token":' +
str(qid) + ',"pagesize": "10",' + '"offset":' + str(size) + "}"}
page = session.post(tmp_url, headers=headers, data=postdata)
ret = eval(page.text)
answers = ret['msg']
size += 10
if not answers:
print "圖片URL獲取完畢, 頁(yè)數(shù): ", (size - 10) / 10
return image_urls
#reg = r'https://pic\d.zhimg.com/[a-fA-F0-9]{5,32}_\w+.jpg'
imgreg = re.compile('data-original="(.*?)"', re.S)
for answer in answers:
tmp_list = []
url_items = re.findall(imgreg, answer)
for item in url_items: # 這里去掉得到的圖片URL中的轉(zhuǎn)義字符'\\'
image_url = item.replace("\\", "")
tmp_list.append(image_url)
# 清理掉頭像和去重 獲取data-original的內(nèi)容
tmp_list = list(set(tmp_list)) # 去重
for item in tmp_list:
if item.endswith('r.jpg'):
print item
image_urls.append(item)
print 'size: %d, num : %d' % (size, len(image_urls))
if __name__ == '__main__':
question_id = 26037846
zhihu_url = "https://www.zhihu.com/question/{qid}".format(qid=question_id)
path = 'zhihu_pic'
mkdir(path) # 創(chuàng)建本地文件夾
img_list = get_image_url(question_id, headers) # 獲取圖片的地址列表
download_pic(img_list, path) # 保存圖片
上述內(nèi)容就是Python中如何使用requsets獲取知乎最有價(jià)值的內(nèi)容,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
網(wǎng)站名稱:Python中如何使用requsets獲取知乎最有價(jià)值的內(nèi)容-創(chuàng)新互聯(lián)
本文URL:http://muchs.cn/article2/dsgcoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、小程序開發(fā)、建站公司、定制網(wǎng)站、品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容