如果类“包含”或正则表达式,那么美丽的汤?
Posted
技术标签:
【中文标题】如果类“包含”或正则表达式,那么美丽的汤?【英文标题】:Beautiful Soup if Class "Contains" or Regex? 【发布时间】:2016-04-12 03:42:15 【问题描述】:如果我的班级名称经常不同,例如:
listing-col-line-3-11 dpt 41
listing-col-block-1-22 dpt 41
listing-col-line-4-13 CWK 12
通常我可以这样做:
for EachPart in soup.find_all("div", "class" : "ClassNamesHere"):
print EachPart.get_text()
这里有太多的类名需要使用,所以其中有很多。
我知道 Python 没有我通常会使用的“.contains”,但它确实有一个“in”。虽然我还没有找到一种方法来整合它。
我希望有一种方法可以使用正则表达式来做到这一点。虽然我的 Python 语法再次让我失望,但我一直在尝试以下方面的变化:
regex = re.compile('.*listing-col-.*')
for EachPart in soup.find_all(regex):
但这似乎并不奏效。
【问题讨论】:
【参考方案1】:你可以试试这个 for 循环:
regex = re.compile('.*listing-col-.*')
for EachPart in soup.find_all("div", "class" : regex):
print EachPart.get_text()
【讨论】:
【参考方案2】:您可以通过使用与gazpacho 的部分匹配来避免正则表达式...
输入:
html = """\
<div class="listing-col-line-3-11 dpt 41">A</div>
<div class="listing-col-block-1-22 dpt 41">B</div>
<div class="listing-col-line-4-13 CWK 12">C</div>
"""
部分匹配码:
from gazpacho import Soup
soup = Soup(html)
divs = soup.find("div", "class": "listing-col-", partial=True)
[div.text for div in divs]
输出:
['A', 'B', 'C']
【讨论】:
【参考方案3】:BeautifulSoup 支持CSS selectors,它允许您根据特定属性的内容选择元素。这包括用于包含的选择器 *=
。
以下将返回所有 div
元素,其 class
属性包含文本“listing-col-”:
for EachPart in soup.select('div[class*="listing-col-"]'):
print EachPart.get_text()
【讨论】:
以上是关于如果类“包含”或正则表达式,那么美丽的汤?的主要内容,如果未能解决你的问题,请参考以下文章