BeautifulSoup使用一兩則(不定期補(bǔ)充)

Pycharm 5.0.3
IDE Pycharm
BeautifulSoup 4.5.0

如何在Pycharm下安裝BeautifulSoup請(qǐng)看
致力于打造最詳細(xì)的Requests使用(不定期補(bǔ)充)
還有強(qiáng)烈推薦@崔慶才--Python爬蟲利器二之Beautiful Soup的用法不能更詳細(xì)的用法介紹


都說(shuō)BeautifulSoup是利器蓉媳,那就記錄下bs的學(xué)習(xí)過(guò)程和代碼示例

從以前的幾篇博客上來(lái)看,我基本沒有使用BeautifulSoup來(lái)進(jìn)行對(duì)內(nèi)容的抓取撬码,可能我絕大多數(shù)對(duì)內(nèi)容抓取的都是動(dòng)態(tài)網(wǎng)頁(yè),而采用的selenium+phantomjs組合错蝴,抓的時(shí)候也是xpath定位元素的,接下來(lái)的一段時(shí)間颓芭,復(fù)習(xí)一下bs顷锰,正好有空也把正則撿撿,暑假到家屏幕只有一個(gè)了亡问,不適合寫工程類項(xiàng)目了官紫,所以還是撿撿復(fù)習(xí)復(fù)習(xí)基礎(chǔ)吧,就醬州藕!


牛刀時(shí)間

我們進(jìn)行網(wǎng)頁(yè)查看元素分析時(shí)候總能看到這樣的結(jié)構(gòu)

這里寫圖片描述

這個(gè)網(wǎng)頁(yè)結(jié)構(gòu)我就不進(jìn)行展開了束世,反正我也不太清楚,哈哈床玻,我負(fù)責(zé)的還是對(duì)數(shù)據(jù)進(jìn)行采集毁涉,知道怎么運(yùn)作,哪些元素锈死,tag就行了點(diǎn)擊了解html結(jié)構(gòu)


這里我還是對(duì)一個(gè)具體的小爬蟲進(jìn)行入手薪丁,爬自己學(xué)校的博士生導(dǎo)師,爬了兩層馅精。
BTW严嗜,我實(shí)在忍不住吐槽,這網(wǎng)頁(yè)做的是什么玩意啊洲敢,規(guī)范性去哪了B!压彭!爬起來(lái)好費(fèi)勁啊睦优。先上幾幅圖,按理來(lái)說(shuō)壮不,每個(gè)老師的介紹板塊應(yīng)該是一樣的汗盘,也應(yīng)該是由一個(gè)人寫的腳本,但是询一!這尼瑪隨便找了三個(gè)人我就看到三種形式隐孽,我真是醉了。健蕊。菱阵。

有這樣的--比較標(biāo)準(zhǔn)的


這里寫圖片描述

有這樣的,我快控制不住體內(nèi)的洪荒之力了缩功。晴及。。嫡锌。


這里寫圖片描述

還有直接這樣的虑稼。琳钉。。所有內(nèi)容都寫在一個(gè)標(biāo)簽里蛛倦,哥哥槽卫,你累不累啊,我爬也爬好累胰蝠,都快一個(gè)個(gè)點(diǎn)開看各自布局了!那爬蟲還有什么意義震蒋!

這里寫圖片描述

程序構(gòu)思

1.對(duì)首頁(yè)老師名字和第二層url進(jìn)行抓取茸塞,url可以采用正則的方式,然后再過(guò)濾一下查剖。當(dāng)然你也可以采用獲取標(biāo)簽屬性的方法進(jìn)行對(duì)url的收集
2.對(duì)1抓取的url進(jìn)行下一層的導(dǎo)師具體內(nèi)容的抓取钾虐,這是第二層,直接調(diào)用就好
3.循環(huán)輸出


上代碼

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import re


def getDetail(getURL):
    html_detail = requests.get(getURL)
    html_detail.encoding='gb2312'#規(guī)定編碼類型
    bs_getDetail = BeautifulSoup(html_detail.text,'lxml')
    for column in range(10):#防止采集不全數(shù)據(jù)
        try:
            print bs_getDetail.findAll("p",{"class":"MsoNormal"})[column].get_text()
        except:
            pass


