思路如下
- 爬取測驗網站
- 獲取該網站多個主頁的url
- 獲取主頁中相冊首頁url
- 得到相冊內所有img圖片網址
- 保存圖片檔案
- 遍歷執行
爬取測驗網站
這個網站是百度搜的壁紙網站 練手用的 第一次用xpath可能不太熟練
下面是網址
http://www.win4000.com/meinvtag2_1.html
獲取該網站多個主頁的url
def get_url_list(): #得到多個主頁
li = []
for i in [29, 31, 32, 33, 34, 35]: #26, 28,
for j in range(1,5):
try:
url = f"http://www.win4000.com/meinvtag{i}_{j}.html"
status = requests.get(url).status_code
if status == 200:
li.append(url)
else:
break
except:
pass
return li
獲取主頁中相冊首頁url
def get_url(url): # 得到主頁網址中,我需要的頁面,相冊第一張圖片網頁的html
ret = requests.get(url=url,headers=headers) # 請求主頁html原始碼
ret2 = ret.text # 將請求的html原始碼放入ret2變數
selector = parsel.Selector(ret2) # selector方法把ret轉換資料型別 放入變數selector
url2_list = selector.xpath('//div[@class="Left_bar"]//ul/li/a/@href').getall() # getall方法提取每個相冊首頁原始碼
# print(url2_list)
return url2_list
得到相冊內所有img圖片網址
def get_img_url(url): # 得到相冊內所有img圖片的網址url
li = []
for i in range(0, 15): # 遍歷從0到15
if len(li) != 0: # 如果li的長度不為0 執行i-1 定位到li串列內i個
url = li[i-1] # (串列從0開始所以需要i-1)
resp = requests.get(url=url, headers=headers) # get到url 放入resp變數
if resp.status_code == 200: # 判斷網頁狀態碼 值為200為正常 執行存盤圖片網址
selector_1 = parsel.Selector(resp.text) # selector方法,把resp變數轉換資料型別,放入變數selector_1
result = selector_1.xpath('//div[@class="pic-meinv"]/a/@href').getall() # 使用xpath定位到下一張圖片網址
li.append(result[0]) # 將網址放入串列li
else:
break
return li
保存圖片檔案
def save_img(url): # 保存檔案
if not os.path.exists(f'/{url.split("/")[-1]}'):
ret = requests.get(url=url, headers=headers).text # 得到相冊內部html源代碼 放入ret3變數
selector = parsel.Selector(ret) # 通過selector方法把ret轉換資料型別 放入變數selector
img_url = selector.xpath('//div[@class="pic-meinv"]/a/img/@src').get()
img_data = requests.get(url=img_url, headers=headers).content
file_name = img_url.split('/')[-1]
with open(f'img//{file_name}', mode='wb') as f:
f.write(img_data)
print('資料保存完成', file_name)
遍歷執行
if __name__ == '__main__':
# url = 'http://www.win4000.com/meinvtag26_1.html'
try:
for i in get_url_list():
for url1 in get_url(i): # list
for img_url in get_img_url(url1):
save_img(img_url)
except:
pass
完整代碼如下
import requests
import parsel
import os
headers = {'Muser-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
def get_url_list(): #得到多個主頁
li = []
for i in [29, 31, 32, 33, 34, 35]:
for j in range(1,5):
try:
url = f"http://www.win4000.com/meinvtag{i}_{j}.html"
status = requests.get(url).status_code
if status == 200:
li.append(url)
else:
break
except:
pass
return li
def get_url(url): # 得到主頁網址中,我需要的頁面,相冊第一張圖片網頁的html
ret = requests.get(url=url,headers=headers) # 請求主頁html原始碼
ret2 = ret.text # 將請求的html原始碼放入ret2變數
selector = parsel.Selector(ret2) # selector方法把ret轉換資料型別 放入變數selector
url2_list = selector.xpath('//div[@class="Left_bar"]//ul/li/a/@href').getall() # getall方法提取每個相冊首頁原始碼
# print(url2_list)
return url2_list
def get_img_url(url): # 得到相冊內所有img圖片的網址url
li = []
for i in range(0, 15): # 遍歷從0到15
if len(li) != 0: # 如果li的長度不為0 執行i-1 定位到li串列內i個
url = li[i-1] # (串列從0開始所以需要i-1)
resp = requests.get(url=url, headers=headers) # get到url 放入resp變數
if resp.status_code == 200: # 判斷網頁狀態碼 值為200為正常 執行存盤圖片網址
selector_1 = parsel.Selector(resp.text) # selector方法,把resp變數轉換資料型別,放入變數selector_1
result = selector_1.xpath('//div[@class="pic-meinv"]/a/@href').getall() # 使用xpath定位到下一張圖片網址
li.append(result[0]) # 將網址放入串列li
else:
break
return li
def save_img(url): # 保存檔案
if not os.path.exists(f'/{url.split("/")[-1]}'):
ret = requests.get(url=url, headers=headers).text # 得到相冊內部html源代碼 放入ret3變數
selector = parsel.Selector(ret) # 通過selector方法把ret轉換資料型別 放入變數selector
img_url = selector.xpath('//div[@class="pic-meinv"]/a/img/@src').get()
img_data = requests.get(url=img_url, headers=headers).content
file_name = img_url.split('/')[-1]
with open(f'img_test//{file_name}', mode='wb') as f:
f.write(img_data)
print('資料保存完成', file_name)
if __name__ == '__main__':
# url = 'http://www.win4000.com/meinvtag26_1.html'
try:
for i in get_url_list():
for url1 in get_url(i): # list
for img_url in get_img_url(url1):
save_img(img_url)
except:
pass
第一次試手寫的,可能不太完善,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/239673.html
標籤:python
