昨日までのはこちら
100日後にエンジニアになるキミ - 70日目 - プログラミング - スクレイピングについて
100日後にエンジニアになるキミ - 66日目 - プログラミング - 自然言語処理について
100日後にエンジニアになるキミ - 63日目 - プログラミング - 確率について1
100日後にエンジニアになるキミ - 59日目 - プログラミング - アルゴリズムについて
100日後にエンジニアになるキミ - 53日目 - Git - Gitについて
100日後にエンジニアになるキミ - 42日目 - クラウド - クラウドサービスについて
100日後にエンジニアになるキミ - 36日目 - データベース - データベースについて
100日後にエンジニアになるキミ - 24日目 - Python - Python言語の基礎1
100日後にエンジニアになるキミ - 18日目 - Javascript - JavaScriptの基礎1
100日後にエンジニアになるキミ - 14日目 - CSS - CSSの基礎1
100日後にエンジニアになるキミ - 6日目 - HTML - HTMLの基礎1
今回もスクレイピングの続きです。
前回までで、リクエストと構文解析までは終わっています。
今回は取得したデータを保存する方法です。
取得した情報の保存
スクレイピング
は1つのURLで終わらないことが多いため
リスト型などに取得した情報を格納しておき、適宜ファイルやデータベースに出力することでデータを保存できます。
import requests
from bs4 import BeautifulSoup
url = 'アクセスURL'
res = requests.get(url)
soup = BeautifulSoup(res.content, "html.parser")
# 空のリストを用意
result_list = []
# a タグを全て取得する
a_tags = soup.find_all('a')
for a in a_tags[0:10]:
# aタグのhrefをリストに格納する
result_list.append(a.get('href'))
print(result_list)
['http://www.otupy.com', '/otu/', '/business/', '/global/', '/news/', '/python/', '/visits/', '/recruit/', '/vision/']
リストに格納したものをファイル化するのは次のコードで行えます。
with open('ファイルパス','w') as _w:
for row in result_list:
_w.write('\t'.join(row))
ファイルのダウンロード方法
スクレイピングで取得できるのはテキスト情報だけではありません。
リクエスト先がファイルの場合はファイルを取得することができます。
ファイルのダウンロードは次のようなコードで実現できます。
import requests
import os
url = 'ファイルのURL'
# URLからファイル名を抜き出す
file_name = os.path.basename(url)
print(file_name)
# 対象URLにストリーミングアクセスする
res = requests.get(url, stream=True)
if res.status_code == 200:
print('file download start {0}'.format(file_name))
# バイトコードでファイル書き込みを行う
with open(file_name, 'wb') as file:
# chunk_sizeごとにファイル書き込みを進める
for chunk in res.iter_content(chunk_size=1024):
file.write(chunk)
print('file download end {0}'.format(file_name))
ファイルとして保存するには一度アクセスできるかを確かめた後に
レスポンスをファイルとして書き込みします。
res.iter_content(chunk_size=チャンクサイズ)
で少しづつ書き込みをしていきます。
URLエンコード
URLには日本語などの特殊な文字は使えません。
日本語検索時のURLなどで日本語をURLに使いたい場合は
文字列を特定のコード(記号や英数字の羅列)に変換する必要があります。
日本語からURLに使える文字列にすることをURLエンコード
と言います。
逆にURLエンコード
されて読めなくなった文字列を、再び読める状態に変換することを
URLデコード
と言います。
pythonではurllib
ライブラリを用います。
URLエンコード
urllib.parse.quote('対象文字列')
デコード
urllib.parse.unquote('対象文字列')
import urllib.parse
# URLエンコード
st = '乙py'
s_quote = urllib.parse.quote(st)
print(s_quote)
## デコード
d_quote = urllib.parse.unquote('%E4%B9%99py')
print(d_quote)
%E4%B9%99py
乙py
まとめ
スクレイピングに関して、補足的な知識を載せています。
少量なのですぐにためせると思います。
昨日までの分を復習しておきましょう。
君がエンジニアになるまであと27日
作者の情報
乙pyのHP:
http://www.otupy.net/
Youtube:
https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter:
https://twitter.com/otupython