爬蟲-BeautifulSoup簡單分析和學(xué)習(xí)

最近在學(xué)習(xí)py,整理一下自己的學(xué)習(xí)記錄囊颅,算是備忘了吕世。
py新手艺演,僅供新手小伙伴們學(xué)習(xí)
1.BeautifulSoup中文文檔地址https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#extract

概覽
Class Diagram.png

我們平常爬蟲了解這幾個類就可以了

上面這個圖 我們最常用用到的就是TagNavigableString

我們指導(dǎo)html是標(biāo)記語言实牡,我們想爬的數(shù)據(jù)都是被格式各樣的標(biāo)簽嵌套的。
<head>數(shù)據(jù)</head>
而BeautifulSoup 簡單的來說就是找標(biāo)簽取數(shù)據(jù)悴务,總體來說學(xué)習(xí)成本特別低睹限,容易上手。

我們來一步一分分析 對象的創(chuàng)建 以及 返回的類型

1.BeautifulSoup 的初始化

soup = BeautifulSoup(content,'lxml')
soup 是一個BeautifulSoup類型讯檐,從上面的繼承關(guān)系看其實就是一個Tag類型羡疗。一個大Tag包含著無數(shù)的小Tag

2.初步定位tag

tag = soup.find('table')
返回的是一個也是tag類型
tags = soup.find_all('table')
返回的是一個ResultSet 其實就是一個list類型的子類,在bs4.element文件中有說明

3.具體定位tag

當(dāng)我們獲取大體的Tag對象時别洪,我們?nèi)绻氆@取其中子Tag的數(shù)據(jù)
這里要分2種情況
一 叨恨。。標(biāo)記有屬性標(biāo)記
直接再通過第二步的方法繼續(xù)獲取
二 挖垛。痒钝。沒有屬性標(biāo)記 如<td></td>
str_list = tag.contents
返回一個list對象
str_list_iterator = tag.children
返回一個list_iterator

4.獲取數(shù)據(jù)

首先要說一點 上面第三步說的獲取具體的tag,其實通過contents和children獲取的不只是Tag對象,還有NavigableString對象痢毒。這點一定要清楚送矩。
直接通過string屬性來獲取就可以了

實戰(zhàn)

爬取ip代理網(wǎng)站(2種不同的類型),獲取代理ip哪替。
1.西刺免費代理IPhttp://www.xicidaili.com/nn

網(wǎng)頁源代碼 我就不貼在這邊了

源代碼 大家自己另開的網(wǎng)頁自己看下

通過分析源代碼栋荸,我們很清楚的發(fā)現(xiàn)我們數(shù)據(jù)實在table標(biāo)簽內(nèi)(而且頁面只有一個table標(biāo)簽)
1.初始化
soup = BeautifulSoup(res.content,'lxml')
2.定位大體的Tag(這一步可以省略)
table_tag = soup.find('table')
3.定位具體的Tag
tr_list = table_tag.find_all('tr')
4.得到數(shù)據(jù)

for index,tr_tag in enumerate(tr_list):
    if index > 1:
        td_list = list(filter(lambda x:x != '\n',tr_tag.contents))
        print('ip: ' + td_list[1].string + ':' + td_list[2].string)

我們分析源碼可以發(fā)現(xiàn) 第1,2個tr 是表頭,不包含我們想要的數(shù)據(jù)凭舶,可以跳過晌块。
在contents獲取或有子節(jié)點的時候,我們會發(fā)現(xiàn)返回的不只有tag對象還有‘\n’字符的None類型帅霜。所以我們要用filter過濾這些噪音數(shù)據(jù)匆背。
在過濾之后,我們可以清楚的看到 第二個tag對象時ip地址身冀,第二個是端口號钝尸。

import requests
from bs4 import BeautifulSoup

