Python 如何正确替换文本文件的内容
我正在尝试制作此网站的脱机副本:。此任务的一部分是下载所有使用BeautifulSoup引用的css/js,并修改此新下载资源的任何外部链接 目前我只使用stringPython 如何正确替换文本文件的内容,python,beautifulsoup,Python,Beautifulsoup,我正在尝试制作此网站的脱机副本:。此任务的一部分是下载所有使用BeautifulSoup引用的css/js,并修改此新下载资源的任何外部链接 目前我只使用stringreplace方法。但我不认为这是有效的,因为我在循环中这样做,下面的片段: local_content = '' for res in soup.findAll('link', {'rel': 'stylesheet'}): if not str(res['href']).startswith('data
replace
方法。但我不认为这是有效的,因为我在循环中这样做,下面的片段:
local_content = ''
for res in soup.findAll('link', {'rel': 'stylesheet'}):
if not str(res['href']).startswith('data:'):
original_res = res['href']
res['href'] = some_function_to_download_css()
local_content = local_content.replace(original_res, res['href'])
我只为以数据:
开头的非嵌入资源保存资源。但问题是,local\u content=local\u content.replace(original\u res,res['href'])
可能会导致我只能将一个外部资源修改为本地资源的问题。其余的仍然是指资源的在线版本
我猜,因为local_内容是一个很长的字符串(看看ieeghn的源代码),所以这个结果不太好
如何正确地替换给定模式的字符串内容?
或者我必须先将其存储到一个文件中并在那里修改它吗
已编辑
我发现问题出在这行代码中:
original_res = res['href']
BSoup将以某种方式清理href字符串。就我而言,
&代码>将更改为&
。当我试图将原始的href
替换为新下载的本地文件时,str.replace()
根本找不到这个原始值。要么我必须找到一种方法来使用original HREF,要么就是简单地处理这个案例。不得不说,拥有原始HREF是最好的方式您已经在替换内容,某种程度上
res['href'] = some_function_to_download_css()
…在BeautifulSoup的HTML树表示中更新href
节点的res
属性
为了提高效率,您可以缓存已经下载的CSS文件的URL,并在下载文件之前查阅缓存。完成后(如果您对BS的属性排序/缩进等没问题),可以使用str(soup)
获得树的字符串表示形式
参考资料:您能提供几乎完整的代码吗?这样我就可以看一看……事实上,我已经做到了,并且意识到了这一点。只是。。以某种方式用于长字符串(HTML内容)。本地内容不会改变。我想我会发布一个完整的代码,可以测试。它还可能帮助我找到bugHi@PlasmaSaunda:我编辑了我的问题。有什么建议吗?@swdev您尝试过HTMLPasser类的unescape
方法吗?