Pythonでのスクレイピング、ファイル操作についてのエラーに関する質問

このQ&Aのポイント
  • Pythonで特定のHPの<a>タグから「title」を取ってきて、「title」.txtというテキストファイルを複数作成する際にエラーが発生しています。
  • エラーメッセージは「IOError: [Errno 2] No such file or directory: u'寝袋(シュラフ)/マット.txt'」です。
  • エラーの原因が分からず困っているので、解決策を教えてください。
回答を見る
  • ベストアンサー

pythonでのスクレイピング、ファイル操作につい

pythonで特定のHPの<a>タグから、「title」を取ってきて、「title」.txtとというテキストファイルを複数作りたいのですが、エラーが出て困っています。 beautifulsoupを用いて取ってきたタイトル名をファイル名するソースコードです。 links=soup.findAll("a",href=s,title=fuyou) for link in links:  title=link.get("title")  filename=title+".txt"  print filename  f2=open(filename,"w").close() >>> バックパック.txt 寝袋(シュラフ)/マット.txt Traceback (most recent call last): File "C:\Python27\test1.py", line 35, in <module> f2=open(filename,"w").close() IOError: [Errno 2] No such file or directory: u'\u5bdd\u888b\uff08\u30b7\u30e5\u30e9\u30d5\uff09/\u30de\u30c3\u30c8.txt' 上のようなエラーが出ます。途中までTXTファイルは出来るのですが、途中からこのようなエラーが出ます。 さっぱり意味が分かりません。どなたか助けてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

/ はファイル名として使えないのでは?

rusifelu
質問者

お礼

単純な間違いでしたか。ありがとうございました。助かりました<(_ _*)>

