摘要:蜂鳥(niǎo)網(wǎng)圖片簡(jiǎn)介國(guó)慶假日結(jié)束了,新的工作又開(kāi)始了,今天我們繼續(xù)爬取一個(gè)網(wǎng)站,這個(gè)網(wǎng)站為,蜂鳥(niǎo)一個(gè)攝影大牛聚集的地方,本教程請(qǐng)用來(lái)學(xué)習(xí),不要用于商業(yè)目的,不出意外,蜂鳥(niǎo)是有版權(quán)保護(hù)的網(wǎng)站。
1. 蜂鳥(niǎo)網(wǎng)圖片簡(jiǎn)介
國(guó)慶假日結(jié)束了,新的工作又開(kāi)始了,今天我們繼續(xù)爬取一個(gè)網(wǎng)站,這個(gè)網(wǎng)站為 http://image.fengniao.com/ ,蜂鳥(niǎo)一個(gè)攝影大牛聚集的地方,本教程請(qǐng)用來(lái)學(xué)習(xí),不要用于商業(yè)目的,不出意外,蜂鳥(niǎo)是有版權(quán)保護(hù)的網(wǎng)站。
2. 蜂鳥(niǎo)網(wǎng)圖片網(wǎng)站分析第一步,分析要爬取的網(wǎng)站有沒(méi)有方法爬取,打開(kāi)頁(yè)面,找分頁(yè)
http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=1¬_in_id=5352384,5352410 http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=2¬_in_id=5352384,5352410 http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=3¬_in_id=5352384,5352410 http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=4¬_in_id=5352384,5352410
上面的頁(yè)面發(fā)現(xiàn)一個(gè)關(guān)鍵的參數(shù)page=1這個(gè)就是頁(yè)碼了,但是另一個(gè)比較頭疼的問(wèn)題是,他沒(méi)有最后的頁(yè)碼,這樣我們沒(méi)有辦法確定循環(huán)次數(shù),所以后面的代碼編寫(xiě)中,只能使用while了
這個(gè)地址返回的是JSON格式的數(shù)據(jù),這個(gè)對(duì)爬蟲(chóng)來(lái)說(shuō),非常友好!省的我們用正則表達(dá)式分析了。
分析這個(gè)頁(yè)面的頭文件,查閱是否有反爬措施
發(fā)現(xiàn)除了HOST和User-Agent以外,沒(méi)有特殊的點(diǎn),大網(wǎng)站就是任性,沒(méi)啥反爬,可能壓根不在乎這個(gè)事情。
第二步,分析圖片詳情頁(yè)面,在我們上面獲取到的JSON中,找到關(guān)鍵地址
關(guān)鍵地址打開(kāi)之后,這個(gè)地方有一個(gè)比較騷的操作了,上面圖片中標(biāo)注的URL選的不好,恰好是一個(gè)文章了,我們要的是組圖,重新提供一個(gè)新鏈接 http://image.fengniao.com/slide/535/5352130_1.html#p=1
打開(kāi)頁(yè)面,你可能直接去找規(guī)律了,找到下面的一堆鏈接,但是這個(gè)操作就有點(diǎn)復(fù)雜了,我們查閱上述頁(yè)面的源碼
http://image.fengniao.com/slide/535/5352130_1.html#p=1 http://image.fengniao.com/slide/535/5352130_1.html#p=2 http://image.fengniao.com/slide/535/5352130_1.html#p=3 ....
網(wǎng)頁(yè)源碼中發(fā)現(xiàn)了,這么一塊區(qū)域
大膽的猜測(cè)一下,這個(gè)應(yīng)該是圖片的JSON,只是他打印在了HTML中,我們只需要用正則表達(dá)式進(jìn)行一下匹配就好了,匹配到之后,然后進(jìn)行下載。
第三步,開(kāi)始擼代碼。
3. 蜂鳥(niǎo)網(wǎng)圖片寫(xiě)代碼from http_help import R # 這個(gè)文件自己去上篇博客找,或者去github找 import threading import time import json import re img_list = [] imgs_lock = threading.Lock() #圖片操作鎖 # 生產(chǎn)者類 class Product(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.__headers = {"Referer":"http://image.fengniao.com/", "Host": "image.fengniao.com", "X-Requested-With":"XMLHttpRequest" } #鏈接模板 self.__start = "http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page={}¬_in_id={}" self.__res = R(headers=self.__headers) def run(self): # 因?yàn)椴恢姥h(huán)次數(shù),所有采用while循環(huán) index = 2 #起始頁(yè)碼設(shè)置為1 not_in = "5352384,5352410" while True: url = self.__start.format(index,not_in) print("開(kāi)始操作:{}".format(url)) index += 1 content = self.__res.get_content(url,charset="gbk") if content is None: print("數(shù)據(jù)可能已經(jīng)沒(méi)有了====") continue time.sleep(3) # 睡眠3秒 json_content = json.loads(content) if json_content["status"] == 1: for item in json_content["data"]: title = item["title"] child_url = item["url"] # 獲取到鏈接之后 img_content = self.__res.get_content(child_url,charset="gbk") pattern = re.compile(""pic_url_1920_b":"(.*?)"") imgs_json = pattern.findall(img_content) if len(imgs_json) > 0: if imgs_lock.acquire(): img_list.append({"title":title,"urls":imgs_json}) # 這個(gè)地方,我用的是字典+列表的方式,主要是想后面生成文件夾用,你可以進(jìn)行改造 imgs_lock.release()
上面的鏈接已經(jīng)生成,下面就是下載圖片了,也非常簡(jiǎn)單
# 消費(fèi)者 class Consumer(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.__res = R() def run(self): while True: if len(img_list) <= 0: continue # 進(jìn)入下一次循環(huán) if imgs_lock.acquire(): data = img_list[0] del img_list[0] # 刪除第一項(xiàng) imgs_lock.release() urls =[url.replace("","") for url in data["urls"]] # 創(chuàng)建文件目錄 for item_url in urls: try: file = self.__res.get_file(item_url) # 記得在項(xiàng)目根目錄先把fengniaos文件夾創(chuàng)建完畢 with open("./fengniaos/{}".format(str(time.time())+".jpg"), "wb+") as f: f.write(file) except Exception as e: print(e)
代碼走起,結(jié)果
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/19550.html
摘要:蜂鳥(niǎo)網(wǎng)圖片簡(jiǎn)介國(guó)慶假日結(jié)束了,新的工作又開(kāi)始了,今天我們繼續(xù)爬取一個(gè)網(wǎng)站,這個(gè)網(wǎng)站為,蜂鳥(niǎo)一個(gè)攝影大牛聚集的地方,本教程請(qǐng)用來(lái)學(xué)習(xí),不要用于商業(yè)目的,不出意外,蜂鳥(niǎo)是有版權(quán)保護(hù)的網(wǎng)站。 1. 蜂鳥(niǎo)網(wǎng)圖片簡(jiǎn)介 國(guó)慶假日結(jié)束了,新的工作又開(kāi)始了,今天我們繼續(xù)爬取一個(gè)網(wǎng)站,這個(gè)網(wǎng)站為 http://image.fengniao.com/ ,蜂鳥(niǎo)一個(gè)攝影大牛聚集的地方,本教程請(qǐng)用來(lái)學(xué)習(xí),不要用...
摘要:蜂鳥(niǎo)網(wǎng)圖片簡(jiǎn)介國(guó)慶假日結(jié)束了,新的工作又開(kāi)始了,今天我們繼續(xù)爬取一個(gè)網(wǎng)站,這個(gè)網(wǎng)站為,蜂鳥(niǎo)一個(gè)攝影大牛聚集的地方,本教程請(qǐng)用來(lái)學(xué)習(xí),不要用于商業(yè)目的,不出意外,蜂鳥(niǎo)是有版權(quán)保護(hù)的網(wǎng)站。 1. 蜂鳥(niǎo)網(wǎng)圖片簡(jiǎn)介 國(guó)慶假日結(jié)束了,新的工作又開(kāi)始了,今天我們繼續(xù)爬取一個(gè)網(wǎng)站,這個(gè)網(wǎng)站為 http://image.fengniao.com/ ,蜂鳥(niǎo)一個(gè)攝影大牛聚集的地方,本教程請(qǐng)用來(lái)學(xué)習(xí),不要用...
摘要:蜂鳥(niǎo)網(wǎng)圖片啰嗦兩句前幾天的教程內(nèi)容量都比較大,今天寫(xiě)一個(gè)相對(duì)簡(jiǎn)單的,爬取的還是蜂鳥(niǎo),依舊采用希望你喜歡爬取頁(yè)面本篇教程還是基于學(xué)習(xí)的目的,為啥選擇蜂鳥(niǎo),沒(méi)辦法,我瞎選的。 1. 蜂鳥(niǎo)網(wǎng)圖片-啰嗦兩句 前幾天的教程內(nèi)容量都比較大,今天寫(xiě)一個(gè)相對(duì)簡(jiǎn)單的,爬取的還是蜂鳥(niǎo),依舊采用aiohttp 希望你喜歡爬取頁(yè)面https://tu.fengniao.com/15/ 本篇教程還是基于學(xué)習(xí)的...
閱讀 2686·2021-11-16 11:40
閱讀 3475·2021-11-08 13:26
閱讀 943·2021-10-28 09:32
閱讀 3595·2021-09-13 10:26
閱讀 860·2019-08-30 15:55
閱讀 844·2019-08-30 15:44
閱讀 1963·2019-08-30 15:44
閱讀 1810·2019-08-30 13:48