拆分两个标签,并将其分别附加在bs4 python中

时间:2018-11-07 08:32:02

标签: python parsing web-scraping beautifulsoup web-crawler

我有一个TR[2],它是动态的,我尝试这样获得它:

self.soup.select("#detail > tbody > tr > td:nth-of-type(2)")

我希望其中所有td[3]都是动态的: 他们可能只有一个字符串,或者只有一个字符串和<a href>,现在我想将字符串拆分为某个变量,并将该<a>标签的“ string”拆分为另一个变量,但重要的是,td其中没有<a>,我希望它附加“ None”,因为两个变量应具有相同的长度和索引,以便正确“压缩”它们以备将来使用。 这是一些例子:

<td class='bolt'>
  "the text I want"
  <br>
  <a href='Javascript:void(0);'>the other text i want</a>
</td>

在将它们追加到var时应如下所示:

event = ["the text I want"]
vessel = ["the other text i want"]

和另一个“可能的” td:

<td class='bolt'>
   "another string we need"
</td>

和最终结果:

event = ["the text I want","another string we need"]
vessel = ["the other text i want", None(or empty),]

1 个答案:

答案 0 :(得分:1)

如果可以有一个或两个文本节点(如所述),则可以使用

vessel = []
event = []
for td in self.soup.select("#detail > tbody > tr > td:nth-of-type(2)"):
    event.append([i.strip() for i in td.strings if i.strip()][0])
    vessel.append(([i.strip() for i in td.strings if i.strip()] + [None])[1])

print(event)
['"the text I want"', '"another string we need"']
print(vessel)
['the other text i want', None]

如果情况可能更复杂,请告诉我