【发布时间】:2014-05-09 04:41:56
【问题描述】:
我正在使用 Python 和 BeautifulSoup 进行网页抓取。
例如,我要抓取以下 html 代码:
<ul>
<li class="product-item">Product A</li>
<li class="product-item child-product">Product B</li>
<li class="product-item child-product">Product C</li>
<li class="product-item child-product">Product D</li>
</ul>
使用 BeautifulSoup,我只想找到属性为 class="product-item" 的产品(仅限产品 A),而不是“子产品”
如果我执行以下操作:
product_list = soup.find_all('li', {'class': 'product-item'})
结果包括所有产品 A、B、C 和 D。
我读过另一个post about the same question,我按照建议做了以下操作,但结果是一样的……它返回了所有产品。
product_list = soup.findAll(attrs={'class': re.compile(r"^product-item$")})
我应该怎么做才能找到类别与“product-item”完全匹配的产品??
【问题讨论】:
-
我不认为你可以用 BeautifulSoup 做你想做的事;过滤掉任何具有更多类的标签。
-
我不确定我是否理解。什么应该使它包含
Product B而不是Product C属性相同? -
@JoachimIsaksson 对不起!我编辑了这个问题。它应该只返回产品 A,而不是 B/C/D
-
普通的
soup.findAll(attrs={'class': 'product-item'})不工作吗?如果没有,您使用的是哪个版本?您在问题中交替使用find_all和findAll:) -
@JoachimIsaksson:BeautifulSoup(正确)将
class属性分类为列表属性;它将匹配列出的任何一个类。因此,您的findAll()调用将找到所有具有至少product-item类的元素。
标签: python html web-scraping beautifulsoup