全网采集壁纸360网站全网壁纸
1. 采集網(wǎng)站:
? ? ? ? ? ? ? ? ? ?壁紙360
? ? 采集內(nèi)容:
? ? ? ? ? ? ? ? ? 壁紙360全網(wǎng)超高清壁紙
2.采集思路:
? ? ? ? ?網(wǎng)頁導(dǎo)航欄一共有16個分類,第一個分類包含了后面所有的,為了將圖片按類型存儲,所以就只采集了后面15個標(biāo)簽。
?
那么首先采集下分類標(biāo)簽及其名稱(最基本的采集,不用多說啥了,直接一步到位)
接下來就是查找圖片鏈接,查看列表頁中每張圖片
?
?從上面鏈接中我們可以看到圖片是被縮放成 208x130像素的,那么如何抓到原像素圖片?
點(diǎn)擊圖片到圖片詳情頁,此時發(fā)現(xiàn)圖片像素高一點(diǎn)了,可以達(dá)到800x580
還是不能達(dá)到想要的像素?
仔細(xì)觀察該頁面的按鈕,還有個點(diǎn)擊下載壁紙大圖,如下圖
?點(diǎn)擊后檢查網(wǎng)絡(luò)請求,可以看到已經(jīng)將最高清圖片請求過來了
最后根據(jù)需要采集不同清晰度的圖片接口
最低像素采集列表頁鏈接,格式: http://www.bizhi360.com/allimg/litimg/6730_1.jpg
普通像素采集詳情頁鏈接, 格式:http://www.bizhi360.com/allimg/bpic/30/6730.jpg
高清像素采集點(diǎn)擊下載壁紙獲取到的連接,格式: http://pic.bizhi360.com/bbpic/30/6730.jpg
多次觀察,發(fā)現(xiàn)路由是有規(guī)律的,照著處理就行,已高清為例
在列表頁中,我們能抓到 /allimg/litimg/6730_1.jpg
高清圖片的鏈接是: http://pic.bizhi360.com/bbpic/30/6730.jpg
http://pic.bizhi360.com/bbpic/ + 鏈接中整數(shù)(6730后兩位) + 鏈接中整數(shù)部分(6730) ?+ ".jpg"
最后一個的話可能就是翻頁問題了,觀察一下倒數(shù)第二頁和最后一頁的網(wǎng)頁結(jié)構(gòu)
?所以采集頁數(shù)和終止條件如下:
?
3.整體代碼:?
采集最高清的圖片,本人采集用了代理,我不確定不用代理采集會不會封IP,建議帶上IP代理。以下是去除代理厚后的整體代碼:
# -*- coding: UTF-8 -*- ''' @Author :Jason @Desc :http://www.bizhi360.com/ 360壁紙采集 網(wǎng)站壁紙一共15個類 ''' import requests from lxml import etree import os import re import timedef getImageTypeAndName():'''主要抓取壁紙分類鏈接 和 壁紙分類名稱:返回壁紙分類連接 壁紙分類名稱'''url = "http://www.bizhi360.com"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",}res = requests.get(url=url,headers = headers)res.encoding = "gbk"etreeHtml = etree.HTML(res.text)imageType = etreeHtml.xpath('//div[@id="tagnav"]//div[@class="container"]/a/@href')imageTypeName = etreeHtml.xpath('//div[@id="tagnav"]//div[@class="container"]/a/text()')return imageType[1:],imageTypeName[1:] #去掉/desk/ 和 壁紙圖片大全 這一分類,包含所有圖片def downloadImage():'''直接采集圖片,根據(jù)圖片分類保存到指定文件夾:return:None'''headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",}sourceUrl1 = "http://www.bizhi360.com"sourceUrl2 = "http://pic.bizhi360.com/bbpic/"imageType, imageTypeName = getImageTypeAndName()for i,url in enumerate(imageType):if os.path.exists(imageTypeName[i]): #文件夾存在,不操作passelse:#文件夾不存在,創(chuàng)建文件夾os.mkdir(imageTypeName[i])print("創(chuàng)建文件夾")for page in range(1,1000): #先假設(shè)每個分類有1000頁,后期增加判斷條件可提前結(jié)束listUrl = sourceUrl1 + url + "list_" + str(page) + ".html"print(listUrl)res = requests.get(listUrl, headers = headers)res.encoding = "gbk"etreeHtml = etree.HTML(res.text)imageUrlList = etreeHtml.xpath('//*[@id="main"]/div/div[1]/ul/li/a/img/@src')for imageUrl in imageUrlList:url1 = re.findall(r'/(\d+).*?\.jpg',imageUrl)realImgUrl = sourceUrl2 + url1[0][-2:] + "/" +url1[0] + ".jpg"print(realImgUrl)resImg = requests.get(url=realImgUrl,headers=headers)with open("./"+imageTypeName[i] +"/"+ url1[0] + ".jpg","wb") as f:f.write(resImg.content)print("壁紙", url1[0] + ".jpg","保存完畢")if "<span>下一頁</span>" in res.text:#判斷抓取終止條件,存在那么就停止抓取breakif __name__ == "__main__":# getImageTypeAndName()downloadImage()print(" ")4.最終采集效果:
?
5.說明:
? ? ? ? 沒有用線程進(jìn)程一是因?yàn)榇韱栴},二是本身不急,寫完代碼后直接扔服務(wù)器讓他自己抓取去了。有需求的可以完善代碼,加快抓取速度。異常這塊也沒有搞(#自信qaq)
?
?
??
? ? ? ? ? ? ? ? ? ? ? ??
?
?
總結(jié)
以上是生活随笔為你收集整理的全网采集壁纸360网站全网壁纸的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 异形魔方SQ1的暴力解法
- 下一篇: 向导机器人项目概况