如果,不是因為圖片,又怎會和各位紳士見面?
環境:
系統:win10
ide:pycharm
模塊:requests, etree
首先我們選一個有很多妹子圖片的網站,我提供一個:https://www.mzitu.com/jiepai/
下面我們開始:
1.分析網頁結構:
? ? ? ?打開網頁,按F12打開調試,然后選中一個圖片,看它的結構:
有一個data-original屬性。屬性值就是圖片的鏈接,并且這個標簽的class是“lazy”,我們可以用etree找到這個節點,拿到圖片的地址,然后下載保存到本地。
初始參數:
header是發起請求時,告訴服務器瀏覽器的信息
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Referer": "https://www.mzitu.com/jiepai/comment-page-1/",
}
name = 0
japan_url_first = "https://www.mzitu.com/japan/" #第一頁
japan_url_other = "https://www.mzitu.com/japan/page/{}/" #非第一頁
第一頁的網址是https://www.mzitu.com/japan/,我們先爬取這個頁面的圖片,分為兩個步驟:
①:將網頁上的所有class=“lazy”的標簽的data-original屬性找出來,也就是把頁面上所有的圖片地址以一個數組返回
#獲取圖片鏈接
def get_url(html_url): # 獲取圖片鏈接,并返回
html = requests.get(html_url,headers = header).text #獲取網頁代碼
etree_html = etree.HTML(html)
img_url = etree_html.xpath('//img[@class="lazy"]/@data-original')
return img_url
②:遍歷圖片地址數組,下載圖片
img_list = get_url(url)
for img in img_list:
print("正在此地址{}的圖片".format(img))
get_img(img)
#下載圖片
def get_img(url): #下載圖片保存到指定文件夾
global name
name += 1
img_name = "D:\\pythonFetch\\imgs\\{}.jpg".format(name)
img = requests.get(url, headers = header).content
with open(img_name, 'wb') as save_img: # python自動幫我們調用save_img.close
save_img.write(img)
img_name:為圖片保存的地址
但是這只是一個頁面的圖片,能不能一次爬取簽10頁,前100頁的圖片呢? 可以:
我們發現第一頁的網址:https://www.mzitu.com/japan/
第二頁的網址:https://www.mzitu.com/japan/page/2/
第三頁:https://www.mzitu.com/japan/page/3/
第n頁:https://www.mzitu.com/japan/page/n/
可以看出來除了第一頁,其余都是有規律的,那么好說:
#主函數
def main(): # 使用for循環爬取所有網頁
for n in range(1,24):
if n == 1:
page_url = japan_url_first
else:
page_url = japan_url_other.format(n)
print("正在爬取第{}頁".format(n))
html = get_html(page_url)
img_list = get_url(html)
for img in img_list:
print("正在此地址{}的圖片".format(img))
get_img(img)
main()
完整代碼:
'''
設置瀏覽器頭部
User-Agent表示瀏覽器的參數信息
Referer用于設置使用哪個網頁跳轉過來
url設置網址模板,可以通過.format參數補充網址
'''
from lxml import etree
import requests
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Referer": "https://www.mzitu.com/jiepai/comment-page-1/",
}
name = 0
japan_url_first = "https://www.mzitu.com/japan/" #第一頁
japan_url_other = "https://www.mzitu.com/japan/page/{}/" #非第一頁
#下載網頁
def get_html(url): #獲取網頁代碼,并以值的形式彈出
html = requests.get(url,headers = header).text
return html
#下載圖片
def get_img(url): #下載圖片保存到指定文件夾
global name
name += 1
img_name = "D:\\pythonFetch\\imgs\\{}.jpg".format(name)
img = requests.get(url, headers = header).content
with open(img_name, 'wb') as save_img: # python自動幫我們調用save_img.close
save_img.write(img)
#獲取圖片鏈接
def get_url(html): # 獲取圖片鏈接,并返回
etree_html = etree.HTML(html)
img_url = etree_html.xpath('//img[@class="lazy"]/@data-original')
return img_url
#主函數
def main(): # 使用for循環爬取所有網頁
for n in range(1,24):
if n == 1:
page_url = japan_url_first
else:
page_url = japan_url_other.format(n)
print("正在爬取第{}頁".format(n))
html = get_html(page_url)
img_list = get_url(html)
for img in img_list:
print("正在此地址{}的圖片".format(img))
get_img(img)
main()
然后運行一把,美女圖片盡收眼底哈。。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
