我使用bs4從js-stream-item類中拉出li標籤,但不包含以下的scroll-bump-user-card。 (這是隻得到a,b只)使用BeautifulSoup查找所有包含AND NOT NOT的標籤b
<li class="js-stream-item stream-item ">a<li>
<li class="js-stream-item stream-item stream-item ">b<li>
<li class="js-stream-item stream-item scroll-bump-user-card ">c<li>
有兩種方法我在想。
使用
soup.find_all('li', class_=re.compile('js-stream-item'))
獲取所有標籤,然後使用scroll-bump-user-card移除標籤。使用
[tag.extract() for tag in soup.find_all('li', class_=re.compile('scroll-bump-user-card'))]
先刪除,然後查找全部。
問題是如果有一個體面的方式在re.compile()
編輯正則表達式,且不語法來獲得A,B。
更新我重新寫alecxe的回答的第一個選項爲一個單一的長行如下:
所有的soup.find_all(lambda tag: re.compile('js-stream-item').search(str(tag))
and not re.compile('scroll-bump-user-card').search(str(tag))
and tag.name == 'li')
謝謝!我將您的第一個選項重寫爲我的文章中更新的一行。對此有何建議?我還研究了一些正則表達式,嘗試類似^(?!。* scroll-bump)* js-stream-item,但沒有運氣。你有什麼主意嗎? – PhantomKidding
@PhantomKidding,我不確定你爲什麼要在一行中做第一個選項,並修改它來做正則表達式搜索。另外,你有沒有看過鏈接答案中的多值屬性意味着什麼?您不會將單個字符串作爲類 - 它是一個字符串列表 - 每個類都有一個字符串。謝謝。 – alecxe