今天是1024程序員節,不得整點活~
雖然不太好教爬1024,但是可以爬點其它的!
比如妹子圖,這不都是各位喜歡的~
代碼流程
模擬瀏覽器向服務器發送一個http請求,網站接收到請求后返回數據。
在寫爬蟲代碼的時候一定先要去模擬瀏覽器訪問,因為現在的網站當接收到http請求后會校驗當前請求是否是一個瀏覽器,如果是,允許訪問,如果不是,禁止訪問!
環境啥的我就不說了,還是老樣子~
首先把我們要用的包導進去
import os # 自動創建文件夾 import requests # requests 爬蟲包 需要下載 pip install requests from bs4 import BeautifulSoup # 網頁選擇器 pip install bs4
然后我們就要開始模擬瀏覽器
headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36', # 反盜鏈 'referer': 'https://www.mzitu.com/' }
既然我們要下載,當然要有文件夾去保存對吧,這里就實現自動創建文件夾,不用我們去額外創建。
def get_girls(url): # 自動創建文件夾 if not os.path.exists('./學習資料/'): os.mkdir('./學習資料/')
當然,為了不讓你的小秘密被別人看到,咱們這里就把它命名為學習資料吧~
我們現在來發送請求,http協議中 有幾種請求方法:
- get 獲取數據
- post 數據提交 [賬號密碼提交]
html = requests.get(url, headers=headers).text
print(html)
對剛剛抓取到的數據進行二次篩選
需要兩個參數,想要二次提取的網頁 html變量臨時保存了。
html解析庫 lxml pip install lxml
html解析庫可以將html代碼轉成我們的python對象
soup = BeautifulSoup(html, 'lxml')
通過剛剛分析得出一個結論,一張圖片是由img標簽保存的,li標簽包含一個img標簽。如果我們獲取了所有的li標簽,相當於獲取到了所有的img標簽,因為一個ul標簽包含了所有的li標簽,所以獲取一個ul就相當於獲取到了所有的li標簽。
遍歷所有的li標簽
all_list = soup.find('ul', id='pins').find_all_next('li') for _ in all_list: girl_title = _.get_text() girl_url = _.find('img')['data-original'] print(girl_title, girl_url)
這個時候就可以開始下載了
response = requests.get(girl_url, headers=headers) fileName = girl_title + '.jpg' print('正在保存圖片:', girl_title) with open('./學習資料/' + fileName, 'wb') as f: f.write(response.content)
當然,只下載一頁的話當然不過癮,咱們這里就來實現翻頁下載,當然,別爬多了,克制一下自己。
代碼雖好,但還是要克制一下自己喲~
for page in range(1, 256): url = 'https://www.mzitu.com/page/%s' % page get_girls(url)
你要下載多少頁,直接改成多少頁就好了。
兄弟們學習python,有時候不知道怎么學,從哪里開始學。掌握了基本的一些語法或者做了兩個案例后,不知道下一步怎么走,不知道如何去學習更加高深的知識。
那么對於這些大兄弟們,我准備了大量的免費視頻教程,PDF電子書籍,以及視頻源的源代碼!
還會有大佬解答!
包括本文源代碼、對應視頻都在這里了 點擊藍色字體即可獲取這些福利
歡迎加入,一起討論 一起學習!
我們看看結果
只能打碼了,委婉一點。
文件夾我也不打開了,大家等下自己去試試,然后再慢慢打開把哈哈~
兄弟們,如果看完了感覺還過的去的話,記得來個三連,你的三連就是我最大的動力!
有啥問題和建議都可以在評論區一起交流~