【发布时间】:2014-03-25 19:47:29
【问题描述】:
我正在使用 BeautifulSoup 的 (python) find_all 函数和正则表达式来从网页上抓取一些数据。具体来说,我正在从here 中抓取各个分类广告。如果您检查每个分类广告,您会发现它们通常封装在以下任一 div 中:
<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')})
前者按预期工作 - 它返回 所有 分类(包括溢价),但后者不返回任何内容。它有什么问题?为什么'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']]
效果很好。
【问题讨论】:
标签: python regex beautifulsoup