如何正确替换文本fi的内容

2024-09-29 23:18:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试脱机复制此网站:ieeghn。这个任务的一部分是下载所有使用Beautiful Soup引用的css/js,并修改到这个新下载的资源的任何外部链接。你知道吗

目前我只使用stringreplace方法。但我不认为这是有效的,因为我在一个循环中这样做,下面的片段:

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'])

我只为以data:开头的非嵌入资源保存资源。但问题是,local_content = local_content.replace(original_res, res['href'])可能会导致我只能将一个外部资源修改为本地资源的问题。其余的仍然引用资源的在线版本。你知道吗

我猜是因为本地内容是一个很长的字符串(看看ieeghn的源代码),所以结果不太好。你知道吗

如何正确地替换给定模式的字符串内容? 或者我必须先将其存储到一个文件并在那里修改它吗?你知道吗

编辑 我发现问题出在这行代码中:

 original_res = res['href']

BSoup将以某种方式清除href字符串。在我的例子中,&将更改为&。当我试图将原始的href替换为新下载的本地文件时,str.replace()根本找不到这个原始值。要么我必须找到一个方法,有原来的HREF或简单地处理这个案件。不得不说,拥有原始的HREF是最好的方法


Tags: 文件方法字符串内容datalocalres资源
1条回答
网友
1楼 · 发布于 2024-09-29 23:18:00

你已经在替换内容了,某种程度上。。。你知道吗

res['href'] = some_function_to_download_css()

…在BeautifulSoup的HTML树表示中更新href节点的res属性。你知道吗

为了提高效率,您可以缓存已经下载的CSS文件的url,并在下载文件之前查阅缓存。一旦完成了(如果您对BS的属性排序/缩进等没问题),就可以用str(soup)获得树的字符串表示。你知道吗

引用:http://beautiful-soup-4.readthedocs.org/en/latest/#changing-tag-names-and-attributes

相关问题 更多 >

    热门问题