url = 'http://icec.hrbeu.edu.cn/xintongxueyuan/ShowArticle.asp?ArticleID=138877'
html = requests.get(url)
html.encoding='gbk'#規(guī)定編碼類型笋庄,和第二層的網(wǎng)頁(yè)不是一個(gè)編碼
bs = BeautifulSoup(html.text,'lxml')#至于為什么要加'lxml'效扫,這是IDE提醒我添加上的,無(wú)傷大雅咯

url_f=[]#創(chuàng)建個(gè)列表用來(lái)存第二層url
for i in range(13,44):
    url_f.append(bs.findAll("a",{"href":re.compile("/xintongxueyuan/ShowArticle.asp\?ArticleID=[0-9]+")})[i])
    #跳過(guò)中間的(校內(nèi))直砂,校內(nèi)這幾個(gè)字也是同樣的結(jié)構(gòu)菌仁,只有這樣去除
    if i < 35:
        print bs.findAll("td",{"class":"STYLE3"})[i-12].get_text()
    if i >=35:
        print bs.findAll("td",{"class":"STYLE3"})[i-11].get_text()
    getURL= u'http://icec.hrbeu.edu.cn'+re.findall(r"/xintongxueyuan/ShowArticle.asp\?ArticleID=[0-9]+",str(url_f[i-13]))[0]
    print getURL
    getDetail(getURL)#調(diào)用函數(shù)
    print '#--------------------------------------------------------------#'

實(shí)現(xiàn)效果如下,絕大部分是正常的静暂;

刁  鳴
http://icec.hrbeu.edu.cn/xintongxueyuan/ShowArticle.asp?ArticleID=137277
刁 鳴济丘,男,1960年出生洽蛀,工學(xué)碩士摹迷,教授,工學(xué)碩士郊供、博士生導(dǎo)師峡碉,巴拉巴拉巴拉。驮审。鲫寄。
研究方向:寬帶信號(hào)檢測(cè)、處理與識(shí)別疯淫,通信信號(hào)處理
個(gè)人成果:先后承擔(dān)和參與省部級(jí)科研項(xiàng)目10余項(xiàng)塔拳,發(fā)表學(xué)術(shù)論文100余篇,巴拉巴拉巴拉峡竣。靠抑。。
聯(lián)系方式:diaoming@hrbeu.edu.cn

#--------------------------------------------------------------#

也有不正常的适掰。颂碧。荠列。

司偉建
http://icec.hrbeu.edu.cn/xintongxueyuan/ShowArticle.asp?ArticleID=65700
司偉建,男载城,1971年生肌似,工學(xué)博士,研究員诉瓦,博士生導(dǎo)師川队,巴拉巴拉巴拉。睬澡。固额。
招生專業(yè):信息與通信工程(博士、碩士)煞聪、電子與通信工程
研究方向:寬帶信號(hào)檢測(cè)斗躏、處理與識(shí)別;高精度無(wú)源測(cè)向技術(shù)昔脯;譜估計(jì)
個(gè)人成果:在國(guó)內(nèi)外核心期刊啄糙、會(huì)議發(fā)表學(xué)術(shù)論文70余篇,巴拉巴拉巴拉云稚。隧饼。。
#--------------------------------------------------------------#

絕大多數(shù)是正常的静陈,有幾個(gè)例外桑李,我估計(jì)不是一個(gè)人寫的腳本,不然差別不會(huì)差那么多窿给,以司偉建導(dǎo)師為例贵白,為什么缺少了聯(lián)系方式了呢?點(diǎn)開后才發(fā)現(xiàn)崩泡,他的聯(lián)系方式根本不在我的規(guī)則里禁荒,如下圖,別的老師都是在MsoNormal中角撞,他偏偏在結(jié)尾p標(biāo)簽處呛伴,我真是醉了。谒所。热康。。


這里寫圖片描述

