爬蟲(chóng)學(xué)習(xí)小記

1.requests庫(kù)安裝

pip install requests

舉例:

>>> import requests
>>> r = requests.get("http://www.baidu.com")
>>> r.status_code
200   #200表示成功
>>> r.encoding = "utf-8"
>>> r.text   #打印網(wǎng)頁(yè)內(nèi)容
'<!DOCTYPE html>\r\n<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新聞</a> <a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地圖</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>視頻</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>貼吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登錄</a> </noscript> <script>document.write(\'<a + encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ \'" name="tj_login" class="lb">登錄</a>\');</script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多產(chǎn)品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>關(guān)于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必讀</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意見(jiàn)反饋</a>&nbsp;京ICP證030173號(hào)&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>\r\n

這樣依许,百度的主頁(yè)已經(jīng)成功被抓取下來(lái)了。

requests的7個(gè)主要的方法


image.png

2.requests庫(kù)的get()方法

image.png

image.png

requests庫(kù)get方法的源代碼


image.png

所以,requests庫(kù)的get()方法實(shí)際上是調(diào)用requests庫(kù)的request的方法來(lái)實(shí)現(xiàn)的
所以吐葵,雖然requests庫(kù)有7中方法,但是實(shí)際上可以把它理解成一種方法桥氏,也就是request的方法温峭。


image.png

重點(diǎn)看一下response對(duì)象

image.png
image.png

image.png

image.png

原則上,r.apparent_encoding 是比r.encoding更為準(zhǔn)確的一種形式

3.爬取網(wǎng)頁(yè)的通用代碼框架
6種常見(jiàn)的requests庫(kù)的連接異常


image.png

image.png

image.png

image.png

通用代碼框架使得用戶爬取網(wǎng)頁(yè)更加可靠字支,有效凤藏,穩(wěn)定

3.HTTP協(xié)議以及request庫(kù)方法

HTTP協(xié)議:超文本傳輸協(xié)議


image.png

簡(jiǎn)單的說(shuō),就是用戶發(fā)起請(qǐng)求堕伪,服務(wù)器發(fā)生響應(yīng)揖庄,這就是簡(jiǎn)單的請(qǐng)求與響應(yīng)模式


image.png

image.png

image.png

image.png

image.png

image.png
image.png

r.headers反饋得到的頭部信息
當(dāng)試圖展示全部?jī)?nèi)容,用r.text,結(jié)果為空


image.png
image.png
image.png

4.requests庫(kù)主要方法的解析

image.png

image.png

image.png

image.png
image.png

image.png
image.png

image.png

image.png
image.png

image.png

image.png

image.png

image.png

image.png

image.png

5.爬取實(shí)例

(1)京東商品頁(yè)面的爬取


image.png

(2)亞馬遜商品頁(yè)面的爬取


image.png

image.png
image.png

亞馬遜的服務(wù)器識(shí)別了這次訪問(wèn)是由requests庫(kù)的爬蟲(chóng)引起的
所以
先構(gòu)建一個(gè)鍵值對(duì)


image.png

重新定義了user-agent欠雌,使它等于Mozilla/5.0


image.png

對(duì)headers進(jìn)行修改


image.png

這時(shí)候蹄梢,user-agent就變成了Mozilla/5.0
返回的結(jié)果


image.png

image.png

(3)百度360搜索關(guān)鍵詞提交
image.png

image.png

image.png

image.png

(4)網(wǎng)絡(luò)圖片的爬取和儲(chǔ)存


image.png
image.png

(5)IP地址歸屬地的自動(dòng)查詢

6.Beautiful Soup庫(kù)的安裝

pip install beautifulsoup4
image.png

image.png

兩種方式獲取源代碼
1是可以直接瀏覽器上查看網(wǎng)頁(yè)源代碼


image.png

2是可以用requests
image.png

除了給出demo,還需要給出一個(gè)解析demo的解釋器富俄,這里的解釋器是html.parser禁炒,也就是說(shuō)我們這里是對(duì)demo進(jìn)行html的解析


image.png

beautifulsoup庫(kù)只需要2行代碼


image.png

