看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

普通Python學習讓人倦

同學們,這次我們要學習用Python來做爬蟲,爬取的是深度學習的訓練資料。估計這麼一說,大部分同學是這樣的。

看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

少部分同學可能覺得爬蟲和深度學習比較時髦,還能硬著頭皮來聽講,但心裡肯定直打鼓,“這肯定是從入門到放棄吧?”

好吧,這次用不一樣的方法,先讓大家看時尚綜藝節目吧,裡面有很多PLMM,至於學習嘛,先放後面。怎麼樣?有精神了吧。讓我們開始看看綜藝,解解乏。

綜藝是什麼?

這次有很多PLMM的節目就是,《青春有你第二季》。109位選手,通過任務、訓練、考核,讓選手在明星導師訓練下成長,最終選出9位選手,組成偶像團體出道。可以說,PLMM多的很,讓我們先看幾位。


看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

Lisa

LISA(舞蹈導師)

泰國籍女歌手

代表作品:WHISTLE、BOOMBAYAH

哦,這不是選手,是出席嘉賓。呵呵,看花眼了。馬上選手就來。

選手來了,就直接截圖了啊。


看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了


看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

還有很多啊,大家千萬別忘了,學習Python才是目標。這次的目標是,

本次實踐使用Python來爬取百度百科中《青春有你2》所有參賽選手的信息。

所有的PLMM圖片都爬取下來,這次就幹這個,至於拿來幹嘛?別想歪了,留個懸念,後面會有更精彩的答案。

下面介紹爬取的思路和關鍵點。

爬取圖片思路和關鍵

爬蟲大家平常聽的比較多,很多人也把爬蟲想得比較神秘。下面就先科普下Python來爬資料的原理。

首先,從大家上網開始講起。

作為一個普通上網用戶,要瀏覽網站,首先打開瀏覽器 ,輸入網址,瀏覽器往目標站點發送請求。 瀏覽器接收網站響應數據,然後瀏覽器將內容 渲染到頁面上。用戶看到訪問內容就完成了一個普通瀏覽過程。

那麼模擬我們日常訪問的爬蟲程序是怎麼執行的呢?為什麼要模擬?這個問題問的好。

只有模擬了人訪問的爬蟲才能最大程度得到理想的數據,而不用擔心被封殺。好,下面是爬蟲程序執行原理。

首先爬蟲程序模擬瀏覽器,往目標站點發送請求。爬蟲程序接收網站響應數據後,從中提取有用的數據 。最後保存下來。

大家明白原理後,作為一個爬蟲應該有的程序邏輯就躍然於紙上。

爬蟲的過程

<code>1.發送請求(requests模塊)

2.獲取響應數據(服務器返回)

3.解析並提取數據(BeautifulSoup查找或者re正則)

4.保存數據/<code>

爬蟲過程中兩個庫,requestsBeautifulSoup下面就重點講解下。

request模塊:

<code>requests是python實現的簡單易用的HTTP庫,官網地址:http://cn.python-requests.org/zh_CN/latest/

requests.get(url)可以發送一個http get請求,返回服務器響應內容。
/<code>


BeautifulSoup庫:

<code>BeautifulSoup 是一個可以從HTML或XML文件中提取數據的Python庫。網址:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

BeautifulSoup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,其中一個是 lxml。


BeautifulSoup(markup, "html.parser")或者BeautifulSoup(markup, "lxml"),推薦使用lxml作為解析器,因為效率更高。/<code>

參賽選手爬取具體代碼

是不是想躍躍欲試呢?下面看好了,爬取百度百科中《青春有你2》中所有參賽選手信息,返回HTML的代碼來了!

Python代碼如下:


<code>def parse_wiki_data(table_html):
'''
從百度百科返回的html中解析得到選手信息,以當前日期作為文件名,存JSON文件,保存到work目錄下
'''
bs = BeautifulSoup(str(table_html),'lxml')
all_trs = bs.find_all('tr')

