0

全て、

Python(v 2.7.1)を使い始めたばかりで、最初のプログラムの1つは、標準ライブラリとBeautifulSoupを使用してHTML要素を処理することで発電所データを含むWebサイトから情報を取得しようとしています。

アクセスしたいデータは、HTMLの「Head」セクションまたは本体内のテーブルとして取得できます。CSVリンクをクリックすると、WebサイトはそのデータからCSVファイルを生成します。

このウェブサイトのいくつかのソースを使用して、データを引き出してファイルに保存する以下のコードをまとめることができましたが、\n指定子が含まれています。できる限り試してみてください。保存する正しいCSVファイルを取得できません。

簡単なことだと思いますが、可能であれば少し助けが必要です。

from BeautifulSoup import BeautifulSoup

import urllib2,string,csv,sys,os
from string import replace

bm_url = 'http://www.bmreports.com/servlet/com.logica.neta.bwp_PanBMDataServlet?param1=T_COTPS-4&param2=&param3=&param4=&param5=2011-02-05&param6=*'

data = urllib2.urlopen(bm_url).read()
soup = BeautifulSoup(data)
data = str(soup.findAll('head',limit=1))

data = replace(data,'[<head>','')
data = replace(data,'<script language="JavaScript" src="/bwx_generic.js"></script>','')
data = replace(data,'<link rel="stylesheet" type="text/css" href="/bwx_style.css" />','')
data = replace(data,'<title>Historic Physical Balancing Mechanism Data</title>','')
data = replace(data,'<script language="JavaScript">','')
data = replace(data,' </script>','')
data = replace(data,'</head>]','')
data = replace(data,'var gs_csv=','')
data = replace(data,'"','')
data = replace(data,"'",'')
data = data.strip()

file_location = 'c:/temp/'
file_name = file_location + 'DataExtract.txt'

file = open(file_name,"wb")
file.write(data)
file.close()
4

2 に答える 2

4

文字列に戻してから置換を使用しないでください。それは BeautifulSoup を使用するポイントを完全に無効にします!

次のように開始してみてください。

scripttag = soup.head.findAll("script")[1]
javascriptdata = scripttag.contents[0]

次に、次を使用できます。

  1. partition('=')[2]「var gs_csv」ビットを切り捨てます。
  2. strip(' \n"')両端の不要な文字を削除する (スペース、改行、")
  3. replace("\\n","\n")新しい行を整理します。

ちなみにreplaceは文字列メソッドなので別にimportする必要はなく、そのままでいいですdata.replace(...

最後に、csv として分離する必要があります。保存して再度開き、csv.reader に読み込むことができます。モジュールを使用して、StringIOcsv.reader に直接フィードできるものに変換できます (つまり、最初にファイルを保存せずに)。しかし、このデータは十分に単純なので、次のことを行うだけで済むと思います。

for line in data.splitlines():
    row = line.split(",")
于 2011-02-06T17:32:01.777 に答える
1

解決

from BeautifulSoup import BeautifulSoup
import urllib2,string,csv,sys,os,time

bm_url_stem = "http://www.bmreports.com/servlet/com.logica.neta.bwp_PanBMDataServlet?param1="
bm_station = "T_COTPS-3"
bm_param = "&param2=&param3=&param4=&param5="
bm_date = "2011-02-04"
bm_param6 = "&param6=*"

bm_full_url = bm_url_stem + bm_station + bm_param + bm_date + bm_param6

data = urllib2.urlopen(bm_full_url).read()
soup = BeautifulSoup(data)
scripttag = soup.head.findAll("script")[1]
javascriptdata = scripttag.contents[0]
javascriptdata = javascriptdata.partition('=')[2]
javascriptdata = javascriptdata.strip(' \n"')
javascriptdata = javascriptdata.replace("\\n","\n")
javascriptdata = javascriptdata.strip()

csvwriter = csv.writer(file("c:/temp/" + bm_station + "_" + bm_date + ".csv", "wb"))

for line in javascriptdata.splitlines():
row = line.split(",")
csvwriter.writerow(row)

del csvwriter
于 2011-02-06T21:34:29.883 に答える