7.Beautiful Soup庫(kù)的基本元素

image.png

任何的html文件都是由一組尖括號(hào)組成的標(biāo)簽組織起來(lái)的,每一對(duì)尖括號(hào)構(gòu)成一個(gè)標(biāo)簽霍比,而標(biāo)簽之間存在上下游關(guān)系幕袱,形成一個(gè)標(biāo)簽樹(shù)


image.png

image.png
image.png

image.png

image.png
image.png
image.png

使用soup.title可以獲得title信息
使用soup.a獲得a標(biāo)簽的tag
當(dāng)html中包含多個(gè)相同的tag時(shí),使用soup.tag是會(huì)獲得第一個(gè)tag信息


image.png

soup.a.name獲得a標(biāo)簽的名字
soup.a.parent.name獲得a標(biāo)簽的父親的名字悠瞬,也就是包含a標(biāo)簽的上一級(jí)標(biāo)簽的名字
soup.a.parent.parent.name同理们豌,獲得的是上上級(jí)標(biāo)簽的名字


image.png

tag.attrs獲取tag的屬性信息,可以看出來(lái)它是一個(gè)字典浅妆,存在鍵值對(duì)
因此望迎,可以用
tag.attrs['class']來(lái)獲得class屬性的值
tag.attrs['href']來(lái)獲得href屬性的值
type(tag.attrs)可以獲得屬性的類型,它是一個(gè)dict

type(tag)凌外,獲取tag的類型信息


image.png

soup.a.string獲得tag a的NavigableString
可以看出辩尊,p標(biāo)簽中還包含一個(gè)b標(biāo)簽
因此,soup.tag.string可以跨標(biāo)簽獲得標(biāo)簽的NavigableString
比如
image.png

image.png

beautiful soup的comment信息

8.基于bs4庫(kù)的HTML內(nèi)容的遍歷方法

image.png

image.png
image.png

要注意的是趴乡,contents返回的是列表对省,而children和descendants返回的是迭代類型蝗拿,需要for循環(huán)輸出


image.png

image.png
image.png

image.png

image.png

image.png

image.png

image.png
image.png
image.png

9.基于bs4庫(kù)的HTML格式輸出

image.png

image.png

image.png

print之后都分行顯示


image.png

image.png

10.信息標(biāo)記的三種形式

image.png

image.png

image.png

image.png

image.png

image.png

image.png
image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

11.三種信息標(biāo)記形式的比較

image.png

image.png

image.png

image.png

image.png

12.信息提取的一般方法

image.png

image.png

image.png

image.png

image.png

13.基于bs4庫(kù)的HTML內(nèi)容查找方法

image.png

image.png

image.png

如果給find_all的參數(shù)是True晾捏,將返回所有的標(biāo)簽信息


image.png

image.png

image.png

image.png
image.png

image.png

image.png

image.png

image.png

image.png

14.中國(guó)大學(xué)排名定向爬蟲(chóng)實(shí)例

(1)實(shí)例介紹


image.png

image.png

image.png

image.png

image.png

image.png

(2)中國(guó)大學(xué)排名定向爬蟲(chóng)實(shí)例代碼編寫(xiě)

import requests
import bs4
import requests
import bs4
import requests
import bs4
from bs4 import BeautifulSoup
def getHTMLText(url):
   try:
      r = requests.get(url,timeout = 30)
      r.raise_for_status()
      r.encoding = r.apparent_encoding
      return r.text
   except:
      return ""

def fillUnivList(ulist,html):
   soup = BeautifulSoup(html,'html.parser')
   for tr in soup.find('tbody').children:
      if isinstance(tr,bs4.element.Tag):
         tds = tr("td")
         ulist.append([tds[0].string,tds[1].string,tds[2].string])


