Python中利用BeautifulSoup4反查包含文本內容的標籤

1 問題引出

編寫爬取Amazon服裝行業數據時,遇到一個問題:根據文本內容Next反查包含它的父標籤。請看下面HTML片段

<li class="a-last">
<a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next
<span class="a-letter-space"></span>
<span class="a-letter-space"></span></a>
</li>

我需要根據Next反查包含它的標籤a,以此獲取href屬性的值。最近編寫很多爬蟲項目,積累了一定的經驗,於是,我認爲上述很簡單,編寫如下代碼:

# testBs.py
from bs4 import BeautifulSoup
import re 
str = """<li class="a-last"><a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li>""" 

soup = BeautifulSoup(str,'lxml')
a = soup.find('a',text=re.compile(r"Next"))
print(a)

運行後,如下:
在這裏插入圖片描述
也就是說,查不到標籤a

2 問題分析

若將HTML片段改爲標籤a下不含子標籤span的話,即

<li class="a-last">
<a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next</a>
</li>

則上述代碼可以得到結果:
在這裏插入圖片描述
我分析,肯定是代碼a = soup.find('a',text=re.compile(r"Next"))有問題。那麼針對原HTML片段,爲了不受查詢標籤a的限制,我將核心代碼改爲:

a = soup.find(text=re.compile(r"Next"))
print(a)

運行結果爲:
在這裏插入圖片描述
這是一個好的象徵,離成功近了一步。經過查閱BeautifulSoup4的資料,此時得到的對象是一個BeautifulSoup.NavigableString對象,我們可以利用代碼查看變量a的信息:

from bs4 import BeautifulSoup
import re 
import pprint
str = """<li class="a-last"><a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li>""" 

soup = BeautifulSoup(str,'lxml')
a = soup.find(text=re.compile(r"Next"))
#print(a)
pprint.pprint(a.__dict__)

運行結果爲:
在這裏插入圖片描述
那麼此時我們的問題答案已經很明瞭了。

3 解決方案

最終,利用文本內容(且與其同一層還有其他標籤)反查包含它的標籤的屬性值的代碼如下:

from bs4 import BeautifulSoup
import re 
import pprint
str = """<li class="a-last"><a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li>""" 

soup = BeautifulSoup(str,'lxml')
a = soup.find(text=re.compile(r"Next"))

print(a.parent.get('href'))

代碼運行結果爲:
在這裏插入圖片描述
完美!!!

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