手把手教你使用Python網(wǎng)絡(luò)爬蟲獲取搜狗壁紙
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
/1 前言/
????搜狗壁紙是一款高清電腦壁紙下載,集成萬款美女、寵物、風(fēng)景、電影、節(jié)日、日歷、簡(jiǎn)約壁紙,一鍵更換壁紙,多分辨率自適應(yīng),支持分組播放。
????搜狗壁紙,素材豐富,種類齊全,集美女、風(fēng)景、萌寵等13個(gè)分類。讓你的桌面充滿愛。

/2 項(xiàng)目目標(biāo)/
??? 教會(huì)大家如何去獲取搜狗壁紙,下載你喜歡的分類。
/3?項(xiàng)目準(zhǔn)備/
軟件:PyCharm
需要的庫(kù):requests、fake_useragent、json
網(wǎng)站如下:
https://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15/4 項(xiàng)目分析/
一、如何找到 json真正訪問地址?
1、以壁紙這個(gè)分類來看,雙擊打開網(wǎng)站,右鍵F12>>找到下面的Network>>XHR>>(點(diǎn)擊XHR下的文件)。刷新頁(yè)面。找到Headers,里面的Request URL。
Request URL如下:
http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=8642、試著去掉一些不必要的部分,技巧就是,刪掉可能的部分之后,訪問不受影響。經(jīng)篩選。最后得到的url如下:
http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15 字面意思,知道category后面可能為分類。start為開始下標(biāo),len為長(zhǎng)度,也即圖片的數(shù)量。



二、如何獲取里面的圖片的地址?
1、點(diǎn)擊其中一個(gè)文件打開Preview,點(diǎn)開all_items 發(fā)現(xiàn)下面是0 1 2 3...一個(gè)一個(gè)的貌似是圖片元素。試著打開一個(gè)url。pic_url就是圖片的地址。如圖:

/5 反爬措施/
1、獲取正常的http請(qǐng)求頭,并在requests請(qǐng)求時(shí)設(shè)置這些常規(guī)的http請(qǐng)求頭。
2、使用 fake_useragent ,產(chǎn)生隨機(jī)的UserAgent進(jìn)行訪問。
/6?項(xiàng)目實(shí)現(xiàn)/
1、定義一個(gè)class類繼承object,定義init方法繼承self,主函數(shù)main繼承self。導(dǎo)入需要的庫(kù)和網(wǎng)址,代碼如下所示。
import requests, jsonfrom fake_useragent import UserAgentclass ShouGO(object):def __init__(self):passdef main(self):passif __name__ == '__main__':Siper = ShouGO()Siper.main()
2、隨機(jī)生成UserAgent,防止反爬。
ua = UserAgent(verify_ssl=False)for i in range(1, 50):self.headers = {'User-Agent': ua.random,}
3、定義Shou方法傳入三個(gè)參數(shù)category, length, path分別對(duì)應(yīng)json地址參數(shù)值。實(shí)例化變量。
def Shou(self, category, length, path):n = lengthcate = category
4、json解析。
imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=' + cate + '&tag=%E5%85%A8%E9%83%A8&start=0&len=' + str(n))jd = json.loads(imgs.text)jd = jd['all_items']imgs_url = []
5、for循環(huán)遍歷數(shù)組找到圖片地址。
for j in jd:imgs_url.append(j['pic_url'])
6、for循環(huán)邊框圖片地址,定義一個(gè)變量m作為圖片名稱,拼接圖片地址。
m = 0for img_url in imgs_url:# print(img_url)print('***** ' + cate + str(m) + '.jpg *****' + ' Downloading...')
7、?圖片地址發(fā)生請(qǐng)求,獲取響應(yīng)。
img = requests.get(url=img_url, headers=self.headers).content8、保存圖片
with open(path + cate + str(m) + '.jpg', 'wb') as f:f.write(img)# urllib.request.urlretrieve(img_url, path + str(m) + '.jpg')m = m + 1print('Download complete!')
9、mian里調(diào)用Shou方法傳入?yún)?shù)。實(shí)現(xiàn)功能。
def main(self):self.Shou('汽車', 2000, './壁紙2/')
/7?效果展示/
1、點(diǎn)擊綠色小三角運(yùn)行。以Shou('汽車', 2000, './壁紙2/'):(“分類”,長(zhǎng)度。"保存的地址")為例。點(diǎn)擊運(yùn)行,結(jié)果顯示在控制臺(tái),如下圖所示。

2、保存的圖片,如下圖所示。

/8 小結(jié)/
-------------------?End?-------------------
往期精彩文章推薦:
手把手用Python教你如何發(fā)現(xiàn)隱藏wifi
手把手教你用Python做個(gè)可視化的“剪刀石頭布”小游戲
Python基礎(chǔ)語(yǔ)法——代碼規(guī)范&判斷語(yǔ)句&循環(huán)語(yǔ)句

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