def printUnivList(ulist,num):
   print("{:^10}\t{:^6}\t{:^10}".format("排名","學(xué)校名稱","總分"))
   for i in range (num):
     u = ulist[i]
     print ("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))

def main():
   uinfo = []
   url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html"
   html = getHTMLText(url)
   fillUnivList(uinfo,html)
   printUnivList(uinfo,20)
main()

結(jié)果如下

排名       學(xué)校名稱       總分    
    1        清華大學(xué)      北京市    
    2        北京大學(xué)      北京市    
    3        浙江大學(xué)      浙江省    
    4       上海交通大學(xué)     上海市    
    5        復(fù)旦大學(xué)      上海市    
    6        南京大學(xué)      江蘇省    
    7       中國(guó)科學(xué)技術(shù)大學(xué)       安徽省    
    8       哈爾濱工業(yè)大學(xué)    黑龍江省   
    9       華中科技大學(xué)     湖北省    
    10       中山大學(xué)      廣東省    
    11       東南大學(xué)      江蘇省    
    12       天津大學(xué)      天津市    
    13       同濟(jì)大學(xué)      上海市    
    14      北京航空航天大學(xué)       北京市    
    15       四川大學(xué)      四川省    
    16       武漢大學(xué)      湖北省    
    17      西安交通大學(xué)     陜西省    
    18       南開(kāi)大學(xué)      天津市    
    19      大連理工大學(xué)     遼寧省    
    20       山東大學(xué)      山東省    

(3)中國(guó)大學(xué)排名定向爬蟲(chóng)實(shí)例優(yōu)化
問(wèn)題:


image.png

結(jié)果的中文不對(duì)齊


image.png

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市哀托,隨后出現(xiàn)的幾起案子惦辛,更是在濱河造成了極大的恐慌,老刑警劉巖仓手,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胖齐,死亡現(xiàn)場(chǎng)離奇詭異玻淑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)呀伙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門补履,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人剿另,你說(shuō)我怎么就攤上這事箫锤。” “怎么了雨女?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵谚攒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我氛堕,道長(zhǎng)馏臭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任讼稚,我火速辦了婚禮括儒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乱灵。我一直安慰自己塑崖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布痛倚。 她就那樣靜靜地躺著规婆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝉稳。 梳的紋絲不亂的頭發(fā)上抒蚜,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音耘戚,去河邊找鬼嗡髓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛收津,可吹牛的內(nèi)容都是我干的饿这。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼撞秋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼长捧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起吻贿,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤串结,失蹤者是張志新(化名)和其女友劉穎患膛,沒(méi)想到半個(gè)月后鲸睛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年酣胀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了府喳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圾叼。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纽疟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奋早,到底是詐尸還是另有隱情其爵,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布伸蚯,位于F島的核電站摩渺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏剂邮。R本人自食惡果不足惜摇幻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挥萌。 院中可真熱鬧绰姻,春花似錦、人聲如沸引瀑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)憨栽。三九已至帜矾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屑柔,已是汗流浹背屡萤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掸宛,地道東北人死陆。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像唧瘾,于是被迫代替她去往敵國(guó)和親措译。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 聲明:本文講解的實(shí)戰(zhàn)內(nèi)容饰序,均僅用于學(xué)習(xí)交流领虹,請(qǐng)勿用于任何商業(yè)用途! 一菌羽、前言 強(qiáng)烈建議:請(qǐng)?jiān)陔娔X的陪同下掠械,閱讀本文...
    Bruce_Szh閱讀 12,679評(píng)論 6 28
  • 關(guān)于bs4,官方文檔的介紹已經(jīng)非常詳細(xì)了,傳送:Beautifulsoup 4官方文檔,這里我把它組織成自己已經(jīng)消...
    徐薇薇閱讀 5,366評(píng)論 0 1
  • BeautifulSoup 是一個(gè)非常優(yōu)秀的Python擴(kuò)展庫(kù)注祖,可以用來(lái)從HTML或XML文件中提取我們感興趣的數(shù)...
    siyu8023閱讀 1,152評(píng)論 0 2
  • Beautiful Soup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù).它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)...
    LitOrange閱讀 5,253評(píng)論 0 4
  • 下面的場(chǎng)景你是否覺(jué)得非常熟悉 場(chǎng)景一: 男:在干嘛呢猾蒂? 女:看電視 男:看什么? 女:韓劇 男:好看嗎是晨? 女:還行...
    林汐然閱讀 732評(píng)論 4 7