python爬蟲學(xué)習(xí)小組 任務(wù)2

任務(wù)2.1 學(xué)習(xí)BeautifulSoup

英語生詞本
parser n. 剖析器;
prettify v. 修飾;
sibling n. 兄弟猜扮,姐妹; [生] 同科涮母,同屬; [人] 氏族成員;

在cmd命令行窗口安裝BeautifulSoup庫:

pip install beautifulsoup4

如何使用BeautifulSoup

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>data</p>' , 'html.parser')

BeautifulSoup庫的安裝小測
演示HTML頁面地址:http://python123.io/ws/demo.html

>>> r = requests.get("http://python123.io/ws/demo.html")
>>> r.text
'<html><head><title>This is a python demo page</title></head>\r\n<body>\r\n<p class="title"><b>The demo python introduces several python courses.</b></p>\r\n<p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:\r\n<a  class="py1" id="link1">Basic Python</a> and <a  class="py2" id="link2">Advanced Python</a>.</p>\r\n</body></html>'
>>> demo = r.text
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(demo, "html.parser")
>>> print(soup.prettify())
<html>
 <head>
  <title>
   This is a python demo page
  </title>
 </head>
 <body>
  <p class="title">
   <b>
    The demo python introduces several python courses.
   </b>
  </p>
  <p class="course">
   Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
   <a class="py1"  id="link1">
    Basic Python
   </a>
   and
   <a class="py2"  id="link2">
    Advanced Python
   </a>
   .
  </p>
 </body>
</html>
>>> 

2.1.1 BeautifulSoup庫的基本元素

HTML文檔 <==> 標(biāo)簽樹 <==> BeautifulSoup類
即洼裤,BeautifulSoup類 對應(yīng)一個HTML/XML文檔的全部內(nèi)容。

BeautifulSoup類有5種基本元素:

  1. Tag
    標(biāo)簽期犬,最基本的信息組織單元,分別用<></>標(biāo)明開頭和結(jié)尾
  2. Name
    標(biāo)簽的名字采够,<p>...</p>的名字是'p'喊递,格式:<tag>.name
  3. Attributes
    標(biāo)簽的屬性疤剑,字典形式組織滑绒,格式:<tag>.attrs
  4. NavigableString
    標(biāo)簽內(nèi)非屬性字符串,<>...</>中字符串隘膘,格式:<tag>.string
  5. Comment
    標(biāo)簽內(nèi)字符串的注釋部分疑故,一種特殊的Comment類型

標(biāo)簽樹的平行遍歷: (上行遍歷,下行遍歷略)

for sibling in soup.a.next_siblings:
     print(sibling)   #遍歷后續(xù)節(jié)點
for sibling in soup.a.previous_siblings:
     print(sibling)   #遍歷前續(xù)節(jié)點

問題:如何讓<html>內(nèi)容更加“友好”的顯示弯菊?
---bs4庫的prettify()方法

>>> print(soup.a.prettify())
<a class="py1"  id="link1">
 Basic Python
</a>

2.1.2 BeautifulSoup庫實踐案例

使用beautifulsoup提取丁香園論壇的回復(fù)內(nèi)容

  1. 用戶瀏覽器訪問目標(biāo)網(wǎng)站并檢查目標(biāo)內(nèi)容所在標(biāo)簽

目標(biāo)網(wǎng)址如下:http://www.dxy.cn/bbs/thread/626626#626626

用Chrome訪問的纵势,按F12可看見網(wǎng)站結(jié)構(gòu)及回復(fù)內(nèi)容所在標(biāo)簽如下圖:


  1. 獲取回復(fù)內(nèi)容
    我們所需的評論內(nèi)容就在td class="postbody"標(biāo)簽下,利用BeautifulSoup獲取內(nèi)容
content = data.find("td", class_="postbody").text

參考代碼:

import urllib.request
from bs4 import BeautifulSoup as bs
def main():
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                          "Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"
    }
    url = 'http://www.dxy.cn/bbs/thread/626626'
    request = urllib.request.Request(url, headers=headers)
    response = urllib.request.urlopen(request).read().decode("utf-8")
    html = bs(response, 'lxml')
    getItem(html)
def getItem(html):
    datas = [] # 用來存放獲取的用戶名和評論
    for data in html.find_all("tbody"):
        try:
            userid = data.find("div", class_="auth").get_text(strip=True)
            print(userid)
            content = data.find("td", class_="postbody").get_text(strip=True)
            print(content)
            datas.append((userid,content))
        except:
            pass
    print(datas)



if __name__ == '__main__':
    main()

參考鏈接:https://blog.csdn.net/wwq114/article/details/88085875
說實話管钳,沒看懂钦铁。。才漆。還要認(rèn)真學(xué)習(xí)呀

任務(wù)2.1 學(xué)習(xí)xpath

要交作業(yè)了牛曹,來不及學(xué)了,待補(bǔ)充醇滥。黎比。超营。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市阅虫,隨后出現(xiàn)的幾起案子演闭,更是在濱河造成了極大的恐慌,老刑警劉巖颓帝,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件米碰,死亡現(xiàn)場離奇詭異,居然都是意外死亡购城,警方通過查閱死者的電腦和手機(jī)见间,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來工猜,“玉大人米诉,你說我怎么就攤上這事∨袼В” “怎么了史侣?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長魏身。 經(jīng)常有香客問我惊橱,道長,這世上最難降的妖魔是什么箭昵? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任税朴,我火速辦了婚禮,結(jié)果婚禮上家制,老公的妹妹穿的比我還像新娘正林。我一直安慰自己,他們只是感情好颤殴,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布觅廓。 她就那樣靜靜地躺著,像睡著了一般涵但。 火紅的嫁衣襯著肌膚如雪杈绸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天矮瘟,我揣著相機(jī)與錄音瞳脓,去河邊找鬼。 笑死澈侠,一個胖子當(dāng)著我的面吹牛劫侧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埋涧,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼板辽,長吁一口氣:“原來是場噩夢啊……” “哼奇瘦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起劲弦,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耳标,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邑跪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體次坡,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年画畅,在試婚紗的時候發(fā)現(xiàn)自己被綠了砸琅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡轴踱,死狀恐怖症脂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淫僻,我是刑警寧澤诱篷,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站雳灵,受9級特大地震影響棕所,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悯辙,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一琳省、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躲撰,春花似錦针贬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荡灾。三九已至瓤狐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間批幌,已是汗流浹背础锐。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留荧缘,地道東北人皆警。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像截粗,于是被迫代替她去往敵國和親信姓。 傳聞我的和親對象是個殘疾皇子鸵隧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

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