res = requests.get('http://www.xicidaili.com/nn',headers = { 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20' })

soup = BeautifulSoup(res.content,'lxml')
table_tag = soup.find('table')
tr_list = table_tag.find_all('tr')

for index,tr_tag in enumerate(tr_list):
    if index > 1:
        td_list = list(filter(lambda x:x != '\n',tr_tag.contents))
        print('ip: ' + td_list[1].string + ':' + td_list[2].string)

這里在請求數(shù)據(jù)的是時候,因為西刺有防爬處理搂根。我們不能直接請求珍促。需要模擬客戶端,填寫一個header

最后

如果想要自動翻頁爬取的話兄墅,已西刺為例。只要在爬取一頁完成澳叉,自動切換下一頁就好

import requests
from bs4 import BeautifulSoup

for page in range(1,10):
    res = requests.get('http://www.xicidaili.com/%d'%page,headers = { 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20' })
    soup = BeautifulSoup(res.content,'lxml')
    table_tag = soup.find('table')
    tr_list = table_tag.find_all('tr')
    
    for index,tr_tag in enumerate(tr_list):
        if index > 1:
            td_list = list(filter(lambda x:x != '\n',tr_tag.contents))
            print('ip: ' + td_list[1].string + ':' + td_list[2].string)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隙咸,一起剝皮案震驚了整個濱河市沐悦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌五督,老刑警劉巖藏否,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異充包,居然都是意外死亡副签,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門基矮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淆储,“玉大人,你說我怎么就攤上這事家浇”九椋” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵钢悲,是天一觀的道長点额。 經(jīng)常有香客問我,道長莺琳,這世上最難降的妖魔是什么还棱? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮惭等,結(jié)果婚禮上珍手,老公的妹妹穿的比我還像新娘。我一直安慰自己咕缎,他們只是感情好珠十,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凭豪,像睡著了一般焙蹭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫂伞,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天孔厉,我揣著相機(jī)與錄音,去河邊找鬼帖努。 笑死撰豺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拼余。 我是一名探鬼主播污桦,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匙监!你這毒婦竟也來了凡橱?” 一聲冷哼從身側(cè)響起小作,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稼钩,沒想到半個月后顾稀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡坝撑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年静秆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巡李。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡抚笔,死狀恐怖团赁,靈堂內(nèi)的尸體忽然破棺而出蛹找,到底是詐尸還是另有隱情横朋,我是刑警寧澤闽烙,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布怜俐,位于F島的核電站之剧,受9級特大地震影響佣耐,放射性物質(zhì)發(fā)生泄漏嘀倒。R本人自食惡果不足惜矫夯,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一鸽疾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧训貌,春花似錦制肮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至款慨,卻和暖如春儒飒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背檩奠。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工桩了, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人埠戳。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓井誉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親整胃。 傳聞我的和親對象是個殘疾皇子颗圣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • Beautiful Soup是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫.它能夠通過你喜歡的轉(zhuǎn)換器實...
    LitOrange閱讀 5,273評論 0 4
  • 關(guān)于bs4,官方文檔的介紹已經(jīng)非常詳細(xì)了,傳送:Beautifulsoup 4官方文檔,這里我把它組織成自己已經(jīng)消...
    徐薇薇閱讀 5,393評論 0 1
  • 爬蟲框架 BeautifulSoup 功能BeautifulSoup是用來從HTML或XML中提取數(shù)據(jù)的Pytho...
    summer_lz閱讀 581評論 0 0
  • 今晚,被煩死了在岂。9點多才下班荚藻,就想回來看書學(xué)習(xí),結(jié)果被嘮叨嘮叨個小時洁段,我不斷喊不要和我聊天了,還反復(fù)說共郭。我只想安安...
    阿爾卑斯山上的小灰兔閱讀 1,308評論 0 1
  • 很久沒有想這樣心不在焉了祠丝,對外界失去興趣~ 成長的時候來了,厲害的自己能很快走出迷茫的除嘹,對吧 人已經(jīng)很平靜了写半,平靜...
    阿立立哥閱讀 180評論 0 0