質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6736閲覧

pythonのValueErrorについて

mokatsu

総合スコア7

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/11/23 03:12

編集2017/11/23 04:16

はじめまして。
pythonを勉強し始めてまだ間もない者です。
勉強のためにホームページに書かれているコードを参照して学習しています。
そこで、「機械学習を使って東京23区のお買い得賃貸物件を探してみた 〜スクレイピング編〜」にかかれているコードを拝借さしてもらいました。
url;http://www.analyze-world.com/entry/2017/10/09/062445

コード

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

python

1 2# coding: utf-8 3 4#必要なライブラリをインポート 5from bs4 import BeautifulSoup 6import requests 7import pandas as pd 8from pandas import Series, DataFrame 9import time 10 11#URL(東京都足立区の賃貸住宅情報 検索結果の1ページ目) 12url = 'http://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13121&cb=0.0&ct=9999999&et=9999999&cn=9999999&mb=0&mt=9999999&shkr1=03&shkr2=03&shkr3=03&shkr4=03&fw2=&srch_navi=1' 13 14#データ取得 15result = requests.get(url) 16c = result.content 17 18#HTMLを元に、オブジェクトを作る 19soup = BeautifulSoup(c,"html.parser") 20 21#物件リストの部分を切り出し 22summary = soup.find("div",{'id':'js-bukkenList'}) 23 24#ページ数を取得 25body = soup.find("body") 26pages = body.find_all("div",{'class':'pagination pagination_set-nav'}) 27pages_text = str(pages) 28pages_split = pages_text.split('</a></li>\n</ol>') 29pages_split0 = pages_split[0] 30pages_split1 = pages_split0[-3:] 31pages_split2 = pages_split1.replace('>','') 32pages_split3 = int(pages_split2) 33 34#URLを入れるリスト 35urls = [] 36 37#1ページ目を格納 38urls.append(url) 39 40#2ページ目から最後のページまでを格納 41for i in range(pages_split3-1): 42 pg = str(i+2) 43 url_page = url + '&pn=' + pg 44 urls.append(url_page) 45 46name = [] #マンション名 47address = [] #住所 48locations0 = [] #立地1つ目(最寄駅/徒歩~分) 49locations1 = [] #立地2つ目(最寄駅/徒歩~分) 50locations2 = [] #立地3つ目(最寄駅/徒歩~分) 51age = [] #築年数 52height = [] #建物高さ 53floor = [] #階 54rent = [] #賃料 55admin = [] #管理費 56others = [] #敷/礼/保証/敷引,償却 57floor_plan = [] #間取り 58area = [] #専有面積 59 60#各ページで以下の動作をループ 61for url in urls: 62 #物件リストを切り出し 63 result = requests.get(url) 64 c = result.content 65 soup = BeautifulSoup(c) 66 summary = soup.find("div",{'id':'js-bukkenList'}) 67 68 #マンション名、住所、立地(最寄駅/徒歩~分)、築年数、建物高さが入っているcassetteitemを全て抜き出し 69 cassetteitems = summary.find_all("div",{'class':'cassetteitem'}) 70 71 #各cassetteitemsに対し、以下の動作をループ 72 for i in range(len(cassetteitems)): 73 #各建物から売りに出ている部屋数を取得 74 tbodies = cassetteitems[i].find_all('tbody') 75 76 #マンション名取得 77 subtitle = cassetteitems[i].find_all("div",{ 78 'class':'cassetteitem_content-title'}) 79 subtitle = str(subtitle) 80 subtitle_rep = subtitle.replace( 81 '[<div class="cassetteitem_content-title">', '') 82 subtitle_rep2 = subtitle_rep.replace( 83 '</div>]', '') 84 85 #住所取得 86 subaddress = cassetteitems[i].find_all("li",{ 87 'class':'cassetteitem_detail-col1'}) 88 subaddress = str(subaddress) 89 subaddress_rep = subaddress.replace( 90 '[<li class="cassetteitem_detail-col1">', '') 91 subaddress_rep2 = subaddress_rep.replace( 92 '</li>]', '') 93 94 #部屋数だけ、マンション名と住所を繰り返しリストに格納(部屋情報と数を合致させるため) 95 for y in range(len(tbodies)): 96 name.append(subtitle_rep2) 97 address.append(subaddress_rep2) 98 99 #立地を取得 100 sublocations = cassetteitems[i].find_all("li",{ 101 'class':'cassetteitem_detail-col2'}) 102 103 #立地は、1つ目から3つ目までを取得(4つ目以降は無視) 104 for x in sublocations: 105 cols = x.find_all('div') 106 for i in range(len(cols)): 107 text = cols[i].find(text=True) 108 for y in range(len(tbodies)): 109 if i == 0: 110 locations0.append(text) 111 elif i == 1: 112 locations1.append(text) 113 elif i == 2: 114 locations2.append(text) 115 116 #築年数と建物高さを取得 117 tbodies = cassetteitems[i].find_all('tbody') 118 col3 = cassetteitems[i].find_all("li",{ 119 'class':'cassetteitem_detail-col3'}) 120 for x in col3: 121 cols = x.find_all('div') 122 for i in range(len(cols)): 123 text = cols[i].find(text=True) 124 for y in range(len(tbodies)): 125 if i == 0: 126 age.append(text) 127 else: 128 height.append(text) 129 130 #階、賃料、管理費、敷/礼/保証/敷引,償却、間取り、専有面積が入っているtableを全て抜き出し 131 tables = summary.find_all('table') 132 133 #各建物(table)に対して、売りに出ている部屋(row)を取得 134 rows = [] 135 for i in range(len(tables)): 136 rows.append(tables[i].find_all('tr')) 137 138 #各部屋に対して、tableに入っているtext情報を取得し、dataリストに格納 139 data = [] 140 for row in rows: 141 for tr in row: 142 cols = tr.find_all('td') 143 for td in cols: 144 text = td.find(text=True) 145 data.append(text) 146 147 #dataリストから、階、賃料、管理費、敷/礼/保証/敷引,償却、間取り、専有面積を順番に取り出す 148 index = 0 149 for item in data: 150 if '階' in item: 151 floor.append(data[index]) 152 rent.append(data[index+1]) 153 admin.append(data[index+2]) 154 others.append(data[index+3]) 155 floor_plan.append(data[index+4]) 156 area.append(data[index+5]) 157 index +=1 158 159 #プログラムを10秒間停止する(スクレイピングマナー) 160 time.sleep(10) 161 162#各リストをシリーズ化 163name = Series(name) 164address = Series(address) 165locations0 = Series(locations0) 166locations1 = Series(locations1) 167locations2 = Series(locations2) 168age = Series(age) 169height = Series(height) 170floor = Series(floor) 171rent = Series(rent) 172admin = Series(admin) 173others = Series(others) 174floor_plan = Series(floor_plan) 175area = Series(area) 176 177#各シリーズをデータフレーム化 178suumo_df = pd.concat([name, address, locations0, locations1, locations2, age, height, floor, rent, admin, others, floor_plan, area], axis=1) 179 180#カラム名 181suumo_df.columns=['マンション名','住所','立地1','立地2','立地3','築年数','建物高さ','階','賃料','管理費', '敷/礼/保証/敷引,償却','間取り','専有面積'] 182 183#csvファイルとして保存 184suumo_df.to_csv('suumo_adachi.csv', sep = '\t',encoding='utf-16') 185```python 186 187で実行すると 188 189 pages_split3 = int(pages_split2) 190ValueError: invalid literal for int() with base 10: 'v]' 191 192というエラーが怒ってしまいます 193intに文字列が入れれないところまでは 194googleで調べてわかったのですが、 195その後の対応策がわかりません。 196どなたかわかる方いましたら教えてください!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずエラーが発生する箇所までで動作するかチェックしてみましょう。
ライブラリのversion等の環境の差で発生しているエラーがあるかもしれません。

