Skip to main content
 首页 » 编程设计

python之带有 BeautifulSoup 的 Python 中的这个特定的 str.replace() 不起作用

2025年05月04日8JeffreyZhao

我正在尝试自动执行大约每月发生一次的任务,即向页面添加一个超链接,如下所示:

2013: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
2012: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
2011: Jan Feb Mar ... 

每当我们获得该月的新文档时,我们都会添加

<a href="document_001.pdf">Jul</a> 

在它周围标记。

所以我在 Python 中使用 BeautifulSoup。您可以在下面看到,我正在挑选包含此数据的 HTML“p”标记,并在它找到的第一个月执行 replace()(使用我创建的反向字典查找月份,并且替换的第三个参数( ) 表示只执行它找到的第一个)。

# Modify link in hr.php: 
hrphp = open('\\\\intranet\\websites\\infonet\\hr\\hr.php', 'r').read() 
soup = BeautifulSoup(hrphp) # Parsing with BeautifulSoup 
Months = {k: v for k,v in enumerate(calendar.month_abbr)} # Creates a reverse dictionary for month abbreviation lookup by month number, ie. "print Months[07]" will print "Jul" 
 
print hrphp+"\n\n\n\n\n"  # DEBUGGING: Compare output before 
hrphp = hrphp.replace( 
    str(soup.findAll('p')[4]),  
    str(soup.findAll('p')[4]).replace( 
        Months[int(InterlinkDate[1][-5:-3])],  
        "<a href=\""+FilenameNewsletter+"\">"+Months[int(InterlinkDate[1][-5:-3])]+"</a>",  
        1),  
    1 
) 
print hrphp # DEBUGGING: Compare output after 

看看它是如何嵌套的 replace()?逻辑似乎运行良好,但由于某种原因它实际上并没有改变值。在脚本的前面,我对页面的一部分上的 Months[] 字典和 str.replace() 做了一些类似的事情,虽然它没有像这样的嵌套 replace() 也没有搜索使用 soup.findAll() 的文本 block 。

开始在 table 上敲打我的头,非常感谢任何帮助。提前致谢。

请您参考如下方法:

您最终使用代码 str(soup.findAll('p')[4]).replace 所做的只是替换在结果的字符串表示中找到的值soup.findAll('p')[4],这很可能与 hrphp 中的字符串不同,因为 "Beautiful Soup gives you Unicode"解析后。

Beautiful Soups 文档提供了答案。看看 Changing Attribute Values section .