【发布时间】:2013-12-18 14:56:19
【问题描述】:
这很可能是重复的。我已经阅读了很多与表格相关的问题——like this one——试图了解如何提取嵌套更深的网页内容。
这里是源代码:
<div class='event-details'>
<div class='event-content'>
<p style="text-align:center;">
<span style="font-size:14px;">
<span style="color:#800000;">TICKETS: ...<br></span>
</span>
<span style="font-size:14px;">
<span style="color:#800000;">Front-of-House $35 ...<br></span>
</span>
</p>
<p><span style="font-size:14px;">From My Generation ...</span></p>
<p><span style="font-size:14px;">With note for note ...</span></p>
<p><span style="font-size:14px;">The Who Show was cast ...</span></p>
<p><span style="font-size:14px;">With excellent musicianship ...</span></p>
<p><span style="font-size:14px;">http://www.thewhoshow.com</span></p>
</div>
</div>
这就是困难所在:我不想要票证信息,它在我想要的段落文本之前,并且所有文本在某一点或另一个点前面都有一个相同的 style 标记。即:<span style="font-size:14px;">
我希望在 BS 中有一种方法可以获取段落提供的独特功能——即p 标签紧跟上面的 span 标签。见:<p><span style="font-size:14px;">
这是我所做的:
desc_block = newsoup.find('div', {'class','event-details'}).find_all('p')
description = []
for desc in desc_block:
desc_check = desc.get_text()
description.append(desc_check)
print description[2:]
问题有两个:第一,我添加了我不想要的字符(例如\n)和信息(票务信息);第二,我要附加,因为我真正想做的是提取文本并将其作为 utf-8 字符串添加到空字符串中。谁能帮我解决第一个问题——即获取无关的p标签和我不想要的信息?任何帮助将不胜感激。谢谢。
【问题讨论】:
-
您可能正在寻找 XPath 表达式。有关如何使用它的示例,请参阅answer I gave here。您可以将 XPath 表达式与 lxml 一起使用,它还提供了 Beautiful Soup 解析器(以及其他)。
-
@LukasGraf 你的回复很棒;谢谢你,卢卡斯。您能否提供任何建议或指向另一个教程以使 lxml(我与 xpath 一起使用的唯一工具)与 BS 很好地配合?我似乎永远无法使这两项工作,但我相信它可以完成,正如 lxml 文档所说的那样。可能是一个愚蠢的问题,但你肯定比我更清楚,我会尽职尽责地遵循你提出的任何建议:)。谢谢你,先生。
-
正在寻找答案 ;-)
-
你也想放弃
"Front-of-House $35...",对吧?那么前两个 14px 跨度,分别来自#800000跨度的所有文本? -
@LukasGraf 是的,没错;我只想要
<p><span style="font-size:14px;">段落。 ps:谢谢编辑。以后我会尝试像这样格式化html块。
标签: python python-2.7 beautifulsoup