python

1from bs4 import BeautifulSoup 2import requests 3import pandas as pd 4from pandas import Series, DataFrame 5import time 6 7# URL(東京都足立区の賃貸住宅情報 検索結果の1ページ目) 8url = 'http://suumo.jp/jj/chintai/ichiran/FR301FC001/?ar=030&bs=040&ta=13&sc=13121&cb=0.0&ct=9999999&et=9999999&cn=9999999&mb=0&mt=9999999&shkr1=03&shkr2=03&shkr3=03&shkr4=03&fw2=&srch_navi=1' 9 10# データ取得 11result = requests.get(url) 12c = result.content 13 14# HTMLを元に、オブジェクトを作る 15soup = BeautifulSoup(c, "html.parser") 16 17# 物件リストの部分を切り出し 18summary = soup.find("div", {'id': 'js-bukkenList'}) 19 20# ページ数を取得 21body = soup.find("body") 22pages = body.find_all("div", {'class': 'pagination pagination_set-nav'}) 23pages_text = str(pages) 24pages_split = pages_text.split('</a></li>\n</ol>') 25pages_split0 = pages_split[0] 26pages_split1 = pages_split0[-3:] 27pages_split2 = pages_split1.replace('>', '') 28pages_split3 = int(pages_split2) 29print(pages_split3)

