您好,登錄后才能下訂單哦!
這篇文章主要介紹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)了。
把上面的鏈接打開(kāi)之后,被我發(fā)現(xiàn)了吧,就知道我的第八感不錯(cuò)滴。接下來(lái)就是找入口,一定要找到圖片鏈接的入口才可以做下面的操作
這個(gè)頁(yè)面不斷往下拖拽,頁(yè)面會(huì)一直加載,當(dāng)時(shí)當(dāng)你拖拽一會(huì),就停下來(lái)了,就是這個(gè)時(shí)機(jī)
發(fā)現(xiàn)入口,在我實(shí)際的操作中,其實(shí)還發(fā)現(xiàn)了很多其他的入口,這個(gè)就不一一的解釋了,趕緊上車,進(jìn)入 view more
之后,發(fā)現(xiàn)了頁(yè)面依舊是一個(gè)下拉刷新的布局方式,專業(yè)術(shù)語(yǔ) 瀑布流
。
打開(kāi)開(kāi)發(fā)者工具,切換到network
之后,發(fā)現(xiàn) 很多xhr
請(qǐng)求,發(fā)現(xiàn)這個(gè),就代表這個(gè)網(wǎng)站很容易爬取了
提取待爬取的鏈接,分析規(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)其中的奧妙了
這個(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圖”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(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)容。