我正在使用BeautifulSoup的(python)find_all函數與正則表達式從網頁上刮掉一些數據。具體來說,我從here中挖出個別分類廣告。如果檢查每個所分類的廣告,可以看到它們通常包封在以下任一的div:看似簡單的Python正則表達式不匹配
<div class="item c-b-#">...</div>
或
<div class="item c-b-# premium">...</div>
#
哪裏是一個數字(通常爲0或2)。
這裏我的目標是用正則表達式來區分這兩者。下面是我做了什麼:
regularAds = soup.find_all('div', attrs={'class': re.compile('item.*')})
和
premiumAds = soup.find_all('div', attrs={'class': re.compile('item.*premium')})
前者作品expeced - 返回所有公告(包括地價),但後者返回無。它有什麼問題?爲什麼不'item.*premium'
映射到第二個div類?
作爲次要的問題:我將如何改變第一正則表達式說:「我希望所有那些有字'item'
但不字'premium'
編輯
以供將來參考:後一個小試驗和錯誤的答案我二次的問題變成了:。
regularAds = [tag for tag in soup.find_all('div', attrs={'class': re.compile('item')}) if 'premium' not in tag['class']]
這很好地工作
哇...它的工作!我從來不會猜到。我認爲有點怪異的行爲。不完全直觀,但它解釋了很多(我以前曾經遇到過類似的問題)。謝謝! –
很高興幫助!我認爲這樣做與'classList'類似。 –