検索ラベルでhtmlのテーブルを反復処理し、見つかった値を辞書に更新してから、それらの値をcsvに書き込もうとしています。現在、出力は URL と見出しの両方で機能しますが、名前の出力は空白になるか、「なし」と表示されます。blog["name'] の出力を印刷すると、必要な情報が正しく取得されます。インデント エラーだと思われますが、どこに並べるかわかりません。移動しようとしました。しかし、そのループ内で名前の割り当てを機能させるために何も機能していないようです。
import os
from bs4 import BeautifulSoup
import my_csv_writer
def td_finder(tr, searchLabel):
value = ""
index = tr.text.find(searchLabel)
if index>-1:
tds = tr.findAll('td')
if len(tds)>1:
value = tds[1].text
return value
def main():
topdir = 'some_directory'
writer = my_csv_writer.CsvWriter("output.csv")
writer.writeLine(["url", "headline", "name"])
"""Main Function"""
blog = []
for root, dirs, files in os.walk(topdir):
for f in files:
url = os.path.join(root, f)
url = os.path.dirname(url).split('some_file')[1]
if f.lower().endswith((".html")):
file_new = open(os.path.join(root, f), "r").read()
soup = BeautifulSoup(file_new)
blog = {}
#Blog Title
blog["title"] = soup.find('title').text
for table in soup.findAll("table"):
for tr in table.findAll("tr"):
#name
blog["name"] = td_finder(tr, "name:")
seq = [url, unicode(blog["title"]), unicode(blog.get("name"))]
writer.writeLine(seq)
#return ""
if __name__ == '__main__':
main()
print "Finished main"