LoginSignup
0
1

More than 3 years have passed since last update.

100日後にエンジニアになるキミ - 73日目 - プログラミング - スクレイピングについて4

Posted at

昨日までのはこちら

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1