###前提・実現したいこと
PythonスクレイピングのコードをUbuntuOSで動かそうとしています。
参考サイトの「train3.py」を実行しようとしたところ、
$ python train3.py Traceback (most recent call last): File "train3.py", line 4, in <module> import urllib.request as req ImportError: No module named request
とエラーが出たため、
$ $ sudo pip install Requests
は行いましたが、依然として実行できない状況が続いており困っています。
###該当のソースコード
Python
1#train3.py 2# -*- coding: utf-8 -*- 3 4from bs4 import BeautifulSoup 5import urllib.request as req 6import sqlite3 7import re 8 9url = "http://www.keishicho.metro.tokyo.jp/kurashi/higai/kodomo/fushin/20_fushin.html" 10dbname = 'database.db' 11conn = sqlite3.connect(dbname) 12c = conn.cursor() 13table_name = 'test' 14 15# train1の部分 16def get_html(): 17 # urlopen()でデータを取得 18 res = req.urlopen(url) 19 20 # BeautifulSoup()で解析 21 soup = BeautifulSoup(res, 'html.parser') 22 23 # 任意のデータを抽出 24 main = soup.find("div", id="main").find("div", class_="main_inner").find("div", class_="t-box2") 25 news_list = main.find("table").find_all("tr") 26 27 res = [] 28 for news in news_list: 29 res += get_res(news) 30 31 return res 32 33# 記事から情報を抜き出すところ 34def get_res(news): 35 place = news.find('th').string 36 main = news.find('td').find('p').text 37 main_list = re.match('(.*警察署)([0-9]{1,2})月([0-9]{1,2})日((.)曜)、(.*)ころ、(.*)不審者の特徴:(.*)', main).groups() 38 police = main_list[0] 39 date = main_list[1] + main_list[2] + main_list[3] 40 time = main_list[4] 41 body = main_list[5] 42 feature = main_list[6] 43 44 return [(place, police, date, time, body, feature)] 45 46 47def drop_table(tname): 48 # executeメソッドでSQL文を実行する 49 create_table = '''drop table if EXISTS {} '''.format(tname) 50 c.execute(create_table) 51 52# train2の部分 53def create_table(tname): 54 # executeメソッドでSQL文を実行する(型はひとまずcharで入れてます...) 55 create_table = ''' 56create table if NOT EXISTS {} ( 57 place varchar(64), 58 police varchar(32), 59 date varchar(64), 60 time varchar(64), 61 body varchar(64), 62 feature varchar(64))'''.format(tname) 63 c.execute(create_table) 64 65def insert_data(tname, data): 66 # 一度に複数のSQL文を実行したいときは,タプルのリストを作成した上で 67 # executemanyメソッドを実行する 68 insert_sql = 'insert into {0} (place, police, date, time, body, feature) values (?,?,?,?,?,?)'.format(tname) 69 c.executemany(insert_sql, data) 70 conn.commit() 71 72def select_all(tname): 73 select_sql = 'select * from {0}'.format(table_name) 74 res = "" 75 for row in c.execute(select_sql): 76 res += str(row) 77 return res 78 79 80if __name__ == '__main__': 81 drop_table(table_name) 82 create_table(table_name) 83 test = get_html() 84 insert_data(table_name, test) 85 print(select_all(table_name)) 86 87 88 conn.close()
###補足情報(言語/FW/ツール等のバージョンなど)
Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-57-generic x86_64)
Python 2.7.12
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/02 03:15
退会済みユーザー
2018/01/02 06:50
退会済みユーザー
2018/01/02 13:34
退会済みユーザー
2018/01/02 15:10
退会済みユーザー
2018/01/07 06:41