2017-03-22 13 views
0

NAMES、FORMULA、EXACTMASS、MOLWEIGHT、CASというヘッダーを持つExcelシートにExcelの情報を抽出しようとしていますが、ループを実行するときに、その右の用語)をセルに割り当てる。印刷物に表示されている情報全体を保存して、各化合物の各ボックスに文字列として保存したいと考えています。次のリンクのためにループが再び始まるとき、私はそれを新しい行で開始したい。私はどこが間違っているのか分からない。Beatifulsoup4で解析されたデータを保存する

import urllib 
import urllib.request 
from bs4 import BeautifulSoup 
import os 
import csv 

def make_soup(url): 
    thepage = urllib.request.urlopen(url) 
    soupdata = BeautifulSoup(thepage, "html.parser") 
    return soupdata 


compoundlist = [] 
soup = make_soup("http://www.genome.jp/dbget-bin/www_bget?ko00020") 
i = 1 
file = open("Compoundlist.csv", "w") 
for record in soup.findAll("nobr"): 
    compound = '' 
    if (record.text[0] == "C" and record.text[1] == '0') or (record.text[0] == "C" and record.text[1] == '1'): 
     compoundlist ="http://www.genome.jp/dbget-bin/www_bget?cpd:" + record.text[:6] + '\n' 
     file.write(compoundlist) 
     # print(compoundlist) 

file.close() 
compoundinfo = [] 
linklist =open('Compoundlist.csv') 

# 
# def CASnumber(soup): 
#  for tag in soup.findAll("div", {"style":"margin-left:3em"}): 
#   tag = tag.text 
#  return tag 


for items in linklist: 
    soupcomp = make_soup(items) 
    for data in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"}): 
      for NAMES in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"})[0]: 
       NAMES = NAMES.text 
    print(NAMES) 
    for data in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"}): 
      for INFO in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"})[0:3]: 
       FORMULA = INFO.text 
    print(FORMULA) 
    for data in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"}): 
      for INFO in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"})[0:4]: 
       EXACTMASS = INFO.text 
    print(EXACTMASS) 
    for data in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"}): 
      for INFO in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"})[0:5]: 
       MOLWEIGHT = INFO.text 
    print(MOLWEIGHT) 
    for data in soupcomp.findAll("div", {"style":"width:555px;overflow-x:auto;overflow-y:hidden"}): 
      for CAS in soupcomp.findAll("div", {"style":"margin-left:3em"}): 
       CAS = CAS.text 
    print(CAS) 
    with open("Compoundinfo.csv", 'a') as csv_file: 
      writer = csv.writer(csv_file) 
      writer.writerows([NAMES,FORMULA,EXACTMASS,MOLWEIGHT,CAS]) 

答えて

0

2つのこと:

1)あなたのfor items in linklist:with open("Compoundinfo.csv", 'a') as csv_file:を置く - 各ループでファイルを再度開く必要はありません。

2)あなたのケースの正しい方法はwriter.writerow(あなたはwriterowsです)です。

writerowは1次元データをとり、writerowsは2次元データをパラメータとする。

関連する問題