Python-BeautifulSoup 實戰(zhàn)(一):獲取簡書作者信息

BeautifulSoupPython 非常好用的一個庫蔫仙,可以用它來方便地解析網(wǎng)頁內(nèi)容,獲取我們需要的數(shù)據(jù),幾乎是Python 爬蟲居家旅行必備的庫够坐,這個系列的文章會記錄下用BeautifulSoup獲取簡書數(shù)據(jù)的過程,但不會詳細介紹 BeautifulSoup 的用法,有需要的同學(xué)可以參見官方文檔元咙。

第一篇介紹怎么用 BeautifulSoup 獲取簡書作者的基本信息梯影,包括文章數(shù)量、粉絲數(shù)量庶香、獲得的喜歡等光酣,先把需要的庫導(dǎo)進來:

import requests
from bs4 import BeautifulSoup

打開你的簡書主頁地址,復(fù)制到url:

url = 'http://www.reibang.com/users/65ed1c462691/top_articles'

你會發(fā)現(xiàn)所有用戶主頁的域名都是'http://www.reibang.com/users/ + ID 這個ID每個人都不同脉课,接下來我們會用到 requests 救军,當(dāng)然你也可以直接用 Pythonurlib 來獲取網(wǎng)頁內(nèi)容,我選擇requests是因為它的語法更簡單倘零,用requests 請求數(shù)據(jù)之前先偽裝成瀏覽器唱遭,否則很可能被服務(wù)器拒絕:

header = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0'}
response = requests.get(url, headers=header)
html = response.text

