一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Python中如何使用requsets獲取知乎最有價(jià)值的內(nèi)容

 共同成長(zhǎng)888 2023-07-22 發(fā)布于廣東

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

一 前言 
  使用requsets 爬取知乎中最優(yōu)價(jià)值的內(nèi)容,寫(xiě)一段獲取內(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.     # 模擬瀏覽器訪問(wèn)

  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.     # 利用正則表達(dá)式把源代碼中的圖片地址過(guò)濾出來(lái)

  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) # 表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在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)       # 保存圖片

本代碼還存在一些不足的地方,無(wú)法完全獲取全部的圖片,需要在兼容 自動(dòng)點(diǎn)擊 ”更多“ 加載更多答案。
代碼第二版解決了第一版代碼中不能自動(dòng)加載的問(wèn)題。

  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.     # 利用正則表達(dá)式把源代碼中的圖片地址過(guò)濾出來(lái)

  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)自動(dòng)完成需要點(diǎn)擊 “更多” 獲取所有答案,每個(gè)分頁(yè)作為一個(gè)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獲取完畢, 頁(yè)數(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獲取知乎最有價(jià)值的內(nèi)容,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注本站行業(yè)資訊頻道。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    噜噜中文字幕一区二区| 欧美一区二区不卡专区| 日本东京热加勒比一区二区| 久久福利视频在线观看| 精品欧美日韩一二三区| 日韩和欧美的一区二区三区| 91日韩在线观看你懂的| 开心激情网 激情五月天| 久一视频这里只有精品| 日韩欧美国产亚洲一区| 国产男女激情在线视频| 国产精品欧美在线观看| 国产一区欧美一区日韩一区| 免费观看在线午夜视频| 高清欧美大片免费在线观看| 国产毛片av一区二区三区小说| 亚洲中文字幕亲近伦片| 欧美小黄片在线一级观看| 污污黄黄的成年亚洲毛片| 日韩中文字幕免费在线视频| 伊人久久青草地综合婷婷| 黄片免费在线观看日韩| 国产亚洲神马午夜福利| 久久国产青偷人人妻潘金莲| 偷拍偷窥女厕一区二区视频| 日本女优一色一伦一区二区三区| 日韩偷拍精品一区二区三区| 中文字幕不卡欧美在线| 国产亚洲不卡一区二区| 国产偷拍精品在线视频| 亚洲人午夜精品射精日韩| 偷拍偷窥女厕一区二区视频| 91人妻人人揉人人澡人| 亚洲综合精品天堂夜夜| 欧美黑人在线一区二区| 国产原创中文av在线播放| 99久久国产精品成人观看| 久久精品亚洲精品国产欧美| 国产熟女一区二区精品视频| 精品国产亚洲av成人一区| 免费久久一级欧美特大黄孕妇 |