2017-08-24 37 views
2
特定條件查找ID

我刮在Python與BeautifulSoup

與BeautifulSoup網站

我想找到所有a hrefid開始與「宮」(與在尾部空間)+「3 -4字母

我只是想:

bsObj.findAll("a",{"id":"des "}) 

但沒有找到什麼,我本來打算。

我是否需要使用正則表達式或其他?

我將不勝感激您的所有幫助。謝謝。

<div> 
    <a id="des 6TN" href="/en-kr/shop/men/11-by-boris-bidjan-saberi?lvrid=_gm_d6tn"> 
     11 BY BORIS BIDJAN SABERI 
    </a> 
    <br/> 
    <a id="des R6L" href="/en-kr/shop/men/11-eleven?lvrid=_gm_dr6l"> 
     11 ELEVEN 
    </a> 
    <br/> 
</div> 

回答

4

如果你去正則表達式路線,你可以在編譯的正則表達式模式傳遞到像這樣的id參數(以供演示目的無關/ UNMATCH a標籤):

from bs4 import BeautifulSoup 
import re 
​ 
soup = BeautifulSoup("""<div><a id="des 6TN" href="/en-kr/shop/men/11-by-boris-bidjan-saberi? 
lvrid=_gm_d6tn">11 BY BORIS BIDJAN SABERI</a><br /><a id="des R6L" href="/en- 
kr/shop/men/11-eleven?lvrid=_gm_dr6l">11 ELEVEN</a><a id="ds R6L" href="/en- 
kr/shop/men/11-eleven?lvrid=_gm_dr6l">11 ELEVEN</a><br />""") 

soup.find_all('a', id=re.compile('^des \w{3,4}$')) 

#[<a href="/en-kr/shop/men/11-by-boris-bidjan-saberi? 
# lvrid=_gm_d6tn" id="des 6TN">11 BY BORIS BIDJAN SABERI</a>, <a href="/en- 
# kr/shop/men/11-eleven?lvrid=_gm_dr6l" id="des R6L">11 ELEVEN</a>] 
+0

這實在是太完美了!非常感謝! –

1

這裏的另一種方式(不使用正則表達式)我不喜歡正常表達式,我不需要它們。

all_des = soup.findAll('a') 
#list of every <a> tag 

for i in all_des: #loops through all 
    if i.has_attr('id') and i['id'].startswith('des'): 
# check if there is an id within the <a> and if the id starts with des. 
     print(i) 

輸出:

<a href="/en-kr/shop/men/11-by-boris-bidjan-saberi?lvrid=_gm_d6tn" id="des 6TN"> 
     11 BY BORIS BIDJAN SABERI 
    </a> 
<a href="/en-kr/shop/men/11-eleven?lvrid=_gm_dr6l" id="des R6L"> 
     11 ELEVEN 
    </a> 

希望由真棒「@Psidom」回答你的問題,上面的方法也許是更方便的給你,但我敢相信,蟒蛇內置方法比使用正則表達式更快。當正則表達式'^des \w{3,4}$'

**^** asserts position at start of the string des matches the characters des literally (case sensitive)

**\w{3,4}** matches any word character (equal to [a-zA-Z0-9_])

**{3,4}** Quantifier — Matches between 3 and 4 times, as many times as possible, giving back as needed (greedy)

**$** asserts position at the end of the string

+0

我真的很感謝你的好意! 它的功能非常完美! –

+0

謝謝,你太客氣了。我只是想確保你能理解它是如何工作的,而不僅僅是它的工作原理。 請不要忘記檢查使耐克標誌,並標記你的問題的答案是否是'Psidom'或我的問題。 此外,如果您有任何其他問題,請不要猶豫,只需在評論中輸入內容並編輯您的問題,即如果您需要任何其他幫助:) –