python BeautifualSoup使用

爬蟲過程中解析html 獲取關注信息,常用的方法有正則匹配re、xpath、BeautifualSoup,
re 正則,規則每次用都需要查(我比較
xpath,運行比較快
BeautifualSoup,簡單粗暴,我喜歡
以下是我的理解,之說我用到的方法,不全面但使用

from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')

response.text 是獲取到的html文本信息
html.parse 是 使用python 內置的html解析器, 第二個參數也可以寫成 'lxml' 用lxml解析器解析, (可以理解爲html是特殊的xml)

上例子:
https://www.dxsbb.com/news/44368.html

1. prettify()

要拿到上述連接中 大學排名的順序信息,直接網頁右鍵 查看網頁源代碼,格式非常的亂,不好找規律,這個時候可以用到一個方法格式化網頁的源碼輸出,對比一下兩個的效果:

from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.prettify())

2. 定位元素信息 find()、find_all()、select()

find() 是查找到第一個匹配的元素,模糊匹配
find_all() 是查找全部匹配的元素 返回一個soup列表,模糊匹配
select() 與find類似 是精準匹配
上例子:
上述連接中沒有找到可用的例子,所以網上找了一個圖 ,小圖一上,清晰明瞭

soup.find(name='td',class_='bar')  # 實際定位到的
soup.select('td[class="bar"]')  # 查找的

根據上述格式化之後的html、找到表格中數據規則 每一行開始都是 <tr class="alt">,裏邊包裹的是<td>中是真實的值,找到規則之後可以如下方式獲取

soup = BeautifulSoup(response.text, 'html.parser')
        listTemp = []   # 將所有信息存儲在列表中
        trTag = soup.find_all(name='tr', class_='alt') # 找到每一行的信息,返回一個列表
        for tr in trTag:
            subTemp = [] # 將一行信息中的每個值,保存在列表中
            for tdTag in tr.find_all('td'):  # 一行信息有多個 td,一個td包裹一個值
                subTemp.append(tdTag.text)  # tag.text 獲取內容,
            listTemp.append(subTemp)  # 將一行的信息存入總的列表中

        for i in listTemp:  # 打印 所有的值
            print(i)

3. 另外幾個常用的方法

3.1 打印獲取到的特定一塊html區域

soup = BeautifulSoup(response.text, 'html.parser')
        trTag = soup.find_all(name='tr', class_='alt')  
        print(trTag[0].prettify())  # 打印第一個tr標籤中的html文本
<tr class="alt">
 <td>
  1
 </td>
 <td>
  <div>
   清華大學
  </div>
 </td>
 <td>
  <div>
   北京
  </div>
 </td>
 <td>
  <div>
   綜合
  </div>
 </td>
 <td>
  <div>
   852.5
  </div>
 </td>
</tr>

3.2 獲取標籤的屬性

soup.a.attrs 獲取a所有的屬性和屬性值,返回一個字典
soup.a.attrs['href'] 獲取href屬性, 可以簡寫成soup.a['href]

3.3 獲取標籤的內容

soup.a.string ,獲取質數內容, 比如 <a href ="xxxx"> a標籤的直屬內容</a>
soup.a.text ,獲取所有內容, 比如 <a href ="xxxx"> <h1>非a標籤的直屬內容</h1></a>, 這就可以解釋上述例子中,爲啥沒有考慮<div>這個標籤了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章