然后把得到的 html 傳入到 BeautifulSoup 進行解析,這里用了 Python 自帶的 html.parser(建議使用lxml

soup = BeautifulSoup(html, 'html.parser')

網(wǎng)頁內(nèi)容較多呈驶,我貼一部分上來:

<title>Cescfangs - 簡書</title>
<meta content="authenticity_token" name="csrf-param"/>
...
<div class="user-stats">
<ul class="clearfix">
<li>
<a href="/users/65ed1c462691/subscriptions"><b>11</b><span>關(guān)注</span></a>
</li>
<li>
<a href="/users/65ed1c462691/followers"><b>104</b><span>粉絲</span></a>
</li>
<br>
<li>
<a href="/users/65ed1c462691"><b>19</b><span>文章</span></a>
</li>
<li>
<a><b>15315</b><span>字數(shù)</span></a>
</li>
<li>
<a><b>166</b><span>收獲喜歡</span></a>
</li>
</br></ul>
</div>
</div>

粗略一看拷泽,發(fā)現(xiàn)我們作者的基本信息(文章數(shù)、收到的喜歡等)都包含在<ul class="clearfix">這個標(biāo)簽內(nèi)袖瞻,讓我們用 BeautifulSoup 找到這個標(biāo)簽:

author_info = soup.find_all('ul', class_='clearfix')

author_info 的內(nèi)容如下:

[<ul class="clearfix">
 <li>
 <a href="/users/65ed1c462691/subscriptions"><b>11</b><span>關(guān)注</span></a>
 </li>
 <li>
 <a href="/users/65ed1c462691/followers"><b>104</b><span>粉絲</span></a>
 </li>
 <br>
 <li>
 <a href="/users/65ed1c462691"><b>19</b><span>文章</span></a>
 </li>
 <li>
 <a><b>15315</b><span>字數(shù)</span></a>
 </li>
 <li>
 <a><b>166</b><span>收獲喜歡</span></a>
 </li>
 </br></ul>]

返回的結(jié)果是一個可迭代對象司致,其實只有一個元素:

info = author_info[0]

現(xiàn)在變成了這樣:

<ul class="clearfix">
<li>
<a href="/users/65ed1c462691/subscriptions"><b>11</b><span>關(guān)注</span></a>
</li>
<li>
<a href="/users/65ed1c462691/followers"><b>104</b><span>粉絲</span></a>
</li>
<br>
<li>
<a href="/users/65ed1c462691"><b>19</b><span>文章</span></a>
</li>
<li>
<a><b>15315</b><span>字數(shù)</span></a>
</li>
<li>
<a><b>166</b><span>收獲喜歡</span></a>
</li>
</br></ul>

我們獲得了一個新的 BeautifulSoup 標(biāo)簽對象,再觀察我們需要的數(shù)字都在這個對象的 b 標(biāo)簽里聋迎,再把它們找出來:

numbers = info.find_all('b')
numbers
#[<b>11</b>, <b>104</b>, <b>19</b>, <b>15315</b>, <b>166</b>]

嗯嗯脂矫,距離成功很近了,處理一下數(shù)據(jù)霉晕,保留我們需要的數(shù)字就夠了:

number_list = [int(item.string) for item in numbers]

number_list 是這樣子的:

[11, 104, 19, 15315, 166]

好像還漏了作者的名字庭再,名字就藏在 title 標(biāo)簽里,這里用了 find牺堰,它只返回第一個符合要求的結(jié)果:

name = soup.find('title')
name.string
#'Cescfangs - 簡書'

把不要的后綴去掉:

author_name = name.string[:-5]
author_name
#'Cescfangs'

嘿嘿嘿拄轻,寫個簡單的函數(shù)整合一下我們獲得的數(shù)據(jù):

def author(name, number_list):
    author_dict = {}
    author_dict['name'] = name
    author_dict['following'] = number_list[0]
    author_dict['fans'] = number_list[1]
    author_dict['articles'] = number_list[2]
    author_dict['words'] = number_list[3]
    author_dict['likes'] = number_list[4]
    
    return author_dict

試試看:

cesc = author(author_name, number_list)
cesc
'''
{'articles': 19,
 'fans': 104,
 'following': 11,
 'likes': 166,
 'name': 'Cescfangs',
 'words': 15315}''''

再寫個函數(shù)方便輸出:

def print_author(author_dict):
    print(author_dict['name'], '有', author_dict['fans'], '個粉絲,寫了',        author_dict['articles'],
          '篇文章伟葫,碼了', author_dict['words'], '個字恨搓,\n收割了', author_dict['likes'],
          '顆喜歡, 他悄悄關(guān)注了', author_dict['following'], '人~~~')
    
print_author(cesc)
#Cescfangs 有 104 個粉絲筏养,寫了 19 篇文章斧抱,碼了 15315 個字,
#收割了 166 顆喜歡撼玄, 他悄悄關(guān)注了 11 人~~~

本文的源碼(Jupyter Notebook)戳這里夺姑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掌猛,隨后出現(xiàn)的幾起案子盏浙,更是在濱河造成了極大的恐慌眉睹,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件废膘,死亡現(xiàn)場離奇詭異竹海,居然都是意外死亡,警方通過查閱死者的電腦和手機丐黄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門斋配,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灌闺,你說我怎么就攤上這事艰争。” “怎么了桂对?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵甩卓,是天一觀的道長。 經(jīng)常有香客問我蕉斜,道長逾柿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任宅此,我火速辦了婚禮机错,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘父腕。我一直安慰自己弱匪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布侣诵。 她就那樣靜靜地躺著痢法,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杜顺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天蘸炸,我揣著相機與錄音躬络,去河邊找鬼。 笑死搭儒,一個胖子當(dāng)著我的面吹牛穷当,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淹禾,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼馁菜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铃岔?” 一聲冷哼從身側(cè)響起汪疮,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后智嚷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卖丸,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年盏道,在試婚紗的時候發(fā)現(xiàn)自己被綠了稍浆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡猜嘱,死狀恐怖衅枫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朗伶,我是刑警寧澤弦撩,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站腕让,受9級特大地震影響孤钦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纯丸,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一偏形、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧觉鼻,春花似錦俊扭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仇矾,卻和暖如春庸蔼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贮匕。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工姐仅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刻盐。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓掏膏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親敦锌。 傳聞我的和親對象是個殘疾皇子馒疹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 聲明:本文講解的實戰(zhàn)內(nèi)容,均僅用于學(xué)習(xí)交流乙墙,請勿用于任何商業(yè)用途颖变! 一生均、前言 強烈建議:請在電腦的陪同下,閱讀本文...
    Bruce_Szh閱讀 12,727評論 6 28
  • GitHub 上有一個 Awesome - XXX 系列的資源整理,資源非常豐富悼做,涉及面非常廣疯特。awesome-p...
    若與閱讀 18,668評論 4 418
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    aimaile閱讀 26,506評論 6 427
  • 環(huán)境管理管理Python版本和環(huán)境的工具。p–非常簡單的交互式python版本管理工具肛走。pyenv–簡單的Pyth...
    MrHamster閱讀 3,798評論 1 61
  • 「你只是看起來很努力」 今天聽見這句話漓雅,我就一直在思考,思考我的表現(xiàn)朽色,我的努力邻吞,是不是一直就是看起來那么努力……...
    愛吃水果的淘小桃閱讀 187評論 0 0