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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

3回答

1967閲覧

Webスクレイピングの文字化け対応

yositigu

総合スコア17

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2020/11/09 01:52

下記のWebスクレイピングをしたいのですが、文字化けしてしまいました。
対処方法を教えていただけないでしょうか。
Python3で動かしています。

Python

1import requests 2from bs4 import BeautifulSoup 3 4# WebサイトのURLを指定 5url = "https://www.nttdocomo.co.jp/js_osp/area/servicearea/service_map_5g/service_map.php?lat=35.84955538350727&lng=139.31292081298892&categoryCd=%22all%22&isTakeLeast=false&latNorthEast=36.539996011807645&lngNorthEast=140.60106778564517&latSouthWest=35.153050415318106&lngSouthWest=138.02477384033267" 6 7# Requestsを利用してWebページを取得する 8r = requests.get(url) 9print(r.text)

結果一部抜粋

{"fitBound":false,"hidden":0,"data":[{"category_cd":"004","category":"\u30c9\u30b3\u30e2\u30b7\u30e7\u30c3\u30d7","region_cd":"3","region":"\u95a2\u6771\u30fb\u7532\u4fe1\u8d8a","pref_cd":"08","pref":"\u8328\u57ce\u770c","facility_spot_name":"\u30c9\u30b3\u30e2\u30b7\u30e7\u30c3\u30d7\u3072\u305f\u3061\u306a\u304b\u5e97","detail":"\u5e97\u8217\u5185","available_time_cd":"0","available_time":"\u5f53\u6708\u672b","lng":"140.543248","lat":"36.397522","ehf":"1","available_time_txt":"2020\u5e7410\u6708\u672b\u6642\u70b9","ehf_txt":"\u30df\u30ea\u6ce2\u5bfe\u5fdc"},

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

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

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

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

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

quickquip

2020/11/09 02:23 編集

正しい結果だと思います(=そのサーバからそのようにデータが来ているのであって文字化けだと思っている方が間違い)ので、そうすると質問は「このデータをどうしたらいいですか?」になってしまうわけですが、JSONのデータ形式についてご存じないということでしょうか?
yositigu

2020/11/09 03:11

ありがとうございます。 文字化けの問題を解決しJSON形式でデータ取得する方法を教えていただけないでしょうか。
nto

2020/11/09 07:26

質問者様は、どういったページをスクレイピングしようとし スクレイピングをして何をどうしようと考えていらっしゃるのでしょうか? 「スクレイピングをしたかった」というのはわかりますが、もう少し具体的な目的がわかれば回答がしやすいです。
yositigu

2020/11/09 08:42 編集

スクレイピングしたいページは上記プログラムのURLです。 スポット情報が記載されているページです。 具体的にはレスポンスで帰ってくるjsonファイルの[data]の項目を抜き出し、jsonもしくはcsvで出力したいと考えております。
guest

回答3

0

ベストアンサー

BeautifulSoupというものは、requestsなどで取得したhtmlデータを
パースしたり要素を抽出する等、それらに特化したライブラリです。
jsonデータの取得や整形などにはBeautifulSoupは使用しません。


また文字化け~の件については、quickquipさんもコメントされている様に
それは符号化されたものであり文字化けではありません。
また便利な事にrequestsによる.json()を使用すると自動でデコードされる様です。

JSONデータを扱う場合に、JSONをデコードする機能もあります。

参照:https://requests-docs-ja.readthedocs.io/en/latest/user/quickstart/#json

python

1import requests 2 3URL = 'URL' 4response = requests.get(URL) 5data = response.json()

投稿2020/11/09 10:11

編集2020/11/09 11:31
nto

総合スコア1438

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

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

0

Python

1import requests 2from bs4 import BeautifulSoup 3import json 4 5# WebサイトのURLを指定 6url = "https://www.nttdocomo.co.jp/js_osp/area/servicearea/service_map_5g/service_map.php?lat=35.84955538350727&lng=139.31292081298892&categoryCd=%22all%22&isTakeLeast=false&latNorthEast=36.539996011807645&lngNorthEast=140.60106778564517&latSouthWest=35.153050415318106&lngSouthWest=138.02477384033267" 7 8# Requestsを利用してWebページを取得する 9r = requests.get(url) 10 11dic = json.loads(r.text) 12data = dic['data'] 13 14with open('test.json', 'w') as f: 15 json.dump(data, f, indent=4) 16

投稿2020/11/09 10:29

meg_

総合スコア10760

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

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

0

urlをブラウザで開いてみると、元のページがUnicodeでエスケープされているんですね。

Unicodeエスケープされた文字列を通常の文字列に変換

最後のprint()を

Python

1print(r.text.encode().decode('unicode-escape'))

とするのでいかがでしょうか。

投稿2020/11/09 09:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/11/09 12:44

ntoさんの回答にある `.json()` を使えば `encode` `decode` は不要でした。 確認不足で失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問