Linuxのテキストエディター「viエディタ」は仮想マシンでは必須のエディターだった!!

Pythonを使ってウェッブサイトからデータ収集をするためのクローリングとスクレイピングの方法を勉強しています。

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-っていう本をもとに勉強しているんですけど、どうしても下のようなエラーが出てきて困ってしまっていたのです。

(scraping) vagrant@vagrant-ubuntu-trusty-64:~$ python greet.py
python: can't open file 'greet.py': [Errno 2] No such file or directory

どうしたらいいのかと2-3日いろいろなところを調べまくった結果、どうやら答えを見つけました。

 (scraping) vagrant@vagrant-ubuntu-trusty-64:~$ vi greet.py

Linuxには「viエディタ」っていうテキストエディターが標準でインストールされていることを見落としていたんですね。

プログラミング習得ならこちら↓↓↓。

Linuxのviエディターを使ってプログラムを書く

viエディタを使うことで、今使っている仮想マシンが見つけることができるプログラムを書くことができることに気が付いたんです。

import sys

def greet(name):
print('Hello, {0}!'.format(name))

if len(sys.argv)>1:
name = sys.argv[1]
greet(name)

else:
greet('world')

で、さっそく試しに「Hello World」のプログラムをviで書いて実際に動くかどうか試してみました。

(scraping) vagrant@vagrant-ubuntu-trusty-64:~$ python greet.py
Hello, world!
(scraping) vagrant@vagrant-ubuntu-trusty-64:~$ python greet.py Guido
Hello, Guido!

ちゃんと動いています。

また一つ賢くなったかも。

ウェッブサイトの取得に挑戦

そこで、この問題が解決しなかったので前に進めなかった、ウェッブサイトの取得をもう一度やってみました。

インタラクティブシェルで下のようなコマンドを実行します。

(scraping) vagrant@vagrant-ubuntu-trusty-64:~$ python
Python 3.4.3 (default, Nov 17 2016, 01:08:31)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
from urllib.request import urlopen
f=urlopen('http://sample.scraping-book.com/dp')
type(f)
<class 'http.client.HTTPResponse'>
f.read()
b'<!DOCTYPE HTML>\n<html lang="ja" class="pc">\n<head>\n <meta charset="UTF-8>\n
<title>Gihyo Digital Publishing...
f.status
200
f.getheader('Content-Type')
'text/html; charset=utf-8'

すると、ウェッブページがダウンロードされるんですがこの方法だと、エンコーディングが必要なんですね。

そのためプログラムを書いてエンコードさせなければいけないのですが、今までviの存在を知らなかったのでどうしても前に進めませんでした。

でも今回下記のプログラムをviエディタで書いて保存。

import sys
from urllib.request import urlopen

f=urlopen('http://sample.scraping-book.com/dp')
encoding=f.info().get_content_charset(failobj="utf-8")
print('encoding:',encoding, file=sys.stderr)
text=f.read().decode(encoding)
print(text)

実行することで、ちゃんとエンコーディングが完成。

(scraping) vagrant@vagrant-ubuntu-trusty-64:~$ python urlopen_encoding.py
encoding: utf-8
<!DOCTYPE HTML>
<html lang="ja" class="pc">
<head>
<meta charset="UTF-8">
<title>Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド- 
サンプルページ</title>

なんというかちゃんと本を読めよっていうことなのかもしれませんが、それでもちゃんとできたということはちょっとうれしいです。

プログラミング習得ならこちら↓↓↓。

  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です