'style' attrs 中的部分值在 python bs4 中变为变量
Part of value inside of 'style' attrs to become variable in python bs4
假设我们有代码:
<tr class=" " somethingc1="" somethingc2="" somethingc3="" data-something="1" something="1something4" something_id="6something7">
<td class="text-center td_something">
<div>
<span doo="true" class="foo" style="left:70%;z-index:99;">
<span doo="true" class="foo" style="left:50%;z-index:90;">
<span doo="true" class="Kung foo" style="left:90%;z-index:95;">
</div>
</td>
</tr>
<tr class=" " somethingc1="" somethingc2="" somethingc3="" data-something="1" something="1something4" something_id="6something7">
<td class="text-center td_something">
<div>
<span doo="true" class="Kung foo" style="left:35%;z-index:95;">
</div>
</td>
</tr>
<tr class=" " somethingc1="" somethingc2="" somethingc3="" data-something="1" something="1something4" something_id="6something7">
<td class="text-center td_something">
<div>
<span doo="true" class="foo" style="left:99%;z-index:100;">
</div>
</td>
</tr>
我如何使用 Python 中的 Bs4 制作一个列表来找到 'style' 属性中 'left' 的最大值,记住我不想考虑跨度与 class_ "Kung"
期望的结果是:
[70,False or NaN,99]
我明白了,我应该从以下内容开始:
trs = soup.find_all('tr', attrs={"data-something": "1"})
List = list()
find_all('span',{'style': re.compile(r'^left:.')})
>>> import bs4
>>> HTML = open('temp.htm').read()
>>> soup = bs4.BeautifulSoup(HTML, 'lxml')
首先,select class
包含 foo
的所有元素(无论它是否还包含其他内容)。
>>> elements = soup.select('.foo')
在每种情况下,element['class']
将是元素的 class
中的项目列表,即只是 foo
或 foo
和 Kung
在这种情况下 HTML。因此,对 element['class']
长度的测试是对 foo
单独存在的测试。
element['style']
获取元素的 style
的内容。对我们想要的部分使用正则表达式,并将其添加到名为 lefts
.
的列表中
>>> lefts = [ ]
>>> for element in elements:
... if len(element['class'])==1:
... lefts.append(int(bs4.re.search(r'left:([0-9]+)', element['style']).groups(0)[0]))
...
>>>
>>> lefts
[70, 50, 99]
编辑:
找到 tr
个元素,然后用 class foo
寻找 elements
。和以前一样,只考虑那些只有 class foo
而不是 foo
和 Kung
的元素。收集这些元素的 left
个样式元素,然后找到它们的最大值。
>>> HTML = open('temp.htm').read()
>>> import bs4
>>> soup = bs4.BeautifulSoup(HTML, 'lxml')
>>> trs = soup.findAll('tr')
>>> tr_max = []
>>> for tr in trs:
... elements = tr.select('.foo')
... lefts = [ ]
... for element in elements:
... if len(element['class'])==1:
... lefts.append(int(bs4.re.search(r'left:([0-9]+)', element['style']).groups(0)[0]))
... if lefts:
... tr_max.append(max(lefts))
... else:
... tr_max.append(None)
...
>>> tr_max
[70, None, 99]
假设我们有代码:
<tr class=" " somethingc1="" somethingc2="" somethingc3="" data-something="1" something="1something4" something_id="6something7">
<td class="text-center td_something">
<div>
<span doo="true" class="foo" style="left:70%;z-index:99;">
<span doo="true" class="foo" style="left:50%;z-index:90;">
<span doo="true" class="Kung foo" style="left:90%;z-index:95;">
</div>
</td>
</tr>
<tr class=" " somethingc1="" somethingc2="" somethingc3="" data-something="1" something="1something4" something_id="6something7">
<td class="text-center td_something">
<div>
<span doo="true" class="Kung foo" style="left:35%;z-index:95;">
</div>
</td>
</tr>
<tr class=" " somethingc1="" somethingc2="" somethingc3="" data-something="1" something="1something4" something_id="6something7">
<td class="text-center td_something">
<div>
<span doo="true" class="foo" style="left:99%;z-index:100;">
</div>
</td>
</tr>
我如何使用 Python 中的 Bs4 制作一个列表来找到 'style' 属性中 'left' 的最大值,记住我不想考虑跨度与 class_ "Kung"
期望的结果是:
[70,False or NaN,99]
我明白了,我应该从以下内容开始:
trs = soup.find_all('tr', attrs={"data-something": "1"})
List = list()
find_all('span',{'style': re.compile(r'^left:.')})
>>> import bs4
>>> HTML = open('temp.htm').read()
>>> soup = bs4.BeautifulSoup(HTML, 'lxml')
首先,select class
包含 foo
的所有元素(无论它是否还包含其他内容)。
>>> elements = soup.select('.foo')
在每种情况下,element['class']
将是元素的 class
中的项目列表,即只是 foo
或 foo
和 Kung
在这种情况下 HTML。因此,对 element['class']
长度的测试是对 foo
单独存在的测试。
element['style']
获取元素的 style
的内容。对我们想要的部分使用正则表达式,并将其添加到名为 lefts
.
>>> lefts = [ ]
>>> for element in elements:
... if len(element['class'])==1:
... lefts.append(int(bs4.re.search(r'left:([0-9]+)', element['style']).groups(0)[0]))
...
>>>
>>> lefts
[70, 50, 99]
编辑:
找到 tr
个元素,然后用 class foo
寻找 elements
。和以前一样,只考虑那些只有 class foo
而不是 foo
和 Kung
的元素。收集这些元素的 left
个样式元素,然后找到它们的最大值。
>>> HTML = open('temp.htm').read()
>>> import bs4
>>> soup = bs4.BeautifulSoup(HTML, 'lxml')
>>> trs = soup.findAll('tr')
>>> tr_max = []
>>> for tr in trs:
... elements = tr.select('.foo')
... lefts = [ ]
... for element in elements:
... if len(element['class'])==1:
... lefts.append(int(bs4.re.search(r'left:([0-9]+)', element['style']).groups(0)[0]))
... if lefts:
... tr_max.append(max(lefts))
... else:
... tr_max.append(None)
...
>>> tr_max
[70, None, 99]