使用Python 2.7和bs4,请考虑以下HTML片段:
<div class="pd-t10">
<ul class="bullet-list c-body pd-b20">
<li class="mr-t20">
<strong>
<em>Innerhalb Deutschlands</em>
</strong>: 0800 100 6711</li>
<li class="mr-t20">International: Siehe die Liste der
<a href="/de/support/contacts/us_support.html" fallback="Auf Englisch" target="new">gebührenfreien Telefonnummern weltweit</a> von VMware.</li>
<li class="mr-t20">
<strong>Wichtiger Hinweis:</strong> Bitte halten Sie Ihre
<a href="/de/support/customer-number-faq.html" fallback="Auf Englisch">Kundennummer</a> bereit, wenn Sie den Support anrufen. Wenn Sie über ein VMware-Konto verfügen, finden Sie Ihre Kundennummer auf der
<a href="/account/secure/customerRegistration.do?action=existingCustomer">Profilseite</a>.</li>
</ul>
</div>
使用.stripped_字符串可以将文本输出,但打印纯文本的格式与文本在浏览器中的显示方式不匹配:
^{pr2}$产量:
Innerhalb Deutschlands
: 0800 100 6711
International: Siehe die Liste der
gebührenfreien Telefonnummern weltweit
von VMware.
Wichtiger Hinweis:
Bitte halten Sie Ihre
Kundennummer
bereit, wenn Sie den Support anrufen. Wenn Sie über ein VMware-Konto verfügen, finden Sie Ihre Kundennummer auf der
Profilseite
.
但我想看到的是:
Innerhalb Deutschlands: 0800 100 6711
International: Siehe die Liste der gebührenfreien Telefonnummern weltweit von VMware.
Wichtiger Hinweis: Bitte halten Sie Ihre Kundennummer bereit, wenn Sie den Support anrufen. Wenn Sie über ein VMware-Konto verfügen, finden Sie Ihre Kundennummer auf der Profilseite.
有没有一个我错过的聪明方法?得到相似的结果。。。在
添加更多细节。。。这里有一件事让我困惑:似乎soup对象即使在移除标签之后也会保留一些标签的记忆。。。在
如果我们对不是<p>
、<li>
或{
<div class="pd-t10">
<li class="mr-t20">
Innerhalb Deutschlands
: 0800 100 6711</li>
<li class="mr-t20">International: Siehe die Liste der
gebührenfreien Telefonnummern weltweit von VMware.</li>
<li class="mr-t20">
Wichtiger Hinweis: Bitte halten Sie Ihre
Kundennummer bereit, wenn Sie den Support anrufen. Wenn Sie über ein VMware-Konto verfügen, finden Sie Ihre Kundennummer auf der
Profilseite.</li>
</div>
它的行为仍然不像你期望的那样:
[txt for txt in foo.stripped_strings]
[u'Innerhalb Deutschlands', u': 0800 100 6711', u'International: Siehe die Liste der', u'geb\xfchrenfreien Telefonnummern weltweit', u'von VMware.', u'Wichtiger Hinweis:', u'Bitte halten Sie Ihre', u'Kundennummer', u'bereit, wenn Sie den Support anrufen. Wenn Sie \xfcber ein VMware-Konto verf\xfcgen, finden Sie Ihre Kundennummer auf der', u'Profilseite', u'.']
但是,如果我们将未包装的代码写入tempfile,然后将其作为一个新的soup对象打开,我们将更接近:
[txt for txt in newSoup.stripped_strings]
[u'Innerhalb Deutschlands\n: 0800 100 6711', u'International: Siehe die Liste der \n geb\u7aefhrenfreien Telefonnummern weltweit von VMware.', u'Wichtiger Hinweis: Bitte halten Sie Ihre \n Kundennummer bereit, wenn Sie den Support anrufen. Wenn Sie \u7aefber ein VMware-Konto verf\u7aefgen, finden Sie Ihre Kundennummer auf der \n Profilseite.']
现在只需要在每个列表项中用空格替换换行符并去掉多余的空格(' '.join(listitem.split())
)。这_为_一般_问题_提供_了_一_个_解决_方案_ , _但_不能_解释_为什么_转储_字符串_和_创建_新_的_soup_对象_的_行为_与_现有_的_soup_对象_的_行为_不同_ 。_在
我从不把整篇课文擦掉。但一直都很具体。在
但是既然你必须按照你要求的方式去做,那么我会使用下面的简单工具来得到正确的解决方案。在
请记住,我在这里假设数据总是采用这种格式
a:b
,就像Innerhalb Deutschlands: 0800 100 6711
所以我要对你的
html
做些什么希望有帮助:-)
相关问题 更多 >
编程相关推荐