また、teratailにコードを貼り付ける場合、下記を参照して貼り付けるようにしてください。
ただのテキストのままではコードの間違いをチェックも難しくなります。
コードを入力の部分を参照してください

投稿2017/11/23 03:40

編集2017/11/23 04:08
wakame

総合スコア1170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mokatsu

2017/11/23 04:19

wakame様 ご解答いただきありがとうございました ご返信いただいた、 まずエラーが発生する箇所までで動作するかチェックしてみましょう。 ライブラリのversion等の環境の差で発生しているエラーがあるかもしれません。 のコードを実行すると、 ファイル名の後に、 on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details というエラーが発生しました。
mokatsu

2017/11/23 04:26

wakame様 ご返信いただいた中で、ライブラリのversion等の環境の差で というご意見を頂いたので、 必要かどうかわかりませんが、 terminalからpip freezeで出した 情報も貼り付けさせていただきます。 BeautifulSoup==3.2.1 beautifulsoup4==4.6.0 bs4==0.0.1 certifi==2017.11.5 chainer==3.1.0 chardet==3.0.4 Cython==0.27.3 filelock==2.0.13 idna==2.6 numpy==1.13.3 pandas==0.21.0 protobuf==3.5.0 python-dateutil==2.6.1 pytz==2017.3 requests==2.18.4 scipy==1.0.0 six==1.11.0 urllib3==1.22 You are using pip version 8.1.1, however version 9.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
mokatsu

2017/11/23 04:34

すみません、 非常に初歩的な質問で申し訳ありませんが、 $ python ファイル $ python3 ファイル どちらでの起動が正しいでしょうか
mokatsu

2017/11/23 04:35

$ python3 ファイルだと 218が返ってきました
wakame

2017/11/23 04:43 編集

$ python -V と $ python3 -Vをするとどのような結果が返ってきますか?おそらくpython2と3が共存している環境だと思いますが・・・確認のため。
mokatsu

2017/11/23 04:52

$ python -V だと SyntaxError: Non-ASCII character '\xef' in file /Users/M/INBOX/python/機械学習を使って東京23区のお買い得賃貸物件を探してみた - データで見る世界/1.スクレイピング編/test2.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details $ python3 -V だと 218が返ってきてきました。
wakame

2017/11/23 04:56

引数にファイル(ソースコード)は必要ありません、$ python -V 、 $ python3 -V のみ入力してもらえますか。ちなみに今やろうとしていることはpythonのversion情報を表示させようとしています。
mokatsu

2017/11/23 05:01

失礼しました。 $ python -V だと、 Python 2.7.12 $ python3 -V だと、 Python 3.5.2 でした。
wakame

2017/11/23 05:10 編集

なるほど、やはりpython2と3が混在している環境なんですね。引用元のソースコードがpython3で正常に動作するということはpython3で動作確認されたコードのようですね。
mokatsu

2017/11/23 05:13

丁寧なご解答ありがとうございます。 wakame様にはお手数おかけしますが、 この先のやり方について教えていただけませんか?
wakame

2017/11/23 05:18

python3で正常に動作するとわかったならば、まず$python3 ファイル名(ソースコード)を実行してどうなるかを確認してみるではないでしょうか。その後また不明点、わからないことがあったらこの質問とは別の質問で聞いてみるといいと思います。
mokatsu

2017/11/23 05:28

かしこまりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問