我正在寻找一种方法来替换所有不使用正则表达式的IMG标签中的SRC属性。 (想要使用默认Python安装中包含的任何开箱即用的HTML解析器)我需要将源代码从以下内容减少到:
<img src="cid:imagename">
我正在尝试将所有src标记替换为指向HTML电子邮件附件的cid,因此我还需要更改所有源代码,因此它只是没有路径或扩展名的文件名。
答案 0 :(得分:22)
Python标准库中有一个HTML解析器,但它不是很有用,而且自Python 2.6以来它已被弃用。使用BeautifulSoup执行此类操作非常简单:
from BeautifulSoup import BeautifulSoup
from os.path import basename, splitext
soup = BeautifulSoup(my_html_string)
for img in soup.findAll('img'):
img['src'] = 'cid:' + splitext(basename(img['src']))[0]
my_html_string = str(soup)
答案 1 :(得分:1)
这是针对您的问题的pyparsing方法。您需要自己编写代码来转换http src属性。
from pyparsing import *
import urllib2
imgtag = makeHTMLTags("img")[0]
page = urllib2.urlopen("http://www.yahoo.com")
html = page.read()
page.close()
# print html
def modifySrcRef(tokens):
ret = "<img"
for k,i in tokens.items():
if k in ("startImg","empty"): continue
if k.lower() == "src":
# or do whatever with this
i = i.upper()
ret += ' %s="%s"' % (k,i)
return ret + " />"
imgtag.setParseAction(modifySrcRef)
print imgtag.transformString(html)
标签转换为:
<img src="HTTP://L.YIMG.COM/A/I/WW/BETA/Y3.GIF" title="Yahoo" height="44" width="232" alt="Yahoo!" />
<a href="r/xy"><img src="HTTP://L.YIMG.COM/A/I/WW/TBL/ALLYS.GIF" height="20" width="138" alt="All Yahoo! Services" border="0" /></a>