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

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

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

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

解決済

スクレイピング結果で文字化けが取れない

chouchou
chouchou

総合スコア6

Python 3.x

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

1回答

0評価

0クリップ

171閲覧

投稿2022/06/17 08:02

編集2022/06/18 08:06

あるDBからスクレイピングしてきた結果のCSVに¡が入ってしまい、これがどのようにしたら取れるのかがわからずにいます。
元のスクレイピングのどこを修正すべきでしょうか。
それとも、結果から削除できるかと思い、.replaceでやってみたのですが、できませんでした(安直な考えだったかもしれません・・)
もし知見がある方がいらっしゃったら、ご教授頂けると幸いです。

(結果のCSV)
0 2022/01/01 ¡¡¡¡01:00 ¡¡¡¡¡¡0.83
1 2022/01/01 ¡¡¡¡02:00 ¡¡¡¡¡¡0.83
2 2022/01/01 ¡¡¡¡03:00 ¡¡¡¡¡¡0.83
3 2022/01/01 ¡¡¡¡04:00 ¡¡¡¡¡¡0.83
4 2022/01/01 ¡¡¡¡05:00 ¡¡¡¡¡¡0.83

(元のスクレイピング)https://qiita.com/fftcy-sttkm/items/3d92d85c69669c44872c から考え方を拝借させて頂いています。

#ライブラリ import pandas as pd import csv import time from datetime import datetime from datetime import timedelta import requests from bs4 import BeautifulSoup #関数群 #時間を変換する関数 def time_tyconv(time): if isinstance(time,str):return datetime.strptime(time,'%Y%m%d') elif isinstance(time,datetime):return time.strftime("%Y%m%d") else:raise TypeError('type-err!') #日付からステップ数を算出する関数 def step_number(start_date, end_date): s = time_tyconv(start_date) e = time_tyconv(end_date) return int(((e-s).days + 1)//8) #●日後の日付データを求める関数 def date_after_days(time,days): day_after = time_tyconv(time) + timedelta(days=days) return time_tyconv(day_after) #任意期間のデータを水門水質DBからスクレイピングする関数 def scrp_DB(start_date, end_date, location_id,result_list): base_url = 'http://www1.river.go.jp' url = "http://www1.river.go.jp/cgi-bin/DspWaterData.exe" params = { "KIND":1, "ID":location_id, "BGNDATE":start_date, "ENDDATE":end_date, "KAWABOU":"NO" } #iframeのhtmlからsrcURLを取得 resp = requests.get(url,params=params) temp_soup = BeautifulSoup(resp.text,'html.parser') resp_iframe = requests.get(base_url+temp_soup.iframe['src']) #srcURLのhtmlを取得(iframe内) soup = BeautifulSoup(resp_iframe.text,'html.parser') soup = soup.select_one("table[border='0']") tr_list = soup.find_all("tr") tr_list.pop(0) for tr in tr_list: result_row = [] td_list = tr.find_all('td') for td in td_list: cell = td.get_text() result_row.append(cell) result_list.append(result_row) return result_list #Mainの処理 #取得期間、地点番号、保存ファイル名設定 start_date = "20220101" end_date = "20220131" csvfile_name = "result.csv" location_id = "308041288813010" n_step = step_number(start_date, end_date) result_list = [] for n in range(n_step): result_list = scrp_DB(start_date, date_after_days(start_date,7), location_id, result_list) start_date = date_after_days(start_date,8) time.sleep(2) result = scrp_DB(start_date, end_date,location_id,result_list) with open(csvfile_name, 'w') as file: writer = csv.writer(file, lineterminator='\n') writer.writerows(result)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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