2017-05-29 1 views
0

私は30911のhtmlファイルを持っています。私はwebscrapingをして、index.txtという名前のtxtファイルに情報を保存する必要があります。 それはpythonフォルダからすべてのファイルを読み込み、ファイル名やその他の情報をtxtファイルに書き込む

filename1, title, t1, date, p1 
filename2, title, t1, date, p1 
filename3, title, t1, date, p2 
and so on... 

のようになります。私は、ファイル名だけをしたいが、出力は私のパス+ファイル名を与えました。

答えて

1

あなたの問題は、あなたがそうに書き込むためにはosモジュール

os.path.basename('filepath') 

を使用することができ、ファイル名を取得するためには、そのファイル名が実際にファイルパスですファイル:

indexFile.write(os.path.basename(filename)+ ', ' + title.get_text(strip=True) + ', '+ ticker.get_text(strip=True) + ', ' + d_date.get_text(strip=True) + ', ' + parti_names + '\n') 
+0

これを私のコードにどのように適用すればよいですか? –

+0

glob.glob(os.path.join(path、 '* .html'))のファイル名に –

+0

を使用する方法を追加しました: os.path.basename(ファイル名) –

1

あなたは使用することができます。

path = 'C:/Users/.../.../output/' 
#read html files 
for filename in glob.glob(os.path.join(path, '*.html')): 
    soup = bs4.BeautifulSoup(open(filename).read(), "lxml") 
    title = soup.find('h1') 
    ticker = soup.find('p') 
    d_date = soup.find_all('div', {"id": "a-body"})[0].find_all("p")[2] 

    try: 
     def find_participant(tag): 
      return tag.name == 'p' and tag.find("strong", text=re.compile(r"Executives|Corporate Participants")) 

     participants = soup.find(find_participant) 
     parti_names = "" 
     for parti in participants.find_next_siblings("p"): 
      if parti.find("strong", text=re.compile(r"(Operator)")): 
       break 
      parti_names += parti.get_text(strip=True) + "," 
    except: 
     indexFile = open('C:/Users/.../output1/' + 'index.txt', 'a+') 
     indexFile.write(filename + ', ' + title.get_text(strip=True) + ', '+ ticker.get_text(strip=True) + ', ' + d_date.get_text(strip=True) + ', ' + 'No participants' + '\n') 
    else: 
     participants = soup.find(find_participant) 
     parti_names = "" 
     for parti in participants.find_next_siblings("p"): 
      if parti.find("strong", text=re.compile(r"(Operator)")): 
       break 
      parti_names += parti.get_text(strip=True) + "," 
     indexFile = open('C:/Users/.../output1/' + 'index.txt', 'a+') 
     indexFile.write(os.path.basename(filename) + ', ' + title.get_text(strip=True) + ', '+ ticker.get_text(strip=True) + ', ' + d_date.get_text(strip=True) + ', ' + parti_names + '\n') 
     indexFile.close() 
+0

このコードを私のコードにどのように適用すればよいですか? –

+0

投稿を編集しました。それがあなたを助けることを願っています。 –

0

ntpathは別のmodですuleはパスからベース名を取得するために使用されます。

>>> import ntpath 
>>> ntpath.basename('C:/Users/.../output1/' + 'index.txt') 
'index.txt' 
関連する問題