我正在使用BeautifulSoup(python)的find\u all函数和regex来从网页上刮取一些数据。非常明确地说,我正在从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')})
前者像expeced一样工作-它返回所有分类广告(包括溢价),但后者不返回任何内容。怎么了?为什么'item.*premium'
不映射到第二个div类?你知道吗
作为第二个问题:我将如何修改第一个regex来表示“我想要所有有'item'
这个词但没有'premium'
这个词的正则表达式?”?你知道吗
编辑
供将来参考:经过一番反复试验,我的第二个问题的答案变成了:
regularAds = [tag for tag in soup.find_all('div', attrs={'class': re.compile('item')}) if 'premium' not in tag['class']]
效果不错。你知道吗
奇怪的idd作为你的第二个正则表达式肯定会起作用:
最后一个问题
soup.findAll('div', attrs={'class': re.compile('^item((?!premium).)*$')})
怎么样。你知道吗我的快速猜测是,beautiful soup中的
class
基本上是对class属性的实际文本调用class.split(' ')
的结果。如果你做了:相关问题 更多 >
编程相关推荐