python爬蟲beautifulsoup4系列2


前言

本篇詳細介紹beautifulsoup4的功能,從最基礎的開始講起,讓小伙伴們都能入門

 

一、讀取HTML頁面

1.先寫一個簡單的html頁面,把以下內容copy出來,保存為html格式文件

<meta charset="UTF-8"> <!-- for HTML5 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<html><head><title>yoyo ketang</title></head>
<body>
<b><!--Hey, this in comment!--></b>
<p class="title"><b>yoyoketang</b></p>
<p class="yoyo">這里是我的微信公眾號:yoyoketang
<a href="http://www.cnblogs.com/yoyoketang/tag/fiddler/" class="sister" id="link1">fiddler</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/python/" class="sister" id="link2">python</a>,
<a href="http://www.cnblogs.com/yoyoketang/tag/selenium/" class="sister" id="link3">selenium</a>;
快來關注吧!</p>

<p class="story">...</p>
2.為了學習方便,可以把此html文件和腳本放同一文件夾下

3.用python的open函數讀取這個html,如下圖能正確打印出來,說明讀取成功了

 

二、解析器:html.parser

1.用BeautifulSoup的構造方法,就能得到一個文檔的對象, 可以傳入一段字符串或一個文件句柄

2.如果我們調用BeautifulSoup這個類的時候,不帶"html.parser"參數,這時候會有個waring的,下圖紅色框框區域給出了建議。

3.html.parser這個是python庫里面自帶的解析器,無需安裝。

4.prettify()這個方法是把文件解析成html格式,用html的標准格式輸出(有縮進的)

 

 

 

三、對象的種類

1.Beautiful Soup將復雜HTML文檔轉換成一個復雜的樹形結構,每個節點都是Python對象,所有對象可以歸納為4種:

 

Tag :   標簽對象,如:<p class="title"><b>yoyoketang</b></p>,這就是一個標簽

NavigableString :字符對象,如:這里是我的微信公眾號:yoyoketang

BeautifulSoup   :就是整個html對象

Comment    :注釋對象,如:!-- for HTML5 --,它其實就是一個特殊NavigableString

2.弄清楚了這四個對象,后面所有的操作但是基於這四個(其實最后面一個comment可以忽略,幾乎用不到)

 

四、Tag對象

1.html里面識別一個tag,其實一般像這種:

<p class="title"><b>yoyoketang</b></p>

<b>yoyoketang</b>

<head><title>yoyo ketang</title></head>

以上這些都是tag,很明顯都是以<xx 開頭</xx> 結尾這種,就是一個完整的tag

2.通過標簽的名稱,來獲取tag對象

3.如果有多個相同的標簽名稱,返回的是第一個

 

五、Tag對象:name屬性

1.tag的name屬性,每一個tag都有name屬性,用.name獲取,如上面的三個name屬性分別為p,b,head。也就是<xx開頭的,這里的xx就是它的name屬性

2.html是一個樹狀結構的,每個tag都有屬性,整個html對象也有name屬性,它的屬性是:[document]

 

六、Tag對象:Attributes

1.tag.attrs可以打印出所有的屬性,可以看出是個字典格式的

2.那么獲取其中的某一個屬性,就跟操作字典一樣,如:tag["href"]

3.由於class屬性一般可以為多個,中間空格隔開,所以class屬性獲取的是一個list類型:[u'sister']

4.tag.string,這里Tag對象變成NavigableString對象了,呵呵小伙伴們要懵逼了吧。其實打印出來就是一個字符串。

 

七、發福利

1.爬糗事百科首頁的段子

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

r = requests.get("https://www.qiushibaike.com/")
qiubai = r.content
soup = BeautifulSoup(qiubai, "html.parser")
duanzi = soup.find_all(class_="content")
for i in duanzi:
    # tag的 .contents 屬性可以將tag的子節點以列表的方式輸出
    duan = i.span.contents[0]  # 取第一個
    print duan

 

對python接口自動化有興趣的,可以加python接口自動化QQ群:226296743

也可以關注下我的個人公眾號:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM