前期回顧,關于python基礎知識以及爬蟲基礎我們可以看 ——> python學習手冊,網路安全的小伙伴千萬不要錯過,
圖片爬取思路
學會這一技能需要我們會python基礎,xpath決議,其用來決議出網頁中圖片所在的地址,決議出來地址就需要我們保存圖片了,那如何將一張張圖片保存下來了?我們可以使用requests的回應物件屬性content來獲取圖片的二進制資料,接著就使用with open()函式進行保存就行了,這樣一張圖片就獲取到了,是不是很簡單了!
- 獲取網頁源代碼
- 決議出圖片地址
- 獲取圖片二進制資料 requests.get(xx).content
- 生成圖片名稱
- 設定圖片的保存地址=檔案地址+圖片名稱
- 保存圖片 with open(圖片保存地址,'wb') as f:
思路分析
網站地址為:4K美女壁紙_高清4K美女圖片_彼岸圖網
1. xpath提取圖片地址
如下查看元素我們發現,所有的圖片地址都是包含在一個個的li標簽中,li標簽中又有a標簽和img標簽,而圖片地址就為img標簽中的src的屬性值,所以我們提取出屬性值就能將圖片地址獲取,

但是這樣只是獲取到的略縮圖的地址,我們點擊圖片進行后發現存在比原來圖片像素更高的圖片,所以我們這里就獲取更加高清的美女圖片,
所以接下來就分析略縮圖與其高清圖之間的關系,我們發現略縮圖中href的屬性值就是請求高清圖所在頁面的地址,所以我們這里將href屬性值獲取然后向其發送請求就能獲取到高清圖所在原始碼,然后用xpath將高清圖下載地址提取出來,就能夠成功下載了,

代碼撰寫
import requests
import os
from lxml import etree
headers={
'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Mobile Safari/537.36'
}
#實作爬取前10頁略縮圖片地址,并存放在串列中
def lue():
list_lue = []
for i in range(1,11):
if i > 1:
url = f'https://pic.netbian.com/4kmeinv/index_{i}.html'
else:
url = 'https://pic.netbian.com/4kmeinv/index.html'
response_text = requests.get(url,headers=headers,timeout=15).text
#實體化etree物件
tree = etree.HTML(response_text)
#提取出高清圖所在頁面地址
r = tree.xpath('//ul[@class="clearfix"]/li/a/@href')
for i in r:
list_lue.append(i)
return list_lue
#獲取高清圖下載地址及名稱
def gao(b):
if not os.path.exists('./高清美女'):
os.mkdir('./高清美女')
for i in b:
url = "https://pic.netbian.com"+i #高清圖所在頁面地址
response = requests.get(url=url,headers=headers,timeout=15)
response.encoding = 'gbk' #解決中文亂碼
response_text = response.text
response_text
tree = etree.HTML(response_text)
#最終高清圖的下載地址
img_src = 'http://pic.netbian.com'+ tree.xpath('//div[@class="photo-pic"]/a/img/@src')[0]
#圖片名
img_name = tree.xpath('//div[@class="photo-pic"]/a/img/@title')[0]
#獲取圖片二進制資料
img_content = requests.get(img_src,headers=headers,timeout=3).content
img_path = './高清美女/'+img_name+'.jpg'
with open(img_path,'wb') as f:
f.write(img_content)
print(img_name+'.jpg下載完畢')
print("美女圖片全部下載完畢!")
def main():
b = lue()
gao(b)
if __name__ == '__main__':
main()

歡迎有志青年和我一起學習

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/304767.html
標籤:python
