聲明:僅為了學習爬蟲,請勿用于商業和惡意爬取數據,否則后果自負,作者享有該文章的所有解釋權
原創文章:只需要在程序運行時輸入一個數字,就會爬取1-該頁數的圖片,并且爬取小圖對應的詳情大圖(套圖),代碼復制可用,下面是我爬取的部分數據。
小圖太過性感,這里就不截圖了
import requests
import re
import os
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
#referer后面的鏈接是圖片的主頁鏈接,就是你點擊某張圖是網站判斷你是從主頁點過來的
'Referer':'https://www.mzitu.com/'
}
url = "https://www.mzitu.com/page/"
def qsbk(page_nums):
for i in range(1,page_nums + 1):
page = str(i)
# 拼接路由 http://www.qiumeimei.com/page/1
page_url = url + page + "/"
# 請求頁面數據 注意url=上面修改過的
response = requests.get(url=page_url,headers=headers)
# 獲取頁面數據
page_text = response.text
#獲取圖片路徑
img_list = re.findall("data-original='(.*?)'",page_text,re.S)
# 到詳情頁的路徑
big_img_list = re.findall('
.*?
',page_text,re.S)
# 定義一個目錄
img_path = "./img"
if not os.path.exists(img_path + page):
os.makedirs(img_path + page)
for k,j in enumerate(img_list):
# print(k,j) 索引和url 每個索引和詳情頁列表的所有一樣
# 列表頁url
# print(j) https://i.meizitu.net/thumbs/2019/08/190034_16b34_236.jpg
filename = j.split("/")[-1]
response = requests.get(url=j,headers=headers)
small_img = response.content
filenames = img_path + page + "/" + filename
#持久化存儲 這個存儲的是每個頁面的小圖
with open(filenames,"wb") as f:
f.write(small_img)
print("正在下載第%s頁數據,圖片%s下載成功"%(page,filename))
# 先請求詳情頁的信息,只為判斷總頁數
detail_url = big_img_list[k]
response = requests.get(url=detail_url,headers=headers)
img_text = response.text
# 頁數
nums = re.findall('
.*?
(\d{2})
.*?
', img_text, re.S)
if nums:
num = nums
else:
nums = re.findall('
.*?
(\d{1})
.*?
', img_text, re.S)
num = nums
# 列表取值
number = int(num[0])
# 變量每個小圖的詳情頁
for m in range(2,number):
#首次訪問詳情頁
detail_url = big_img_list[k] + "/" + str(m) +"/"
response = requests.get(url=detail_url,headers=headers)
detail_text = response.text
#正在找到圖片----------------------------該找詳情頁的大圖了------------------------------
detail_imgs = re.findall('
.*?
.*?
', detail_text, re.S)[0]
detail_name = re.findall('
.*?
.*?
', detail_text, re.S)
# print(detail_imgs) #['https://i.meizitu.net/2019/06/16d01.jpg']
# print(detail_name) #['好身材就要秀出來']
response = requests.get(url=detail_imgs,headers=headers)
img_texts = response.content
img_name = detail_name[0] #文件夾名字
img_name_single = detail_imgs.split("/")[-1] # 單個文件的名字
new_path = "./img/{}/".format(img_name)
if not os.path.exists(new_path):
os.makedirs(new_path)
new_name = new_path + img_name_single
with open(new_name,"wb") as f:
f.write(img_texts)
print("%s下載完成"%img_name_single)
print("%s下載完成"%detail_name)
#下面這種寫法只有在本程序中可用,不能import到其他程序中使用
if __name__ == '__main__':
page_num = int(input("請輸入要查詢的總頁數:"))
qsbk(page_num)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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