次のようなページにハイパーリンクを追加するという、ほぼ毎月発生するタスクを自動化しようとしています。
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( の 3 番目のパラメーターを使用します)。 ) は、最初に見つかったもののみを実行することを示します)。
# 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() はなく、検索もしませんsoap.findAll() を使用したテキストのブロック。
机の上で頭をぶつけ始めましたが、助けていただければ幸いです。前もって感謝します。