python Webスクレイピング 実践入門をしようと思ったらうまくできなかった話
こちらのPython Webスクレイピング 実践入門を勉強しようと試していたところ、自分の環境にはurllib2というパッケージがインストールできなくてurllib3というパッケージを使わないといけないっぽい。そして、セキュリティーに関するエラーもでるというので、対策をしました。
urllib3を使うためには
参考までにurllib2をインスト−ルしようとすると以下のようなエラーがでます。
$ pip install urllib2 Collecting urllib2 Could not find a version that satisfies the requirement urllib2 (from versions: ) No matching distribution found for urllib2
ちなみにインストールされているライブラリを確認してみると
$ pip freeze ・・・ unicodecsv==0.14.1 urllib3==1.22 # coding: UTF-8 wcwidth==0.1.7 ・・・
urllib3が入ってます。ということで、特に何もせず使うことはできます。
「使うことは、、、」笑い
ライブラリインストール
$ pip install beautifulsoup4
これはそのままいけると思います。
日経新聞のページタイトル取得用ソースコード
getNikkeiWebPageTitle.py
# coding: UTF-8
import
urllib2
from
bs4
import
BeautifulSoup
# アクセスするURL
url
=
"http://www.nikkei.com/"
# URLにアクセスする htmlが帰ってくる → 経済、株価、ビジネス、政治のニュース:日経電子版
html
=
urllib2.urlopen(url)
# htmlをBeautifulSoupで扱う
soup
=
BeautifulSoup(html,
"html.parser")
# タイトル要素を取得する → 経済、株価、ビジネス、政治のニュース:日経電子版
title_tag
=
soup.title
# 要素の文字列を取得する → 経済、株価、ビジネス、政治のニュース:日経電子版
title
=
title_tag.string
# タイトル要素を出力
print
title_tag
# タイトルを文字列を出力
print
title
もちろんうまく行きません。
$ python3 getNikkeiWebPageTitle1.py File "getNikkeiWebPageTitle1.py", line 22 print title_tag ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print(title_tag)?
まずprint のSyntaxErrorが出ているので修正
# タイトル要素を出力 #print title_tag print(title_tag) # タイトルを文字列を出力 # print title print(title)
実行してみるとまたまた、違うエラーがでます。
$ python3 getNikkeiWebPageTitle1.py Traceback (most recent call last): File "getNikkeiWebPageTitle1.py", line 3, inimport urllib2 ModuleNotFoundError: No module named 'urllib2'
urllib3を使うということなのでそのあたりを修正
import urllib3 url = "http://www.nikkei.com/" #html = urllib3.urlopen(url) http = urllib3.PoolManager() response = http.request('GET',url) # htmlをBeautifulSoupで扱う #soup = BeautifulSoup(html, "html.parser") soup = BeautifulSoup(response.data.decode('UTF-8'),"lxml")
コメントアウトがもとのソースでその下が、修正した部分です。
このコードを実行すると
/Users/USERNAME/anaconda3/lib/python3.6/site-packages/urllib3/connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)経済、株価、ビジネス、政治のニュース:日経電子版 経済、株価、ビジネス、政治のニュース:日経電子版
InsecureRequestWarningという警告が出ています。
InsecureRequestWarningを消す
$ pip install certifi
$ pip install urllib3[secure]
を実行
import certifi
http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED',ca_certs=certifi.where())
この2行を追加します。そうすると。エラーなく実行できます。
スクレイピングをうまく使うとかなり便利そうですね(^^)
ディスカッション
コメント一覧
まだ、コメントがありません