python - 使用 BeautifulSoup 选择特定的 <tr> 标签

标签 python beautifulsoup

我正在使用这段代码用 BeautifulSoup 获取一些 html 表格行:

from bs4 import BeautifulSoup
import urllib2
import re

page = urllib2.urlopen('www.something.bla')
soup = BeautifulSoup(page)
rows = soup.findAll('tr', attrs={'class': re.compile('class1.*')})

这是我得到的结果:

<tr class="class1 class2 class3">...</tr>
<tr class="class1 class2 class3">...</tr>
<tr class="class1 class5">...</tr>
<tr class="class1_a class5_a">...</tr>
<tr class="class1 class5">...</tr>
<tr class="class1_a class5_a">...</tr>
<!-- etc. -->

但是,我想排除(或首先不选择它们)那些具有 class1 class2 class3 作为属性的行。

我该怎么做?
感谢您的帮助!

最佳答案

也许没有正则表达式会更容易。这适用于 BeautifulSoup 3:

from BeautifulSoup import BeautifulSoup

page = """
<tr class="class1 class2 class3">1</tr>
<tr class="class1 class2 class3">2</tr>
<tr class="class1 class5">3</tr>
<tr class="class1_a class5_a">4</tr>
<tr class="class1 class5">5</tr>
<tr class="class1_a class5_a">6</tr>
<tr>7</tr>"""

def cond(x):
    if x:
        return x.startswith("class1") and not "class2 class3" in x
    else:
        return False

soup = BeautifulSoup(page)
rows = soup.findAll('tr', {'class': cond})

for row in rows:
    print row

=>

<tr class="class1 class5">3</tr>
<tr class="class1_a class5_a">4</tr>
<tr class="class1 class5">5</tr>
<tr class="class1_a class5_a">6</tr>

使用 BeautifulSoup 4,我能够使其工作如下:

import re
from bs4 import BeautifulSoup

page = """
<tr class="class1 class2 class3">1</tr>
<tr class="class1 class2 class3">2</tr>
<tr class="class1 class5">3</tr>
<tr class="class1_a class5_a">4</tr>
<tr class="class1 class5">5</tr>
<tr class="class1_a class5_a">6</tr>
<tr>7</tr>"""

soup = BeautifulSoup(page)
rows = soup.find_all('tr', {'class': re.compile('class1.*')})

for row in rows:
    cls = row.attrs.get("class")
    if not ("class2" in cls or "class3" in cls):
        print row

=>

<tr class="class1 class5">3</tr>
<tr class="class1_a class5_a">4</tr>
<tr class="class1 class5">5</tr>
<tr class="class1_a class5_a">6</tr>

在 BS4 中,class 等多值属性的值是字符串列表,而不是字符串。参见 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#id12 .

关于python - 使用 BeautifulSoup 选择特定的 <tr> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253684/

相关文章:

Python PLY 赋值操作失败

python - 有没有办法使用 numpy 广播来 NOT 任意 M x N 矩阵?

python - 使用 Python 进行平台无关的文本散列

python - 一起使用 BeautifulSoup 和 Pandas

python - Unicode解码错误: 'charmap' codec can't encode character X at position Y: character maps to undefined

python - 如何点击img元素?

python - 通过 Beautiful Soup 解析带有 unicodes 的 HTML 时出现问题

python - 使用 beautifulsoup 提取 html

python - 如何使用 python 和 beautifulsoup 解析 script 标签

python - 脚本在抓取多个值时抛出错误