関連するQ&A

  • pythonのエラーについて教えてください。

    pythonの勉強しています。練習として以下の様なコードを書きました。 #!/usr/bin/python # coding=utf-8 f = open('aw1.txt' 'r') for row in f: line_data = row.split(' ') print(line_data(1)) f.close() aw1.txtというファイルは自分でviで作成しました。 このpythonスクリプトを実行すると IOError: [Errno 2] No such file or directory: 'aw1.txtr' というエラーになってしまいます。 でも f = open('aw1.txt' 'r') と書いて なぜ 'aw1.txtr'というファイルがないというエラーとなるのかがわかりません。 どこが間違っているのでしょうか? どなたか教えていただけないでしょうか?

  • python,bs4でスクレイピング出来ません

    **お世話になります、python初心者ですpython2.7,beautifulsoupを用いて、競馬データをスクレイピングしておりますが、どうにも困っております。 1行だけはprintすることが出来るのですが、20行をスクレイピングするスクリプトと、併せて、CSVに出力させるスクリプトが分かりません。 ** 発生している問題・エラーメッセージ **csvに保存が出来ないこと 20行をまとめてスクレイピングすることが出来ないこと` ** ###該当のソースコード python2.7 -*- coding:utf-8 -*- import urllib2 import codecs from bs4 import BeautifulSoup f = codecs.open('horse.csv', 'w', 'utf-8') f.write('race_date,kaisai,weather,race_number,race_name,tousuu,frame_number,horse_number,single_win_ratio,popularity,horse_arrival,horse_name,weight,distance,baba, race_time,difference,horse_pass,pace,nobori,horse_weight,win_horse,prize_money'+ u"\n") tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}' for i in xrange(1, 5): url=tpl_url.format( i ) soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml") tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody') for tr in tr_arr: 日付#race_date lrg1= tr.findAll('td')[0].string 開催#kaisai lrg2= tr.findAll('td')[1].string 天気#weather lrg3= tr.findAll('td')[2].string 第○レース#race_number lrg4= tr.findAll('td')[3].string レース名#race_name lrg5= tr.findAll('td')[4].string 映像(この部分、削除したいです) lrg6= tr.findAll('td')[5].string 頭数#tousuu lrg7= tr.findAll('td')[6].string 枠番#frame_number lrg8= tr.findAll('td')[7].string 馬番#horse_number lrg9= tr.findAll('td')[8].string 単勝#single_win_racio lrg10= tr.findAll('td')[9].string 人気#popularity lrg11= tr.findAll('td')[10].string 着順#horse_arrival lrg12= tr.findAll('td')[11].string 馬名#horse_name lrg13= tr.findAll('td',{'class':'txt_l'}) [1] 斤量#weight lrg14= tr.findAll('td')[13].string 距離#distance lrg15= tr.findAll('td')[14].string 馬場#baba lrg16= tr.findAll('td')[15].string タイム#race_time lrg17= tr.findAll('td')[16].string 着差#difference lrg18= tr.findAll('td')[17].string 通過#horse_pass lrg19= tr.findAll('td')[18].string ペース#pace lrg20= tr.findAll('td')[19].string 上り#nobori lrg21= tr.findAll('td')[20].string 馬体重#horse_weight lrg22= tr.findAll('td')[21].string 勝ち馬#win_horse lrg23= tr.findAll('td',{'class':'txt_l'}) [2] 賞金#prize_money lrg24= tr.findAll('td')[23].string print lrg1,lrg2,lrg3,lrg4,lrg5,lrg6,lrg7,lrg8,lrg9,lrg10,\ lrg11,lrg12,lrg13.a.string,lrg14,lrg15,lrg16,lrg17,\ lrg18,lrg19,lrg20,lrg21,lrg22,lrg23.a.string,lrg24 f.close() (参考)下記のコードが苦慮しておりますスクレイピング対象のHTMLの 最初の1行部分でございます。 開催日毎に、これが1つのページに、20行、連続してございます。 1行しか捕らえられず、困っております。 <tbody> <tr class=""> <td><a href="/race/list/20160807/">2016/08/07</a></td> <td><a href="/race/sum/04/20160807/">2新潟4</a></td> <td>晴</td> <td class="txt_right">12</td> <td class="bml txt_l"><a href="/race/201604020412/" title="3歳上500万下">3歳上500万下</a></td> <td> <a href="/?pid=movie&amp;id=201604020412" target="_blank"><img src="/style/netkeiba.ja/image/icon_douga.png" border="0"></a> </td> <td class="txt_right">15</td> <td class="txt_right">7</td> <td class="txt_right">13</td> <td class="r3ml txt_right">6.9</td> <td class="r3ml txt_right">3</td> <td class="r2ml txt_right">2</td> <td class=" txt_l"> <a href="/horse/2013103614/">チェイスダウン</a> </td> <td>54</td> <td>ダ1200</td> <td>良</td> <td class="txt_right">1:11.9</td> <td class="txt_right">0.3</td> <td>8-8</td> <td>34.5-37.1</td> <td class="r1ml">36.6</td> <td>468(+2)</td> <td class=" txt_l"> <a href="/horse/2013101531/">クリムゾンバローズ</a> </td> <td>300.0</td> 試したこと forなどで、ループさせてみましたが、スキル不足でうまくいきませんでした。 補足情報(言語/FW/ツール等のバージョンなど) python2.7 findAllを多用して、力ずくで作ったプログラムでございます。 先輩の皆様方、御教示よろしくお願いいたします。

  • pythonでスクレイピングがうまく出来ません

    python2.7でbeautifulsoupを用いて、netkeiba.comから競馬情報(騎手の成績)をスクレイピングしています。 定法に基づきまして、『検証』からページのツリー構造を把握して、プログラムを作成しました。 馬名部分の構造が<td class="txt_l"> <a href="/horse/2011105901">テンテマリ</a></td> #テンテマリは馬名 となっておりましたので、"txt_l"を拾い出せるようにスクリプトを作りました。 しかしながら、 馬名以外の"txt_l"は全部スクレイピング出来るのですが、馬名部分だけがNoneと返ってまいります。 エラーメッセージではありませんが、何が原因でNoneとなるのかが、どうしても分かりません。 ちなみに、馬名以外で、ほぼ同様の構造を持つ、『レース名』、構造は <td class="bml txt_l"> <a href="/race/201603020812/" title="3歳上500万円下">3歳上500万円下</a> (3歳上500万円下はレース名) では、問題なくレース名を拾うことが出来ました。 該当のソースコード -*- coding:utf-8 -*- import urllib2 import codecs from bs4 import BeautifulSoup tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}' for i in xrange( 1, 2 ): url=tpl_url.format( i ) soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml") tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody') for tr in tr_arr: lrg1 = tr.findAll('td',{'class':'txt_l'}) for tr1 in lrg1: print tr1.string 試したこと 馬名以外の('td',{'class':'txt_l'})に準ずる『レース名』は、うまく拾うことが出来ました。 lrg1 = tr.findAll('td',{'class':'txt_l'}) で馬名を得ることが出来ない理由、併せて馬名を拾えるスクリプトを御教示くださいますよう、よろしくお願いいたします!

  • Pythonファイル読み書きについて

    ファイル読み書きで躓いています。 やりたい事は、以下の5行のa.txtを読んで、b.txtに吐き出します。 a.txt  1First Row  2Second Row  3行目  (4)         ※4が○で囲まれてるやつ  5行目 以下コードです。 import codecs fin = codecs.open(r'D:\Work\a.txt', 'r', 'shift-jis') fout = codecs.open(r'D:\Work\b.txt', 'w', 'shift-jis') for line in fin: print line fout.write(line) fin.close() fout.close() 4行目でエラーとなります。 これを正常動作させる事はできるのでしょうか? よろしくお願いします。

  • python プログラミング vim

    #!/usr/bin/env python #vim: fileencoding=utf-8 from math import* import sys outfp=open('test.dat','w') outfq=open('ab.dat','w') for line in open('para.dat','r'): items=line.split('\t') s=2/float(items[0]) u=float(items[1])-5+log(s/100) outfp.write(str(s)) outfq.write(str(u)) outfp.close() outfq.close() ////para.dat//// 1 2 1 3 として、プログラムを実行したのですが、ファイルに出力した時に、 para.datの2列目(1 3)の計算した結果しか、ファイルに書き込まれてないのですが、 どうすれば、すべて反映されて、出力ファイルに結果が出せるのでしょうか。 よろしくお願いします。

  • PythonでZIP中のZIPを操作する方法

    【PythonでZIPファイル中のZIPファイルを操作したい】 PythonでZIP内のZIPを再帰的に探して操作したいと考えています。 スクリプトを書いてみたのですが、どうもうまくいきません。 どなたかマズところをご教示いただけないでしょうか? 以下のような構造のデータファイルを用意しました。   SampleZip1.zip     Sample1.txt     Sample2.txt     SampleZip1-1.zip       Sample1-1-1.txt       Sample1-1-2.txt     SampleZip1-2.zip       Sample1-2-1.txt       Sample1-2-2.txt 以下がテストスクリプトです。   import zipfile      def listZipFile( fileName, indent ) :   if not zipfile.is_zipfile( fileName ) :     print( "not zip" + indent + fileName )   return      print( "zip" + indent + fileName )      zip = zipfile.ZipFile( fileName, 'r' )      for f in zip.namelist():     listZipFile( f, "¥t"+ indent )      zip.close()      zipFileName = 'SampleZip1.zip'   listZipFile( zipFileName, "¥t" ) が、結果は以下の通りで、ZIPの中のZIPをZIPファイルと判定してくれないみたいです。   >findZip.py   zip SampleZip1.zip   not zip SampleZip1-2.zip   not zip Sample1.txt   not zip Sample2.txt   not zip SampleZip1-1.zip ZIPファイル中のファイルに対してzipfile.ZipFile()を使うのは無理があるのかなぁ? 一時ファイルにでもいったん出さないとダメ? などと想像しているのですが・・・ どなたかよろしくお願いいたします。

  • ファイルの読み込み操作のコーディングについて

    perlのファイル読み込み操作についての質問です #!/usr/local/bin/perl #ファイルの読み込み open(FILE,"<diary.txt"); $data = <FILE>; close(FILE); #サーバー出力 print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>ファイルの読み込み</title> </head> <body> <h5> <p>$data</p> </h5> </body> </html> END 次のように、perlのコードを書いて無料の CGIの使えるレンタルサーバーに 設置したところ、エラーが出てしまいます dairy.txtはこのファイルと同じディレクトリで パスも間違えてないです、いろいろ自分で調べてみたんですが どこが間違えているかわかりません よろしかったらどなたかperlに詳しい方がいらっしゃったら 間違えている箇所を教えていただけないでしょうか?

  • ファイル操作

    ファイル操作について、プログラムがうまくできないので教えていただきたいです。 作っているのは、txtファイルを読み込んで、置換の処理をした結果を、test.txtファイルに書き出したいのです。 質問なのですが、ここでtest.txtはあらかじめ作成しておかなければならないのでしょうか。自動で作成させる方法があれば、教えてください。 -----------------data.txt------------------------ rabbitうさぎappleりんごcoffeeコーヒー ------------------------------------------------ -----------------apple.pl----------------------- open(FILEHANDLE,"data.txt"); while($str=<FILEHANDLE>){ $str=~s/apple/青りんご/; } close(FILEHANDLE); open(FILEHANDLE,"test.txt"); print FILEHANDLE $str; close(FILEHANDLE); ------------------------------------------------- また、コマンドプロンプトの結果は次のとおりです。 C:\Perl>perl -cw apple.pl apple.pl syntax OK C:\Perl>perl apple.pl C:\Perl> Perl初心者なため、詳しく教えていただけると助かります。よろしくお願いします。

    • ベストアンサー
    • Perl
  • csvファイルに保存が出来ずに困っています!!

    python初心者でございます。 python2.7,beautifulsoupを用いて競馬情報をスクレイピングしましたが、 作成されたhorse.csvファイルにデータ保存が出来ず、困っております。 csvファイルに保存出来るスクリプトを、御教示よろしくお願いいたします。 小生が作成したソースコード -*- coding:utf-8 -*- import urllib2 import codecs from bs4 import BeautifulSoup f = codecs.open('horse.csv', 'w', 'utf-8') f.write('tr1') tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}' for i in xrange( 1, 2 ): url=tpl_url.format( i ) soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml") tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody') for tr in tr_arr: lrg1 = tr.findAll('td',{'class':'txt_l'}) for tr1 in lrg1: print tr1.a.string f.close() 試したこと 上記のプログラムを動かすと作成されたCSVファイルには何も記録、保存されておりませんでした。 御教示よろしくお願いいたします!!!

  • Pythonのreadlineについて

    最近Pythonのプログラミングを始めたのですが、Pythonのプログラミングについて以下のことを行いたいのですが、やり方が分からず困っております。 Pythonで行いこと 1.textファイルに例えば以下のようにいくつかの係数を入力しておきます。 a:0.5, b:0.8, c:0.9 2.上記のテキストファイルを読み込み、pythonの変数a、b、cに値を格納したいと考えています。 色々検索している中でテキストファイルの読み込みはf=open(xxx.txt)で読み込み、各行の読み込みはreadline()というコマンドでできることは分かったのですが、lines=f.readline()とした後、その"line"の中からaが0.5、bが0.8という数字部分だけを切り出してプログラム中の変数に渡す方法が分からない状態です。 皆様のお知恵を拝借いたしたく、宜しくお願いいたします。

専門家に質問してみよう