溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python如何爬取半次元COS圖

發(fā)布時(shí)間:2021-10-18 17:43:55 來(lái)源:億速云 閱讀:153 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹Python如何爬取半次元COS圖,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

今天在瀏覽網(wǎng)站的時(shí)候,忽然一個(gè)莫名的鏈接指引著我跳轉(zhuǎn)到了半次元網(wǎng)站 https://bcy.net/ 打開(kāi)之后,發(fā)現(xiàn)也沒(méi)有什么有意思的內(nèi)容,職業(yè)的敏感讓我瞬間聯(lián)想到了 cosplay ,這種網(wǎng)站必然會(huì)有這個(gè)的存在啊,于是乎,我準(zhǔn)備好我的大爬蟲(chóng)了。

Python如何爬取半次元COS圖

把上面的鏈接打開(kāi)之后,被我發(fā)現(xiàn)了吧,就知道我的第八感不錯(cuò)滴。接下來(lái)就是找入口,一定要找到圖片鏈接的入口才可以做下面的操作

Python如何爬取半次元COS圖

這個(gè)頁(yè)面不斷往下拖拽,頁(yè)面會(huì)一直加載,當(dāng)時(shí)當(dāng)你拖拽一會(huì),就停下來(lái)了,就是這個(gè)時(shí)機(jī)

Python如何爬取半次元COS圖

發(fā)現(xiàn)入口,在我實(shí)際的操作中,其實(shí)還發(fā)現(xiàn)了很多其他的入口,這個(gè)就不一一的解釋了,趕緊上車,進(jìn)入 view more 之后,發(fā)現(xiàn)了頁(yè)面依舊是一個(gè)下拉刷新的布局方式,專業(yè)術(shù)語(yǔ) 瀑布流

半次元COS圖爬取-python爬蟲(chóng)第一步

打開(kāi)開(kāi)發(fā)者工具,切換到network之后,發(fā)現(xiàn) 很多xhr請(qǐng)求,發(fā)現(xiàn)這個(gè),就代表這個(gè)網(wǎng)站很容易爬取了

Python如何爬取半次元COS圖

提取待爬取的鏈接,分析規(guī)律

https://bcy.net/circle/timeline/loadtag?since=0&grid_type=timeline&tag_id=1482&sort=hot
https://bcy.net/circle/timeline/loadtag?since=26499.779&grid_type=timeline&tag_id=1482&sort=hot
https://bcy.net/circle/timeline/loadtag?since=26497.945&grid_type=timeline&tag_id=1482&sort=hot

發(fā)現(xiàn)只有一個(gè)參數(shù)在變,而且這變化好像沒(méi)有任何規(guī)律可以尋找,沒(méi)事,看數(shù)據(jù),你就可以發(fā)現(xiàn)其中的奧妙了

Python如何爬取半次元COS圖

這個(gè)網(wǎng)站的原理很簡(jiǎn)單,就是通過(guò)不斷獲取每次數(shù)據(jù)的最后一條的since然后獲取接下來(lái)的數(shù)據(jù),那么我們按照它的規(guī)律實(shí)現(xiàn)代碼就可以了,不要多線程了,這種規(guī)律是沒(méi)有辦法進(jìn)行實(shí)操的。
這次的數(shù)據(jù)我把它存儲(chǔ)到mongodb里面,因?yàn)闆](méi)有辦法一次全部獲取到,所以可能需要下次在繼續(xù)使用

if __name__ == '__main__':
    ###  mongodb 的一些基本操作   
    DATABASE_IP = '127.0.0.1'
    DATABASE_PORT = 27017
    DATABASE_NAME = 'sun'
    start_url = "https://bcy.net/circle/timeline/loadtag?since={}&grid_type=timeline&tag_id=399&sort=recent"
    client = MongoClient(DATABASE_IP, DATABASE_PORT)

    db = client.sun
    db.authenticate("dba", "dba")
    collection  =  db.bcy  # 準(zhǔn)備插入數(shù)據(jù)
    #####################################3333
    get_data(start_url,collection)
Python資源分享qun 784758214 ,內(nèi)有安裝包,PDF,學(xué)習(xí)視頻,這里是Python學(xué)習(xí)者的聚集地,零基礎(chǔ),進(jìn)階,都?xì)g迎

獲取網(wǎng)頁(yè)數(shù)據(jù)這個(gè)地方,由我們前面的經(jīng)驗(yàn)就變得很簡(jiǎn)單了

## 半次元COS圖爬取-獲取數(shù)據(jù)函數(shù)  
def get_data(start_url,collection):
    since = 0
    while 1:
        try:
            with requests.Session() as s:
                response = s.get(start_url.format(str(since)),headers=headers,timeout=3)
                res_data = response.json()
                if res_data["status"] == 1:
                    data = res_data["data"]  # 獲取Data數(shù)組
                    time.sleep(0.5)
                ## 數(shù)據(jù)處理
                since = data[-1]["since"]  # 獲取20條數(shù)據(jù)的最后一條json數(shù)據(jù)中的since
                ret = json_handle(data)   # 代碼實(shí)現(xiàn)在下面
                try:
                    print(ret)
                    collection.insert_many(ret)   # 批量出入數(shù)據(jù)庫(kù)
                    print("上述數(shù)據(jù)插入成功?。。。。。。。?quot;)
                except Exception as e:
                    print("插入失敗")
                    print(ret)

                ##
        except Exception as e:
            print("!",end="異常,請(qǐng)注意")
            print(e,end=" ")
    else:
        print("循環(huán)完畢")

網(wǎng)頁(yè)解析代碼

# 對(duì)JSON數(shù)據(jù)進(jìn)行處理
def json_handle(data):
    # 提取關(guān)鍵數(shù)據(jù)
    list_infos = []
    for item in data:
        item = item["item_detail"]
        try:
            avatar = item["avatar"] # 用戶頭像
            item_id = item["item_id"] # 圖片詳情頁(yè)面
            like_count = item["like_count"] # 喜歡數(shù)目
            pic_num = item["pic_num"] if "pic_num" in item else 0 # 圖片總數(shù)
            reply_count =item["reply_count"]
            share_count =item["share_count"]
            uid = item["uid"]
            plain = item["plain"]
            uname = item["uname"]
            list_infos.append({"avatar":avatar,
                               "item_id":item_id,
                               "like_count":like_count,
                               "pic_num":pic_num,
                               "reply_count":reply_count,
                               "share_count":share_count,
                               "uid":uid,
                               "plain":plain,
                               "uname":uname})
        except Exception as e:
            print(e)
            continue
        return list_infos

到現(xiàn)在就實(shí)現(xiàn)了,代碼跑起來(lái)

Python如何爬取半次元COS圖

以上是“Python如何爬取半次元COS圖”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI