gpt4 book ai didi

python - 使用 pyparsing 查找以下标签

转载 作者:太空狗 更新时间:2023-10-30 02:14:23 25 4
gpt4 key购买 nike

我正在使用 pyparsing 来解析 HTML。我正在抓取所有 embed 标签,但在某些情况下,紧随其后的是一个 a 标签,如果它可用,我也想抓取它。

例子:

import pyparsing
target = pyparsing.makeHTMLTags("embed")[0]
target.setParseAction(pyparsing.withAttribute(src=pyparsing.withAttribute.ANY_VALUE))
target.ignore(pyparsing.htmlComment)

result = target.searchString(""".....
<object....><embed>.....</embed></object><br /><a href="blah">blah</a>
""")

我无法在结果对象中找到任何字符偏移量,否则我只能抓取原始输入字符串的一部分并从那里开始工作。

编辑:

有人问我为什么不使用 BeautifulSoup。这是一个很好的问题,让我告诉你为什么我选择不将它与代码示例一起使用:

import BeautifulSoup
import urllib
import re
import socket

socket.setdefaulttimeout(3)

# get some random blogs
xml = urllib.urlopen('http://rpc.weblogs.com/shortChanges.xml').read()

success, failure = 0.0, 0.0

for url in re.compile(r'\burl="([^"]+)"').findall(xml)[:30]:
print url
try:
BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read())
except IOError:
pass
except Exception, e:
print e
failure += 1
else:
success += 1


print failure / (failure + success)

当我尝试这个时,BeautifulSoup 失败并出现解析错误 20-30%。这些并不是罕见的边缘情况。 pyparsing 缓慢而繁琐,但无论我向它扔什么,它都没有爆炸。如果我能得到更好的使用 BeautifulSoup 方法的启发,那么我真的很想知道这一点。

最佳答案

如果有可选的<a>如果它跟在 <embed> 之后会很有趣标签,然后将其添加到您的搜索模式中:

embedTag = pyparsing.makeHTMLTags("embed")[0]
aTag = pyparsing.makeHTMLTags("a")[0]
target = embedTag + pyparsing.Optional(aTag)
result = target.searchString(""".....
<object....><embed>.....</embed></object><br /><a href="blah">blah</a>
""")

print result.dump()

如果您想在解析器中捕获表达式的字符位置,请插入其中一个,并带有结果名称:

loc = pyparsing.Empty().setParseAction(lambda s,locn,toks: locn)
target = loc("beforeEmbed") + embedTag + loc("afterEmbed") +
pyparsing.Optional(aTag)

关于python - 使用 pyparsing 查找以下标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1767673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com