LoginSignup
3
2

More than 1 year has passed since last update.

手軽に始めるスクレイピング

Posted at

う え き ぷ に き あ く ん 笑 Advent Calendar 2021 15日目です

環境

macOS Catalina 10.15.7
Python 3.9.7

この記事について

本記事では、スクレイピングを今すぐしたいけどよくわからない!とりあえずコピペで動くものを使いたい!!!
みたいな方に向けたものです。
また、本記事での"スクレイピング"は"Webスクレイピング"を表します。

スクレイピングについて

そもそもスクレイピングとは、特定の情報を取得することを目的としてWebページを自動的に巡回することです。
本記事では、Python3を用いて実装していきます。

実装

本記事内では、モジュールとしてPython標準のurllib.requestモジュールを使用します。
以下、ページ内容の取得の実装部分になります。

from urllib import request

URL = "https://www.google.com/"
res = request.urlopen(URL)
content = res.read()
res.close()
html = content.decode()

1行目でurllib.requestを読み込みます。
4, 5行目で指定したURLのページのHTMLをバイト列として取得します。
6行目で通信を終了し、7行目でバイト列として取得したHTMLを文字列にデコードしています。

以下、本記事内では、

def urlopen(URL):
    from urllib import request

    res = request.urlopen(URL)
    content = res.read()
    res.close()
    html = content.decode()

    return html

として実装されているものとしています。

次に、取得したHTMLから特定のデータを取得する部分の実装です。

URL = "https://www.google.com/"
html = urlopen(URL)
def element_get(HTML, TAG):
    HTML += ">" # データの取得がしやすいよう、末尾に>を追加
    tag_start = "<"+TAG+">"
    tag_end = "</"+TAG+">"
    ret = []
    splited_html = html.split(tag_end)
    for ind,element in enumerate(splited_html):
        if ind+1 == len(splited_html):
            continue
        ret.append(element.split(tag_start)[-1])

    return ret

流れとしては、HTMLタグを引数から作成し、

<tag>
</tag>

その後、タグの終了で分割を行い、その結果に対してタグの始まりで分割をすることで要素の取得を行います。

唐突な終わり

ここまで書いたのですが、特にぼくはスクレイピングでしたいことがないため、これ以上は書けません。有意義なプログラムを作成することはとても難しいですね...

最終的なプログラムは以下の通りになります。ぜひ有効活用してみてくださいね!(お願いしますほんとに)

def urlopen(URL):
    from urllib import request

    res = request.urlopen(URL)
    content = res.read()
    res.close()
    html = content.decode()

    return html

def element_get(HTML, ELEMENT):
    HTML += ">"
    ele_start = "<"+ELEMENT+">"
    ele_end = "</"+ELEMENT+">"
    ret = []
    splited_html = html.split(ele_end)
    for ind,ele in enumerate(splited_html):
        if ind+1 == len(splited_html):
            continue
        ret.append(ele.split(ele_start)[-1])
    return ret

明日の記事はうえきさんらしいので、ぜひぜひ〜

3
2
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
3
2