背景
曾經(jīng)幾時,一個ONE 席卷了各類青年的手機。
這款A(yù)PP
每天發(fā)布的一句話,一張圖
它順應(yīng)這個快速且碎片化的時代,快捷,簡潔
不同于各種味道的雞湯
不同于質(zhì)量參差不齊的散文
在ONE中,你不用去選擇,每天的推送無感或者不喜歡就關(guān)閉軟件,打動到內(nèi)心就充其量截屏發(fā)個票圈
在其中
可能某個總結(jié)人生經(jīng)驗的一句話從而博得你的同感
無論是親情友情或是愛情
可能在你某個失意時刻振奮你的生活
更加的努力和熱愛生活
當(dāng)然也可能讓你更加明白現(xiàn)實以及負(fù)能量
多喝水
或許每一個現(xiàn)在手機中還有這個APP的同學(xué),還有一個向往文藝的心。
網(wǎng)頁介紹

這個網(wǎng)頁簡潔到略顯簡陋,明顯快被時代所拋棄。
不過也難怪,網(wǎng)頁版用戶顯然不是ONE的側(cè)重方向。
當(dāng)然,網(wǎng)頁的UI設(shè)計和我們寫爬蟲沒有什么關(guān)系。
網(wǎng)頁分析

用chorme分析網(wǎng)頁,利用Elements左邊的小箭頭可以快速跳轉(zhuǎn)到文字在網(wǎng)頁源代碼的位置。
對所需數(shù)據(jù)反復(fù)點擊,即可對網(wǎng)頁構(gòu)造內(nèi)容有所了解,有利于后面對頁面的解析。
利用Requests與Bs4爬取網(wǎng)頁
導(dǎo)入requests包
import requests
如果沒有包,利用pip下載到python即可。pip可以解決大多數(shù)python包的下載安裝了。
python2:
pip install requests
本篇日記內(nèi)容就是在python2環(huán)境下。
python3:
pip install requests
獲取頁面:
url = "http://www.wufazhuce.com/"
page = requests.get(url).content
print page

這樣獲得的內(nèi)容就打印在控制臺上,發(fā)現(xiàn)我們所需的數(shù)據(jù)就在該頁面中。
解析頁面
from bs4 import BeautifulSoup
soup = BeautifulSoup(page, 'html.parser')
for i in soup.find_all('div',class_ = 'item'):
onelist = i.find_all('a')
image = onelist[0].img['src']
word = onelist[1].text
infolist = i.find_all('p')
id = infolist[0].text
date = infolist[1].text+' '+infolist[2].text
BeautifulSoup做的工作就是對html標(biāo)簽進行解釋和分類,不同的解析器對相同html標(biāo)簽會做出不同解釋。
第一個參數(shù)是獲取的頁面
第二個參數(shù)是解析器
解析器常用的有三個:
- html.parser
- lxml
- html5lib
python內(nèi)部默認(rèn)的解析器"html.parser",其自動補全標(biāo)簽的功能還有很差,但是應(yīng)付這個簡單的網(wǎng)頁沒有任何問題。而“l(fā)xml”的解析速度非???,對錯誤也有一定的容性。
“html5lib”對錯誤的容忍度是最高的,而且一定能解析出合法的html5代碼,但速度很慢。
根據(jù)對網(wǎng)頁的具體分析,以上解析邏輯:
- 搜索網(wǎng)頁中class類型為‘item’的div,得到一個列表,其中一個元素就包括一天的數(shù)據(jù)信息。
- 解析一天的數(shù)據(jù),檢索其中所有a標(biāo)簽,得到一個由a標(biāo)簽組成的列表,在第一個a標(biāo)簽中獲得當(dāng)天的圖片url;第二個a標(biāo)簽獲取當(dāng)天的一句話。
- 檢索一天的p標(biāo)簽,其中第一個就是今天的id,而第二個標(biāo)簽就是年月日了。
- 循環(huán)列表,獲取七天的數(shù)據(jù)。
保存數(shù)據(jù)為dict格式
list = []
soup = BeautifulSoup(page, 'html.parser')
for i in soup.find_all('div',class_ = 'item'):
onelist = i.find_all('a')
image = onelist[0].img['src']
word = onelist[1].text
infolist = i.find_all('p')
id = infolist[0].text
date = infolist[1].text+' '+infolist[2].text
data = {
'image':image,
'word':word,
'id':id,
'date':date
}
list.append(data)
for dict in list:
for key in dict:
print key, ':', dict[key]

這樣我們就獲取了七天內(nèi)ONE模塊中各種數(shù)據(jù),保存為dict格式,無論是存為Json格式應(yīng)用于web數(shù)據(jù),還是存儲于mongoodb,都十分的方便。
學(xué)習(xí)總結(jié)
今天學(xué)到requests,beautifulsoup的簡單應(yīng)用,爬取無需登錄的無反爬蟲的靜態(tài)網(wǎng)頁。
寫到這一步,但就爬取ONE來說,其實還有很多爬取工作還未完成。
比如:
- 一個ONE網(wǎng)頁中ONE文章,ONE模塊還未爬取。
- 如何解決爬取過往數(shù)據(jù),比如說一年內(nèi)的數(shù)據(jù),而不是網(wǎng)站上顯示的7天。
- 數(shù)據(jù)保存到本地數(shù)據(jù)庫或云端。
