【爬蟲筆記】爬取ONE一個文字及圖片(一)

背景

曾經(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)頁介紹

ONE一個

這個網(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)頁的具體分析,以上解析邏輯:

  1. 搜索網(wǎng)頁中class類型為‘item’的div,得到一個列表,其中一個元素就包括一天的數(shù)據(jù)信息。
  2. 解析一天的數(shù)據(jù),檢索其中所有a標(biāo)簽,得到一個由a標(biāo)簽組成的列表,在第一個a標(biāo)簽中獲得當(dāng)天的圖片url;第二個a標(biāo)簽獲取當(dāng)天的一句話。
  3. 檢索一天的p標(biāo)簽,其中第一個就是今天的id,而第二個標(biāo)簽就是年月日了。
  4. 循環(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來說,其實還有很多爬取工作還未完成。

比如:

  1. 一個ONE網(wǎng)頁中ONE文章,ONE模塊還未爬取。
  2. 如何解決爬取過往數(shù)據(jù),比如說一年內(nèi)的數(shù)據(jù),而不是網(wǎng)站上顯示的7天。
  3. 數(shù)據(jù)保存到本地數(shù)據(jù)庫或云端。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 聲明:本文講解的實戰(zhàn)內(nèi)容,均僅用于學(xué)習(xí)交流,請勿用于任何商業(yè)用途! 一、前言 強烈建議:請在電腦的陪同下,閱讀本文...
    Bruce_Szh閱讀 13,009評論 6 28
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,062評論 25 709
  • 1 前言 作為一名合格的數(shù)據(jù)分析師,其完整的技術(shù)知識體系必須貫穿數(shù)據(jù)獲取、數(shù)據(jù)存儲、數(shù)據(jù)提取、數(shù)據(jù)分析、數(shù)據(jù)挖掘、...
    whenif閱讀 18,313評論 45 523
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 踏云直上九重天 神針破滅眾神仙 從今往后一萬年 天地各道我為先
    三葉風(fēng)車閱讀 169評論 0 0

友情鏈接更多精彩內(nèi)容