Python爬取網頁圖檔
一、爬取的網站内容
爬取http://www.win4000.com/meinvtag26_1.html的COS圖檔
二、爬取的網站域名
win4000.com
三、完成内容
(1)抓取的内容分布在電腦主題之家網站的24個頁面和24個連結中。(2)抓取一系列圖檔,并将圖檔按頁面标題建立檔案夾分類存入,存入時根據下載下傳先後順序排序。(3)抓取内容的命名與抓取内容相銜接。(4)使用了反爬技術(5)圖像資料選擇JPG文檔格式來儲存
四、爬蟲步驟及代碼分析
爬蟲的思路分為4步,具體如下:
1、分析目标網頁,确定爬取的url路徑,headers參數

(1)比如按F12後在内容中搜尋“王者榮耀”(ctrl+f),尋找該頁面的關系
因為可以找到目前網頁的資料,是以這個網頁是一個靜态網頁,那麼這個網頁的URL位址就是位址導航欄中的内容,即:http://www.win4000.com/meinvtag26_1.html
(2)我用谷歌浏覽器,在network中找到User-agent
不知道為什麼我的谷歌浏覽器不能複制network中的User-agent然後我用到了抓包工具fiddler複制了User-agent
(後來我的”谷歌浏覽器不能複制network中的User-agent”問題解決了,原來是我沒有用滑鼠劃取選擇的内容…)
(3)代碼如下:1、确定爬取的url路徑,headers參數
base_url = 'http://www.win4000.com/meinvtag26_{}.html'.format(page) ##建構一個base_url來存放URL位址headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4181.9 Safari/537.36'}##建構一個hearders參數來僞裝為一個浏覽器使用者,構造出一個身份1234
2、發送請求 – requests 模拟浏覽器發送請求,擷取響應資料
(1)首先先導入第三方子產品
import requests ##安裝後導入第三方子產品 requests (HTTP 用戶端庫)1
(2)建立response,data2、發送請求 – requests 模拟浏覽器發送請求,擷取響應資料
response = requests.get(base_url, headers=headers)##調出靜态網頁的get方法,擷取該網頁的URL,将關鍵字base_url和headers傳入##進方法中去,并建立一個response對象來接收data = response.text##從response對象中擷取資料,因為資料是字元串類型的是以用".text"來提取,##并建立一個data變量來接收123456
(3)但是首先要先輸出測試代碼是否可以成功運作,确認資料存在後再進行下一步操作
print(data)##确定代碼是否可以成功運作,如果成功運作則可以注釋掉1
在pycharm中搜尋“聖誕節美女”,因為有顯示,代表代碼可以成功運作,進行下一步的操作
3、解析資料 – parsel 轉化為Selector對象,Selector對象具有xpath的方法,能夠對轉化的資料進行處理
(1)擷取目前頁面的每一個URL位址
可以看見a标簽中的詳細位址,點進去後發現目前相冊每一個位址都是包裹在a标簽下的,每一個a标簽對應的href值即是每一個相冊的url位址
(2)把相冊内部的圖檔解析出來進入一個相冊後發現img标簽内有src,點選進去後看見該相冊内的一張高清大圖
相冊内部每一個src屬性就是每一張圖檔的連結位址
(3)安裝第三方子產品
import parsel ##安裝後導入第三方子產品 parsel(資料解析子產品)import os ##系統自帶子產品,無需安裝,直接導入第三方子產品 os12
( 4 ) 将data轉化為Selector對象3、解析資料 – parsel 轉化為Selector對象,Selector對象具有xpath的方法,能夠對轉化的資料進行處理
html_data = parsel.Selector(data)##轉換對象,将data資料傳遞進變量1
html_data中,即将data資料自動轉換為Selector對象用“print(html_data)”列印html_data發現他就是一個Selector對象
(5)将data轉化為Selector對象将data轉化為Selector對象解析成功後才可以與xpath進行互動在頁面中按,
- ,
-
,順序查找
并在最後a标簽中的href屬性,再用“.extract()”方法将Selector資料取出
data_list = html_data.xpath('//div[@class="Left_bar"]//ul/li/a/@href|//div[@class="Left_bar"]//ul/li/a/img/@title').extract()#将轉化為Selector對象的data_list運用xpath,在div中跨節點找到“class="Left_bar"進行精确定位12
再按照同樣跨節點的方式依次找到
- ,
- ,,@a标簽中的href屬性,再用“.extract()”方法将Selector資料取出,并建立一個data_list變量來接收
(6)列印data_list
“print(data_list)”列印data_list出來發現是一個一個的字元串
4、儲存資料
(1)觀察不同的分頁,得出規律
發現是通過26_xxx最後一個數字來實作分頁效果for page in range(1, 6):#建構翻頁的範圍,從1開始到6(即第5頁)結束
base_url = 'http://www.win4000.com/meinvtag26_{}.html'.format(page) ##建構一個base_url來存放URL位址##建構一個“.format(page)”來傳入頁數12
(2)擷取相冊位址與名字,并對傳回的清單分組
data_list = html_data.xpath('//div[@class="Left_bar"]//ul/li/a/@href|//div[@class="Left_bar"]//ul/li/a/img/@title').extract()#擷取相冊的名字,傳回的是一個清單#使用清單推導式對清單進行分組data_list = [data_list[i:i + 2] for i in range(0, len(data_list), 2)]#将相冊的名稱和相冊的url位址進行分組123456
(3)周遊清單并建立圖檔檔案夾周遊清單元素
for alist in data_list: html_url = alist[0]#取到每一個相冊的URl位址 file_name = alist[1]#取到每一個相冊的名稱 建立圖檔的檔案夾root = 'G:/COS1/'if not os.path.exists('img' + file_name): os.mkdir('img' + file_name)#如果沒有存在目前檔案夾,則建立檔案夾print('正在下載下傳:', file_name)#列印出正在下載下傳的圖檔名稱123456789
(4)觀察每一個相冊頁面的位址,發現規律
for url in range(1, int(page_num) + 1): # 建構相冊翻頁的url位址 url_list = html_url.split('.') all_url = url_list[0] + '.' + url_list[1] + '.' + url_list[2] + '_' + str(url) + '.' + url_list[3] #嵌套出目前相冊的每一張圖檔的URL位址,并拼接12345
(5)發送詳情頁的請求,解析詳情頁的圖檔url位址
response_3 = requests.get(all_url, headers=headers).texthtml_3 = parsel.Selector(response_3)img_url = html_3.xpath('//div[@class="pic-meinv"]//img/@data-original').extract_first()#因為僅當他加載圖檔時才傳回圖檔資料,是以這個網頁是軟加載圖檔 #将轉化為Selector對象的html_3運用xpath,在div中跨節點找到“class="pic-meinv"進行精确定位 #再按照同樣跨節點的方式依次找到,@a标簽中的hdata-original屬性,并建立一個img_url變量來接收#使用“.extract_first()”提取出整一個資料,如果不加則隻有一張圖檔 print(img_url)#請求圖檔的url位址img_data = requests.get(img_url, headers=headers).content #圖檔的檔案名img_name = str(url) + '.jpg'#準備檔案名稱#取目前for循環的索引做為檔案名123456789101112131415
(5)儲存資料
with open('img{}'.format(file_name) + img_name, 'wb') as f: print('下載下傳完成:', img_name) f.write(img_data)#寫入檔案資料123
完整代碼如下:
import requests ##安裝後導入第三方子產品 requests(HTTP 用戶端庫)import parsel ##安裝後導入第三方子產品 parsel(資料解析)import os ##系統自帶子產品,無需安裝,直接導入第三方子產品 os(作業系統互動功能)for page in range(1, 6):#建構翻頁的範圍,從1開始到6(即第5頁)結束 print('=======================正在爬取第{}頁資料====================='.format(page)) # 1、确定爬取的url路徑,headers參數 base_url = 'http://www.win4000.com/meinvtag26_{}.html'.format(page) ##建構一個base_url來存放URL位址 ##建構一個“.format(page)”來傳入頁數 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4181.9 Safari/537.36'} #建構一個hearders參數來僞裝為一個浏覽器使用者,構造出一個身份 # 2、發送請求 -- requests 模拟浏覽器發送請求,擷取響應資料 response = requests.get(base_url, headers=headers) #調出靜态網頁的get方法,擷取該網頁的URL,将關鍵字base_url和headers傳入進方法中去,并建立一個response對象來接收 data = response.text #從response對象中擷取資料,因為資料是字元串類型的是以用".text"來提取,并建立一個data變量來接收 # print(data)##确定代碼是否可以成功運作,如果成功運作則可以注釋掉 # 3、解析資料 -- parsel 轉化為Selector對象,Selector對象具有xpath的方法,能夠對轉化的資料進行處理 html_data = parsel.Selector(data) #轉換對象,将data資料傳遞進變量html_data中,即将data資料自動轉換為Selector對象 data_list = html_data.xpath('//div[@class="Left_bar"]//ul/li/a/@href|//div[@class="Left_bar"]//ul/li/a/img/@title').extract() #擷取相冊的名字,傳回的是一個清單 #将轉化為Selector對象的data_list運用xpath,在div中跨節點找到“class="Left_bar"進行精确定位 # 再按照同樣跨節點的方式依次找到
, ,,@a标簽中的href屬性,再用“.extract()”方法将Selector資料取出,并建立一個data_list變量來接收 # print(data_list) # 使用清單推導式對清單進行分組 data_list = [data_list[i:i + 2] for i in range(0, len(data_list), 2)]#将相冊的名稱和相冊的url位址進行分組 # print(data_list) # 周遊清單元素 for alist in data_list: html_url = alist[0]#取到每一個相冊的URl位址 file_name = alist[1]#取到每一個相冊的名稱 # print(html_url, file_name) # 建立圖檔的檔案夾 root = 'G:/COS1/' if not os.path.exists('img' + file_name): os.mkdir('img' + file_name)#如果沒有存在目前檔案夾,則建立檔案夾 print('正在下載下傳:', file_name)#列印出正在下載下傳的圖檔名稱 # 發送詳情頁的請求,解析出總頁數 response_2 = requests.get(html_url, headers=headers).text html_2 = parsel.Selector(response_2) page_num = html_2.xpath('//div[@class="ptitle"]//em/text()').extract_first() # print(page_num) for url in range(1, int(page_num) + 1): # 建構相冊翻頁的url位址 url_list = html_url.split('.') all_url = url_list[0] + '.' + url_list[1] + '.' + url_list[2] + '_' + str(url) + '.' + url_list[3] #嵌套出目前相冊的每一張圖檔的URL位址,并拼接 # print(all_url) # 發送詳情頁的請求,解析詳情頁的圖檔url位址 response_3 = requests.get(all_url, headers=headers).text html_3 = parsel.Selector(response_3) img_url = html_3.xpath('//div[@class="pic-meinv"]//img/@data-original').extract_first() #因為僅當他加載圖檔時才傳回圖檔資料,是以這個網頁是軟加載圖檔 # 将轉化為Selector對象的html_3運用xpath,在div中跨節點找到“class="pic-meinv"進行精确定位 # 再按照同樣跨節點的方式依次找到
3d立體相冊特效html網頁代碼_用Python爬取COS網頁全部圖檔!整個網站的圖檔都被我存磁盤了Python爬取網頁圖檔一、爬取的網站内容二、爬取的網站域名三、完成内容四、爬蟲步驟及代碼分析1、分析目标網頁,确定爬取的url路徑,headers參數2、發送請求 – requests 模拟浏覽器發送請求,擷取響應資料3、解析資料 – parsel 轉化為Selector對象,Selector對象具有xpath的方法,能夠對轉化的資料進行處理4、儲存資料完整代碼如下:
,@a标簽中的hdata-original屬性,并建立一個img_url變量來接收 #使用“.extract_first()”提取出整一個資料,如果不加則隻有一張圖檔 # print(img_url) # 請求圖檔的url位址 img_data = requests.get(img_url, headers=headers).content # 圖檔的檔案名 img_name = str(url) + '.jpg'#準備檔案名稱 #取目前for循環的索引做為檔案名 # 4、儲存資料 with open('img{}'.format(file_name) + img_name, 'wb') as f: print('下載下傳完成:', img_name) f.write(img_data)#寫入檔案資料
項目完整代碼背景私信小編 源碼 擷取