這里就不在做具體的討論劣领,我選擇的項(xiàng)目根本不夠規(guī)范姐军,練習(xí)的BS4也就那么幾句,不規(guī)范的網(wǎng)頁(yè)對(duì)死板的代碼來(lái)說(shuō)殺傷力太大,我已經(jīng)加了幾個(gè)防范措施奕锌,比如try語(yǔ)句著觉,每次每個(gè)老師的MsoNormal選項(xiàng)個(gè)數(shù)總是不一樣,try多幾次惊暴,抓不到就pass饼丘,還有校內(nèi)這幾個(gè)字,規(guī)范和老師ID一樣辽话,我真無(wú)語(yǔ)肄鸽,還得中間靠if來(lái)去掉,如果靠正則油啤,估計(jì)又有點(diǎn)麻煩典徘。


遇到問題

1.requests編碼問題
1.解決方案,通過(guò)點(diǎn)擊網(wǎng)頁(yè)才發(fā)祥村砂,第一頁(yè)的編碼方式和第二層的編碼方式不一樣,看來(lái)踩點(diǎn)還是沒踩好屹逛,直接犯錯(cuò)础废,具體解決方法和urllib的方式不太一樣,具體可看致力于打造最詳細(xì)的Requests使用(不定期補(bǔ)充)里面的最后一節(jié)罕模,關(guān)于requests的一些編碼問題评腺。


2.BeautifulSoup和Re的一些組合問題
2.以bs.findAll("a",{"href":re.compile("/xintongxueyuan/ShowArticle.asp\?ArticleID=[0-9]+")})為例,我們用的最多的莫過(guò)于findAll淑掌,它的實(shí)際用法是
findAll(tag,attributes,recursive,text,limit,keywords)
我們基本是用前面兩個(gè)參數(shù)就夠了蒿讥,前面那就話的意思是,先找到a標(biāo)簽抛腕,然后參數(shù)是href芋绸,里面的值我們用正則表達(dá)式來(lái)進(jìn)行篩選,注意這里要的是編譯好的正則


3.關(guān)于正則的一點(diǎn)使用
3.可以采用編譯好的正則來(lái)直接findall担敌,就像這兩個(gè)摔敛,是等價(jià)的

getURL= u'http://icec.hrbeu.edu.cn'+re.findall(r"/xintongxueyuan/ShowArticle.asp\?ArticleID=[0-9]+",str(url_f[i-13]))[0]

和下面這個(gè)編譯好的再進(jìn)行處理

p = r"/xintongxueyuan/ShowArticle.asp\?ArticleID=[0-9]+"
patten = re.compile(p)
getURL= u'http://icec.hrbeu.edu.cn'+patten.findall(str(url_f[i-13]))[0]

多用幾次,加深印象全封!


致謝

@崔慶才--Python爬蟲利器二之Beautiful Soup的用法
常用html元素總結(jié)包括基本結(jié)構(gòu)马昙、文檔類型、頭部刹悴、主體等等
@MrLevo520--致力于打造最詳細(xì)的Requests使用(不定期補(bǔ)充)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末行楞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子土匀,更是在濱河造成了極大的恐慌子房,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異池颈,居然都是意外死亡尾序,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門躯砰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)每币,“玉大人,你說(shuō)我怎么就攤上這事琢歇±嫉。” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵李茫,是天一觀的道長(zhǎng)揭保。 經(jīng)常有香客問我,道長(zhǎng)魄宏,這世上最難降的妖魔是什么秸侣? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宠互,結(jié)果婚禮上味榛,老公的妹妹穿的比我還像新娘。我一直安慰自己予跌,他們只是感情好搏色,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著券册,像睡著了一般频轿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烁焙,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天航邢,我揣著相機(jī)與錄音,去河邊找鬼骄蝇。 笑死翠忠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乞榨。 我是一名探鬼主播秽之,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吃既!你這毒婦竟也來(lái)了考榨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鹦倚,失蹤者是張志新(化名)和其女友劉穎河质,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掀鹅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年散休,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乐尊。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戚丸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扔嵌,到底是詐尸還是另有隱情限府,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布痢缎,位于F島的核電站胁勺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏独旷。R本人自食惡果不足惜署穗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嵌洼。 院中可真熱鬧案疲,春花似錦、人聲如沸咱台。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)回溺。三九已至,卻和暖如春混萝,著一層夾襖步出監(jiān)牢的瞬間遗遵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工逸嘀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留车要,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓崭倘,卻偏偏與公主長(zhǎng)得像翼岁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子司光,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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