我正在嘗試在我的 python 腳本中捕獲一個鏈接。我有一個保存正則運算式模式的變數。
我想從頁面 HTML 中捕獲以下鏈接。
<a class="pg-normal pg-bton" href="/department/office/pg2"> NEXT >> </a>
代碼是:
parser = "lxml"
next_regex = r'(.*?)NEXT(.*?)'
html_bodySoup = BeautifulSoup(urllib.request.urlopen(url), parser)
links = html_bodySoup.find_all('a', href = re.compile(nextpg_regex))
找不到問題所在,但它沒有給我所需的鏈接。我也嘗試了其他更準確的正則運算式模式。
uj5u.com熱心網友回復:
您不需要這里的正則運算式。您可以簡單地檢查 是否NEXT是in節點文本。
您可以使用
links = html_bodySoup.find_all(lambda x: x.name=='a' and 'NEXT' in x.text)
在這里,我們搜索帶有a名稱和NEXT節點文本的任何標簽。
一個 Python 測驗:
from bs4 import BeautifulSoup
html = '<p><a href="/department/office/pg2"> NEXT >> </a></p>'
parser = "lxml"
html_bodySoup = BeautifulSoup(html, parser)
html_bodySoup.find_all(lambda x: x.name=='a' and 'NEXT' in x.text)
# => [<a href="/department/office/pg2"> NEXT >> </a>]
如果你想搜索一個確切的詞 NEXT,那么你可以使用這樣的正則運算式:
html_bodySoup.find_all(lambda x: x.name=='a' and re.search(r'\bNEXT\b', x.text))
# => [<a href="/department/office/pg2"> NEXT >> </a>]
wherere.search在字串和\bNEXT\b模式中的任何位置搜索匹配項確保NEXT它找到的是一個完整的單詞(感謝單詞邊界)。
uj5u.com熱心網友回復:
您還可以使用 -soup-contains 來定位該文本。但是,看起來您可能只使用該類(多值之一)。下面顯示的一些選項,其中最具描述性的未注釋掉:
from bs4 import BeautifulSoup as bs
html = '''<a href="/department/office/pg2"> NEXT >> </a>'''
soup = bs(html, 'lxml')
# soup.select_one('.pg-bton[href*=department]:-soup-contains("NEXT")')
# soup.select_one('.pg-bton')
soup.select_one('.pg-bton[href*=department]:-soup-contains("NEXT")')
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334533.html
