LoginSignup
0
1

More than 3 years have passed since last update.

初心者がスクレイピングについてまとめてみた

Last updated at Posted at 2020-05-06

まえがき

・自分は全くの初心者、または学習を始めたばかりの者になります
・自分なりに考察したものを記入していますが、間違えている事があれば指摘して頂けると幸いです
・ほとんどが自分の為の、メモ書きみたいなものになっています

今回の目的

サイトの中の記事のタイトルとそのタイトルのリンク(url)を取得します

WEBスクレイピング

・webスクレイピングとは、webサイトから任意の情報を取得する技術

項目

requestsについて

 requestsはサーバからHTML、XMLを取得するのに使用するライブラリ

BeautifulSoupについて

 BeautifulSoupはスクレイピングを使用するライブラリ

実践していきながら、解説します

使用するモジュールやライブラリをimportします

まずは、requestsライブラリとBeautifulライブラリをimportします
コードについては、以下になります

import requests
from bs4 BeautifulSoup

*ちなみにrequestsとBeautifulSoupのインストールが済んでいない方は、インストールを済ませてからじゃないと動きません。インストール方法は記載しませんので、各自で確認して頂けると幸いです。

スクレイピングするサイトからurlを取得します

*この記事では、https://youtu.be/6F2Po-CCX9cを参考にさせて頂きます
・今回使用するサイトは、「ハムスター速報」になります。
以降はハム速と略していきます。

まずは、ハム速をGoogle Chromeで検索していきます。
ハム速をクリックして、サイト内に入り、urlをクリックからコピーします
すると、http://hamusoku.com/
こちらのurlがコピーできたと思います。

HTMLからサーバを取得します

先ほど取得したurlで、サーバからHTMLを取得します

page_url = "http://hamusoku.com/"
r = requests.get(page_url)

page_urlにurlを代入します
次に、requestsのget関数でサーバから取得したHTMLをrに代入します

BeautifulSoupを使用して、HTMLを解析(パーサー)します

soup = BeautifulSoup(r.text, features='html.parser')

BeautifulSoup()の記述方法は、
BeautifulSoup(解析対象のHTML/XML, 利用するパーサー)になります。

今回は第二引数の属性として、featuresを指定してますが、なくても大丈夫だと思います。

soup = BeautifulSoup(r.text, 'html.parser')

記事タイトルを取得する

記事タイトルを取得するためには、ハム速のHTMLの構造を知る必要があります。
その方法として、

一つ目
・chromeのデベロッパーツールを使用します。
・上のTabバーから表示を選択して、開発/管理を選択、デベロッパーツールを選択します。
・コードが書かれている上の方の、Elementsを選択すると、HTMLのソースが表示されます。
・Elementsの左にある四角と矢印のアイコンをクリックすると、サイト内でマウスを動かすとハイライトされた部分HTMLがなんなのか分かります。

二つ目
・知りたいHTMLに概要する場所を、右クリックして、検証を選択します。

・そして記事タイトルのHTMLを取得します。
取得方法ですが、検証してみるとaタグでurlが記述されているのが分かります。
そして、このaタグはh1タグの中にあります。h1タグのclass名を使えば、全ての記事タイトルの取得できる予想ができます。
aタグでも取得することが、出来ます。

h1_tags = soup.find_all('h1', class_="article-title")

find_allメソッドは、
Tagオブジェクトが持つ子孫要素のうち、引数に一致する全ての要素を取得します。

soup.Tagオブジェクト.find_all(name, attrs, recursive, text, limit, キーワード引数)

今回のfind_allでは、name引数の文字列とキーワード引数が使われています。
h1に該当する文字列とclass_="article-title"に概要するキーワードで取得します。
*classの後ろに_を記述しないといけない

取得できたものを、h1_tagsに代入します。

色々な出力方法

これを実行すると、指定された引数の記事タイトルの情報を全て取得する
かなりの量なので、ここには記載しないので、自身で確認してもらいたい。

print(h1_tags)

これを実行すると、一番目に指定したものが出力される
[1]の場合は、二番目のもの

print(h1_tags[0])

これは、指定されたh1タグの中にあるaタグだけを取得する

print(h1_tags[0].find_all('a'))

aタグが複数ある場合は、選択することも可能
find_all('a')[0]のように

print(h1_tags[0].find_all('a')[0])

または属性から選択することも可能
attrsはattributes(属性)

print(h1_tags[0].find_all('a', attrs={"rel": "bookmark"}))
# attrs={"key": "varue"}

textのみを取得、またはリンクのみ取得

# text
print(h1_tags[0].find_all('a')[0].text)
# link
print(h1_tags[0].find_all('a')[0].get("href"))
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