error_list = ['\\'','\"']

stars = []

for tr in all_trs[1:]:
all_tds = tr.find_all('td')

star = {}

#姓名
star["name"]=all_tds[0].text
#個人百度百科鏈接
star["link"]= 'https://baike.baidu.com' + all_tds[0].find('a').get('href')
#籍貫
star["zone"]=all_tds[1].text
#星座
star["constellation"]=all_tds[2].text
#身高

star["height"]=all_tds[3].text
#體重
star["weight"]= all_tds[4].text

#花語,去除掉花語中的單引號或雙引號
flower_word = all_tds[5].text
for c in flower_word:
if c in error_list:
flower_word=flower_word.replace(c,'')
star["flower_word"]=flower_word

#公司
if not all_tds[6].find('a') is None:
star["company"]= all_tds[6].find('a').text
else:
star["company"]= all_tds[6].text

stars.append(star)

json_data = json.loads(str(stars).replace("\\'","\""))
with open('work/' + today + '.json', 'w', encoding='UTF-8') as f:
json.dump(json_data, f, ensure_ascii=False)
/<code>

上面代碼爬了內容,並返回html,下面就要對爬取的頁面數據進行解析,並保存為JSON文件。為什麼要保存json文件呢?因為你肯定不想每次抓圖都去爬全部的頁面,而是先把全部頁面保存下來,然後再慢慢分析每個保存的頁面中的圖片鏈接,然後再真正把圖爬下來。要說明的是,PLMM的圖,不要放棄哦。


<code>def parse_wiki_data(table_html):
'''
從百度百科返回的html中解析得到選手信息,以當前日期作為文件名,存JSON文件,保存到work目錄下

'''
bs = BeautifulSoup(str(table_html),'lxml')
all_trs = bs.find_all('tr')

error_list = ['\\'','\"']

stars = []

for tr in all_trs[1:]:
all_tds = tr.find_all('td')

star = {}

#姓名
star["name"]=all_tds[0].text
#個人百度百科鏈接
star["link"]= 'https://baike.baidu.com' + all_tds[0].find('a').get('href')
#籍貫
star["zone"]=all_tds[1].text
#星座
star["constellation"]=all_tds[2].text
#身高
star["height"]=all_tds[3].text
#體重
star["weight"]= all_tds[4].text

#花語,去除掉花語中的單引號或雙引號
flower_word = all_tds[5].text
for c in flower_word:
if c in error_list:
flower_word=flower_word.replace(c,'')
star["flower_word"]=flower_word

#公司
if not all_tds[6].find('a') is None:
star["company"]= all_tds[6].find('a').text
else:
star["company"]= all_tds[6].text

stars.append(star)

json_data = json.loads(str(stars).replace("\\'","\""))
with open('work/' + today + '.json', 'w', encoding='UTF-8') as f:
json.dump(json_data, f, ensure_ascii=False)
/<code>

下面來乾貨了,真正爬取每個選手的百度百科圖片,並進行保存。

<code>def crawl_pic_urls():
'''
爬取每個選手的百度百科圖片,並保存
'''
with open('work/'+ today + '.json', 'r', encoding='UTF-8') as file:
json_array = json.loads(file.read())

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}

for star in json_array:

name = star['name']
link = star['link']

pic_urls.append(link)

down_pic(name,pic_urls)

/<code>

上面收集了每張圖片鏈接,下面開始真正每張圖下載了,偉大時刻開啟。

<code>def down_pic(name,pic_urls):
'''
根據圖片鏈接列表pic_urls, 下載所有圖片,保存在以name命名的文件夾中,
'''
path = 'work/'+'pics/'+name+'/'

if not os.path.exists(path):
os.makedirs(path)

for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = str(i + 1) + '.jpg'
with open(path+string, 'wb') as f:
f.write(pic.content)
print('成功下載第%s張圖片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:

print('下載第%s張圖片時失敗: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
/<code>

打印爬取的所有圖片的路徑

<code>def show_pic_path(path):
'''
遍歷所爬取的每張圖片,並打印所有圖片的絕對路徑
'''
pic_num = 0
for (dirpath,dirnames,filenames) in os.walk(path):
for filename in filenames:
pic_num += 1
print("第%d張照片:%s" % (pic_num,os.path.join(dirpath,filename)))
print("共爬取《青春有你2》選手的%d照片" % pic_num)
/<code>

寫好了每個功能模塊,讓他們都轉起來。

<code>if __name__ == '__main__':

#爬取百度百科中《青春有你2》中參賽選手信息,返回html
html = crawl_wiki_data()

#解析html,得到選手信息,保存為json文件
parse_wiki_data(html)

#從每個選手的百度百科頁面上爬取圖片,並保存
crawl_pic_urls()

#打印所爬取的選手圖片路徑
show_pic_path('/home/aistudio/work/pics/')

print("所有信息爬取完成!")/<code>

開始轉起來。真正的把100多位漂亮妹子的圖從網上抓下來,是多麼的壯觀。讓大家看看效果。


看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

真正的把100多位漂亮妹子的圖從網上抓下來,是多麼的壯觀

如果你的網絡沒問題,不多會,你就發現,選手的照片都躺到硬盤上了。開心吧,下面會講到讓你更意外的精彩。


看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

選手的照片都躺到硬盤上了


真正的目的

有了這麼多美女的照片,我們最後是要做什麼呢?

看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

最後的目的是讓大家掌握人工智能領域現在最火熱的深度學習。大家也知道從2015年開始,各大公司,包括阿里,頭條等,用天價的薪酬來招聘深度學習工程師。對,就是接下來大家要掌握的深度學習。


看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

大家要掌握的深度學習


下面的深度學習就會用爬下來的美女照片教會機器,不!應該說用美女照片做訓練集,讓機器在這個數據集上進行訓練,然後就可以進行比如人像識別等很精彩的應用了。

深度學習一般過程如下:


看綜藝是為了學爬蟲,最後居然搞的深度學習,這Python課也是絕了

深度學習

說了這麼多,這個課程的來源可是大廠出品哦。本課來源於百度出品的《Python小白逆襲大神》,而且是免費的。

歡迎大家繼續關注本公號,我將繼續為大家帶來更多有趣解讀的深度學習課程內容。


分享到:


相關文章: