我有一个如下所示的表结构:
<tr><td>
<td>
<td bgcolor="#E6E6E6" valign="top" align="left">testtestestes</td>
</tr>
<tr nowrap="nowrap" valign="top" align="left">
<td nowrap="nowrap">8-K</td>
<td class="small">Current report, items 1.01, 3.02, and 9.01
<br>Accession Number: 0001283140-16-000129 Act: 34 Size: 520 KB
</td>
<td nowrap="nowrap">2016-09-19<br>17:30:01</td>
<td nowrap="nowrap">2016-09-19</td><td align="left" nowrap="nowrap"><a href="/cgi-bin/browse-edgar?action=getcompany&filenum=001-03473&owner=include&count=100">001-03473</a>
<br/>161891888</td></tr>
这是一行数据。这是我使用beautifulSoup的脚本。我可以得到<tr>
和<td>
就好了。但它们在一个单独的列表中。
for tr in (soup.find_all('tr')):
tds = tr.find_all('td')
print tds
我的问题是如何从两个单独的<tr>
获取数据并使其看起来像是一行数据。我想在<td>
答案 0 :(得分:0)
如果你想配对它们,请从soup.find_all('tr')
创建一个迭代器,然后将压缩成对:
it = iter(soup.find_all('tr'))
for tr1, tr2 in zip(it, it):
tds = tr1.find_all('td') + tr2.find_all("td")
print(tds)
切片的等价物是从不同的起始位置开始并使用2的步骤:
it = soup.find_all('tr')
for tr1, tr2 in zip(it[::2], it[1::2]):
tds = tr1.find_all('td') + tr2.find_all("td")
print(tds)
使用 iter 意味着您无需浅层复制列表。
不确定如何将不均匀的trs量放入逻辑中,因为没有任何东西可以配对,但如果有,你可以使用izip_longest:
from itertools import izip_longest # python3 zip_longest
it = iter(soup.find_all('tr'))
for tr1, tr2 in izip_longest(it, it):
tds = tr1.find_all('td') + tr2.find_all("td") if tr2 else []
print(tds)