由于公司大佬都去實地部署項目了抑党,所以作為前端切圖仔的我,是不用過去滴
進入今天的正題撬碟,python作為當下最熱的語言诞挨,所以來蹭蹭熱度莉撇,首先先從爬蟲入手了。剛好是七夕前后亭姥,作為木有女朋友的前端仔稼钩,只能花花時間去爬點資源了顾稀,于是我對https://www.mzitu.com伸出了“ 猿手 ”
準備工作
python3.6安裝好达罗,本人用的是window(如果是使用linux的大佬也不會看我的文章了,哈哈哈)
requests庫-----》一個python派發(fā)請求之類的庫(個人理解)----》可以使用pip install requests安裝
BeautifulSoup-------》一個處理xml静秆、html之類標簽的庫粮揉,挺好用的,誰用誰知道---》安裝同上流程
編輯器的話抚笔,看個人吧扶认,本人是前端開發(fā),所以直接使用vscode了
ok殊橙,一切準備就緒辐宾,準備發(fā)車
第一步
先打開網站,看看網頁源碼膨蛮,看看網頁結構(兄弟hold住叠纹,你是來爬資源的,不是來看美女的)
好的敞葛,我們打開源碼(鼠標右鍵誉察,查看源碼),然后你會發(fā)現
你可以看到惹谐,你要爬的圖片就是在這些鏈接里
然后持偏,打開你的編輯器,開始擼代碼氨肌,下面這些代碼就不用解釋了吧鸿秆,都又注釋
import requests
from bs4 import BeautifulSoup
# 定義請求頭,防止被識別為爬蟲
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"Referer": "https://www.mzitu.com/"
}
# 定義爬取的網站域名
all_url = "https://www.mzitu.com/"
# 派發(fā)請求怎囚,返回響應的html
start_html = requests.get(all_url,headers=headers)
# 使用beautifulSoup處理html的字符串
Soup = BeautifulSoup(start_html.text,'lxml')
# 打印獲取回來的標簽
print(Soup)
運行之后卿叽,命令行就打印東西了,讓我來看一哈
然后你就發(fā)現:哇桩了,和剛剛查看的源代碼一模一樣耶!!!!!
看官別急,我們來進行下一步的操作井誉,下一步完成之后蕉扮,你距離你的小姐姐又近了一步。剛剛我們通過請求返回了整個網頁的源碼颗圣,但是我們并不是全部都需要喳钟,我們只要截取我們需要的就好了屁使,這個時候就是beautifulSoup出場的機會了
import requests
from bs4 import BeautifulSoup
# 定義請求頭,防止被識別為爬蟲
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"Referer": "https://www.mzitu.com/"
}
# 定義爬取的網站域名
all_url = "https://www.mzitu.com/"
# 派發(fā)請求奔则,返回響應的html
start_html = requests.get(all_url,headers=headers)
# 使用beautifulSoup處理html的字符串
Soup = BeautifulSoup(start_html.text,'lxml')
# 打印獲取回來的標簽
# print(Soup)
# 該api是查找ul的id為pins的標簽蛮寂,然后再找其下面的a標簽
all_a = Soup.find('ul',id='pins').find_all('a')
# 循環(huán)遍歷a標簽的集合
for a in all_a:
# 打印a標簽
print(a)
打印出來的就是通過篩選的a標簽了,你要知道a標簽里面可是包含有好多小姐姐嘞易茬,到這里是不是動力十足了呢
但是還不夠酬蹋,我們要拿的是圖片url呀,然后你就想抽莱,這個簡單范抓,我直接用正則匹配出來不就好了嗎?嘻嘻嘻食铐,其實有更簡單的方法
# 在循環(huán)中打印一下
print(a['href'])
就能把a標簽中的url打印出來了匕垫,下面我們加大力度,不然篇幅過長我就會被各位打的虐呻,在循環(huán)中再次請求url象泵,會返回html頁面源碼,我們是篩選出其中的一個標簽
你看頁面你就知道的斟叼,你要爬的是大的圖片偶惠,不可能爬一張小圖片吧,所以我們篩選返回的html中div的class為main-image下的img中的src犁柜,拿到url之后洲鸠,就是下載圖片了
resp = requests.get(a['href'], headers=headers)
trueHtml = BeautifulSoup(resp.text, 'lxml')
# 篩選url
url = trueHtml.find('div', class_="main-image").find('img')['src']
# 請求
result = requests.get(url, headers=headers)
# 文件的寫入的路徑
with open("H:\\python\\001\\img\\"+a.get_text()+".jpg", "wb") as f:
# 寫入內容
f.write(result.content)
# 關閉文件
f.close()
然后你就發(fā)現你的文件夾里面多了一些小姐姐的圖片
然后你會發(fā)現,咋這么少呀馋缅,就不能多爬點扒腕,我告訴你,沒問題萤悴,下面我們就來多爬點瘾腰。
添加循環(huán),該循環(huán)控制的是翻頁覆履,所以蹋盆,你懂的
話不多bb,直接上代碼
import requests
from bs4 import BeautifulSoup
# 定義請求頭硝全,防止被識別為爬蟲
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"Referer": "https://www.mzitu.com/"
}
# 定義爬取的網站域名
all_url = "https://www.mzitu.com/"
# 控制翻頁
for i in range(1, 2):
start_html = requests.get(all_url+"/page/" + str(i) + "/", headers=headers)
# 使用beautifulSoup處理html的字符串
Soup = BeautifulSoup(start_html.text, 'lxml')
# 該api是查找ul的id為pins的標簽栖雾,然后再找其下面的a標簽
all_a = Soup.find('ul', id='pins').find_all('a')
all_a = list(set(all_a['href']))
# 循環(huán)遍歷a標簽的集合
for a in all_a:
resp = requests.get(a,headers=headers)
trueHtml = BeautifulSoup(resp.text, 'lxml')
# 篩選url
url = trueHtml.find('div', class_="main-image").find('img')['src']
# 請求
result = requests.get(url, headers=headers)
# 文件的寫入的路徑
with open("H:\\python\\001\\img\\"+a.get_text()+".jpg", "wb") as f:
# 寫入內容
f.write(result.content)
# 關閉文件
f.close()
ok。到這里基本的請求你就搞定了伟众,小姐姐也住到了你的“豪宅”(盤)里析藕。可能你一次性爬太多的時候會報錯凳厢,這是正常的账胧,嘻嘻嘻竞慢,這只是單線程的爬蟲,并沒有錯誤處理啥的治泥,而且使用的是你自己的ip筹煮,并沒有做ip的動態(tài)代理。這個文章暫時先這樣