QQ、微信鬥圖老是鬥不過,索性直接來爬鬥圖網,我有整個網站的圖,不服來鬥。bash
廢話很少說,選取的網站爲鬥圖啦,咱們先簡單來看一下網站的結構微信
網頁信息
從上面這張圖咱們能夠看出,一頁有多套圖,這個時候咱們就要想怎麼把每一套圖分開存放(後邊具體解釋)
經過分析,全部信息在頁面中均可以拿到,咱們就不考慮異步加載,那麼要考慮的就是分頁問題了,經過點擊不一樣的頁面,很容易看清楚分頁規則
很容易明白分頁URL的構造,圖片連接都在源碼中,就不作具體說明了明白了這個以後就能夠去寫代碼抓圖片了機器學習
存圖片的思路異步
由於要把每一套圖存入一個文件夾中(os模塊),文件夾的命名我就以每一套圖的URL的最後的幾位數字命名,而後文件從文件路徑分隔出最後一個字段命名,具體看下邊的截圖。
這些搞明白以後,接下來就是代碼了(能夠參考個人解析思路,只獲取了30頁做爲測試)所有源碼ide
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import os
class doutuSpider(object):
headers = {
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"}
def get_url(self,url):
data = requests.get(url, headers=self.headers)
soup = BeautifulSoup(data.content,'lxml')
totals = soup.findAll("a", {"class": "list-group-item"})
for one in totals:
sub_url = one.get('href')
global path
path = 'J:\\train\\image'+'\\'+sub_url.split('/')[-1]
os.mkdir(path)
try:
self.get_img_url(sub_url)
except:
pass
def get_img_url(self,url):
data = requests.get(url,headers = self.headers)
soup = BeautifulSoup(data.content, 'lxml')
totals = soup.find_all('div',{'class':'artile_des'})
for one in totals:
img = one.find('img')
try:
sub_url = img.get('src')
except:
pass
finally:
urls = 'http:' + sub_url
try:
self.get_img(urls)
except:
pass
def get_img(self,url):
filename = url.split('/')[-1]
global path
img_path = path+'\\'+filename
img = requests.get(url,headers=self.headers)
try:
with open(img_path,'wb') as f:
f.write(img.content)
except:
pass
def create(self):
for count in range(1, 31):
url = 'https://www.doutula.com/article/list/?page={}'.format(count)
print '開始下載第{}頁'.format(count)
self.get_url(url)
if __name__ == '__main__':
doutu = doutuSpider()
doutu.create()
複製代碼
結果
總結學習
總的來講,這個網站結構相對來講不是很複雜,你們能夠參考一下,爬一些有趣的測試
原創做者:loading_miracle,原文連接:
https://www.jianshu.com/p/88098728aafd
歡迎關注個人微信公衆號「碼農突圍」,分享Python、Java、大數據、機器學習、人工智能等技術,關注碼農技術提高•職場突圍•思惟躍遷,20萬+碼農成長充電第一站,陪有夢想的你一塊兒成長。大數據