Python爬蟲學習:Beautiful Soup (2)

1. 節點選擇器

from bs4 import BeautifulSoup
html = """
<html>
<head><title>The test!</title></head>
<body>
<ol>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89020249" rel="nofollow" target="_blank">入門</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89075453" rel="nofollow" target="_blank">使用urllib(request)</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89163384" rel="nofollow" target="_blank">使用urllib(error)</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89166027" rel="nofollow" target="_blank">使用requests</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89041626" rel="nofollow" target="_blank">下載一隻貓</a></li>
<li><a href="https://blog.csdn.net/nanhuaibeian/article/details/89048805" rel="nofollow" target="_blank">翻譯文本</a></li>
</ol>
"""
soup = BeautifulSoup(html,'lxml')

# 利用name屬性獲取節點的名稱
print(soup.head.name)

# 調用attrs獲取所有屬性
print(soup.a.attrs)

# 獲取某個屬性值
print(soup.a['href'])   # print(soup.a.attrs['href'])

# 獲取文本內容,選擇第一a節點,獲取的文本也是第一個a節點裏面的文本
print(soup.a.string)

在這裏插入圖片描述

2. 方法選擇器

  1. find_all()
findall(name,attrs,recursive,text,**kwargs)

顧名思義,就是查詢所有符合條件的元素。給他傳入一些屬性或文本,就可以得到符合條件的元素,返回的是一個列表。

name:

soup = BeautifulSoup(html,'lxml')
print(soup.find_all(name='li'))

這裏調用find_all()方法,傳入name參數,參數值爲li。即查詢出所有的li節點,返回結果時列表類型.

from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
# 查詢出所有的li節點後,繼續查內部的a節點
for each in soup.find_all(name='li'):
    print(each.find_all(name='a'))

在這裏插入圖片描述

   print(each.find_all(name='a')[0].string)	# 查詢文本
   print(each.find_all(name='a')[0]['href'])	# 查詢屬性href對應的值

在這裏插入圖片描述
attrs:
傳入一些屬性來查詢

soup = BeautifulSoup(html,'lxml')
for each in soup.find_all(name='li'):
    #   查詢屬性href包含"/details/89041626"的元素
    print(each.find_all(href=re.compile("/details/89041626")))

在這裏插入圖片描述
text:
text參數可用來匹配節點的文本,傳入的形式可以是字符串,可以是正則表達式對象

soup = BeautifulSoup(html,'lxml')
for each in soup.find_all(name='li'):
    #  傳入text參數, 查詢內部包含“貓”的文本信息
    print(each.find_all(text=re.compile('貓')))

在這裏插入圖片描述

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