Python 使用解析器替换所有IMG元素的SRC

Python 使用解析器替换所有IMG元素的SRC,python,html,parsing,image,src,Python,Html,Parsing,Image,Src,我正在寻找一种方法来替换所有不使用正则表达式的IMG标记中的SRC属性。(希望使用默认Python安装附带的任何现成HTML解析器)我需要将源代码从原来的版本缩减为: <img src="cid:imagename"> 我试图替换所有src标记,以指向HTML电子邮件附件的cid,因此我还需要更改任何源代码,使其仅为没有路径或扩展名的文件名。Python标准库中有一个HTML解析器,但它不是很有用,而且自Python 2.6以来已被弃用。用计算机做这类事情非常简单: from

我正在寻找一种方法来替换所有不使用正则表达式的IMG标记中的SRC属性。(希望使用默认Python安装附带的任何现成HTML解析器)我需要将源代码从原来的版本缩减为:

<img src="cid:imagename">


我试图替换所有src标记,以指向HTML电子邮件附件的cid,因此我还需要更改任何源代码,使其仅为没有路径或扩展名的文件名。

Python标准库中有一个HTML解析器,但它不是很有用,而且自Python 2.6以来已被弃用。用计算机做这类事情非常简单:

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)

下面是解决您的问题的pyparsing方法。您需要自己编写代码来转换HTTPSRC属性

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)
从pyparsing导入*
导入urllib2
imgtag=makeHTMLTags(“img”)[0]
page=urlib2.urlopen(“http://www.yahoo.com")
html=page.read()
page.close()
#打印html
def MODIFYSCREF(令牌):
ret=“”
imgtag.setParseAction(modifySrcRef)
打印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>


我会为此推荐lxml,但因为您明确表示它必须包含在Python中,所以它只是一个注释,而不是一个答案谢谢我不会将此排除在其他解决方案之外,并感谢您的建议!非常感谢。我会试试看。我感谢你的时间和帮助!谢谢这个例子。我非常感激!stdlib中的HTMLParser没有被弃用吗?那是从哪里来的?以下是python 3版本的文档: