Python中如何使用requsets獲取知乎最有價值的內(nèi)容-創(chuàng)新互聯(lián)

本篇文章為大家展示了Python中如何使用requsets獲取知乎最有價值的內(nèi)容,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

十多年的嵩明網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整嵩明建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“嵩明網(wǎng)站設(shè)計”,“嵩明網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

一 前言 
  使用requsets 爬取知乎中最優(yōu)價值的內(nèi)容,寫一段獲取內(nèi)容的python程序。

二 踐行

  1. #!/usr/bin/env python

  2. #-*- coding:utf-8 -*-

  3. import re

  4. import requests

  5. import os

  6. from urlparse import urlsplit

  7. from os.path import basename

  8. def getHtml(url):

  9.     session = requests.Session()

  10.     # 模擬瀏覽器訪問

  11.     header = {

  12.         'User-Agent': "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",

  13.         'Accept-Encoding': 'gzip, deflate'}

  14.     res = session.get(url, headers=header)

  15.     if res.status_code == 200:

  16.         content = res.content

  17.     else:

  18.         content = ''

  19.     return content

  20. def mkdir(path):

  21.     if not os.path.exists(path):

  22.         print '新建文件夾:', path

  23.         os.makedirs(path)

  24.         return True

  25.     else:

  26.         print u"圖片存放于:", os.getcwd() + os.sep + path

  27.         return False

  28. def download_pic(img_lists, dir_name):

  29.     print "一共有 {num} 張照片".format(num=len(img_lists))

  30.     for image_url in img_lists:

  31.         response = requests.get(image_url, stream=True)

  32.         if response.status_code == 200:

  33.             image = response.content

  34.         else:

  35.             continue

  36.         file_name = dir_name + os.sep + basename(urlsplit(image_url)[2])

  37.         try:

  38.             with open(file_name, "wb") as picture:

  39.                 picture.write(image)

  40.         except IOError:

  41.             print("IO Error\n")

  42.             return

  43.         finally:

  44.             picture.close

  45.             print "下載 {pic_name} 完成!".format(pic_name=file_name)

  46. def getAllImg(html):

  47.     # 利用正則表達式把源代碼中的圖片地址過濾出來

  48.     #reg = r'data-actualsrc="(.*?)">'

  49.     reg = r'https://pic\d.zhimg.com/[a-fA-F0-9]{5,32}_\w+.jpg'

  50.     imgre = re.compile(reg, re.S)

  51.     tmp_list = imgre.findall(html) # 表示在整個網(wǎng)頁中過濾出所有圖片的地址,放在imglist中

  52.     # 清理掉頭像和去重 獲取data-original的內(nèi)容

  53.     tmp_list = list(set(tmp_list)) # 去重

  54.     imglist = []

  55.     for item in tmp_list:

  56.         if item.endswith('r.jpg'):

  57.             img_list.append(item)

  58.     print 'num : %d' % (len(imglist))

  59.     return imglist

  60. if __name__ == '__main__':

  61.     question_id = 35990613

  62.     zhihu_url = "https://www.zhihu.com/question/{qid}".format(qid=question_id)

  63.     html_content = getHtml(zhihu_url)

  64.     path = 'zhihu_pic'

  65.     mkdir(path) # 創(chuàng)建本地文件夾

  66.     img_list = getAllImg(html_content) # 獲取圖片的地址列表

  67.     download_pic(img_list, path)       # 保存圖片

Python中如何使用requsets獲取知乎最有價值的內(nèi)容
本代碼還存在一些不足的地方,無法完全獲取全部的圖片,需要在兼容 自動點擊 ”更多“ 加載更多答案。
代碼第二版解決了第一版代碼中不能自動加載的問題。

  1. #!/usr/bin/env python

  2. #-*- coding:utf-8 -*-

  3. import re

  4. import requests

  5. import os

  6. from urlparse import urlsplit

  7. from os.path import basename

  8. headers = {

  9.     'User-Agent': "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",

  10.     'Accept-Encoding': 'gzip, deflate'}

  11. def mkdir(path):

  12.     if not os.path.exists(path):

  13.         print '新建文件夾:', path

  14.         os.makedirs(path)

  15.         return True

  16.     else:

  17.         print u"圖片存放于:", os.getcwd() + os.sep + path

  18.         return False

  19. def download_pic(img_lists, dir_name):

  20.     print "一共有 {num} 張照片".format(num=len(img_lists))

  21.     for image_url in img_lists:

  22.         response = requests.get(image_url, stream=True)

  23.         if response.status_code == 200:

  24.             image = response.content

  25.         else:

  26.             continue

  27.         file_name = dir_name + os.sep + basename(urlsplit(image_url)[2])

  28.         try:

  29.             with open(file_name, "wb") as picture:

  30.                 picture.write(image)

  31.         except IOError:

  32.             print("IO Error\n")

  33.             continue

  34.         finally:

  35.             picture.close

  36.             print "下載 {pic_name} 完成!".format(pic_name=file_name)

  37. def get_image_url(qid, headers):

  38.     # 利用正則表達式把源代碼中的圖片地址過濾出來

  39.     #reg = r'data-actualsrc="(.*?)">'

  40.     tmp_url = "https://www.zhihu.com/node/QuestionAnswerListV2"

  41.     size = 10

  42.     image_urls = []

  43.     session = requests.Session()

  44.     # 利用循環(huán)自動完成需要點擊 “更多” 獲取所有答案,每個分頁作為一個answer集合。

  45.     while True:

  46.         postdata = {'method': 'next', 'params': '{"url_token":' +

  47.                     str(qid) + ',"pagesize": "10",' + '"offset":' + str(size) + "}"}

  48.         page = session.post(tmp_url, headers=headers, data=postdata)

  49.         ret = eval(page.text)

  50.         answers = ret['msg']

  51.         size += 10

  52.         if not answers:

  53.             print "圖片URL獲取完畢, 頁數(shù): ", (size - 10) / 10

  54.             return image_urls

  55.         #reg = r'https://pic\d.zhimg.com/[a-fA-F0-9]{5,32}_\w+.jpg'

  56.         imgreg = re.compile('data-original="(.*?)"', re.S)

  57.         for answer in answers:

  58.             tmp_list = []

  59.             url_items = re.findall(imgreg, answer)

  60.             for item in url_items: # 這里去掉得到的圖片URL中的轉(zhuǎn)義字符'\\'

  61.                 image_url = item.replace("\\", "")

  62.                 tmp_list.append(image_url)

  63.             # 清理掉頭像和去重 獲取data-original的內(nèi)容

  64.             tmp_list = list(set(tmp_list)) # 去重

  65.             for item in tmp_list:

  66.                 if item.endswith('r.jpg'):

  67.                     print item

  68.                     image_urls.append(item)

  69.         print 'size: %d, num : %d' % (size, len(image_urls))

  70. if __name__ == '__main__':

  71.     question_id = 26037846

  72.     zhihu_url = "https://www.zhihu.com/question/{qid}".format(qid=question_id)

  73.     path = 'zhihu_pic'

  74.     mkdir(path) # 創(chuàng)建本地文件夾

  75.     img_list = get_image_url(question_id, headers) # 獲取圖片的地址列表

  76.     download_pic(img_list, path) # 保存圖片

上述內(nèi)容就是Python中如何使用requsets獲取知乎最有價值的內(nèi)容,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

網(wǎng)站名稱:Python中如何使用requsets獲取知乎最有價值的內(nèi)容-創(chuàng)新互聯(lián)
本文URL:http://muchs.cn/article2/dsgcoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、小程序開發(fā)、建站公司、定制網(wǎng)站、品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站