问题:漂亮的汤对象似乎从HTML中删除了有价值的信息。为什么这样做,我该如何提取这个字段?
示例:我感兴趣的原始HTML表达了这一点:
<div id="KittyChow">
<h4 class="noteText">foodAmount</h4>
<span>< 1 tsp</span>
</div>
然而,当我创建我的汤对象时,相应的HTML行变为:
<div id="KittyChow"><h4 class="noteText">foodAmount</h4><span></span></div>
我的问题和疑问:为什么删除span和/ span之间的信息?是因为“小于/&lt;”标志表明一些HTML所以它剥离了吗?我想知道为什么会这样。我似乎无法在文档中找到解释....有没有办法在BeautifulSoup中解析这个?
第二:我如何提取这个&lt; 1个参数?我尝试使用左右端点创建一个正则表达式,并且ALMOST正常工作。如果指定“左子串匹配”和“右子串匹配”,我知道如何使用正则表达式返回文本。例如,下面的代码将返回“cat”。
import re
string= "The cat is obese."
left= "The"
right= "is obese."
pattern= re.compile(left + "(.*?)" + right)
answer= pattern.findall(string)[0]
print answer
问题是,当我用HTML替换左右匹配字符串时,我得到“索引超出范围”错误,因为将HTML转换为字符串涉及的空格和缩进。
所以你可以说...我做了很多研究,而且我仍然坚持提取&lt;和&gt;使用BeautifulSoup和Python的正则表达式模块在HTML标记的字段/属性中进行标记。请帮我? :)
答案 0 :(得分:1)
你有控制你的HTML吗?它是畸形的。而不是
<div id="KittyChow">
<h4 class="noteText">foodAmount</h4>
<span>< 1 tsp</span>
</div>
应该看起来像
<div id="KittyChow">
<h4 class="noteText">foodAmount</h4>
<span>< 1 tsp</span>
</div>
http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
如果您要在服务器端生成html,则应该可以使用任何语言轻松编码您的实体:php python ruby
编辑:根据其他答案:https://stackoverflow.com/a/14171433/1253312您可以这样做:
BeautifulSoup("<div> < 20 </div>", "html5lib")
告诉BS使用不同的解析器,它可以处理<
字符。
答案 1 :(得分:0)
HTML破了。您不能在HTML中使用未转义的<
字符;解析器会变得非常困惑。作为解决方法,在此特定示例中,您可以替换<
,后跟空格<
后跟空格:
raw_html = raw_html.replace("< ", "< ")
虽然这不是一般解决方案。