2

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

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()(使用我创建的反向字典查找 Month,以及 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() 的文本块。

开始在桌子上敲打我的头,任何帮助将不胜感激。提前致谢。

4

1 回答 1

1

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

Beautiful Soups 文档给出了答案。查看更改属性值部分

于 2013-07-03T15:13:09.003 回答