0
3

More than 3 years have passed since last update.

【初心者】ざっくりわかるGoogle Colaboratoryを使ったPythonのWebスクレイピング

Last updated at Posted at 2020-05-07

以下の方の説明がわかりやすかったです。
参考:Pythonによるスクレイピング①入門編|スクレイピング を用いて、データを自動抽出してみよう

ざっくりWebスクレイピングするときの流れがわかりました。
次は複数サイトから情報取得出来るようコードを改変したいと思います。

サイトのHTML取得

import requests
from bs4 import BeautifulSoup
html_doc = requests.get("https://www.yahoo.co.jp/").text # yahooサイトのHTML取得
soup = BeautifulSoup(html_doc, 'html.parser') # BeautifulSoupの初期化
print(soup.prettify())  # HTMLをインデントして見やすくする。

取得したHTMLの加工

# Titleの取得
title = soup.title.text
print(title)

# 参考) 
# Python, Requestsの使い方
# https://note.nkmk.me/python-requests-usage/
# 
# Responseオブジェクト
# url: url属性
# ステータスコード: status_code属性
# エンコーディング: encoding属性
# レスポンスヘッダ: headers属性
# テキスト: text属性
# バイナリデータ: content属性


# Descriptionの取得
meta_description = soup.find('meta', {'name' : 'description'})
description = meta_description['content']
print(description)

# 複数のタグを取得する場合
tags = soup.find_all("a")
print(tags)
## 結果
[<a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" data-ylk="slk:help;pos:0" href="https://www.yahoo-help.jp/">ヘルプ</a>,
 <a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" data-ylk="rsec:header;slk:logo;pos:0" href="https://www.yahoo.co.jp">Yahoo! JAPAN</a>,
 <a aria-label="プレミアムへ遷移する" class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" data-ylk="rsec:header;slk:premium;pos:0" href="https://premium.yahoo.co.jp/"><p class="oLvk9L5Yk-9JOuzi-OHW5"><span class="t_jb9bKlgIcajcRS2hZAP">プレミアム</span><span class="_2Uq6Pw5lfFfxr_OD36xHp6 _3JuM5k4sY_MJiSvJYtVLd_ Y8gFtzzcdGMdFngRO9qFV" style="width:36px;height:38px"></span></p></a>,
 <a aria-label="カードへ遷移する" class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" data-ylk="rsec:header;slk:card;pos:0" href="https://card.yahoo.co.jp/service/redirect/top/"><p class="oLvk9L5Yk-9JOuzi-OHW5"><span class="t_jb9bKlgIcajcRS2hZAP">カード</span><span class="_2Uq6Pw5lfFfxr_OD36xHp6 _3JuM5k4sY_MJiSvJYtVLd_ _1MaEI7rEHB4FpQ1MwfWxIK" style="width:36px;height:38px"></span></p></a>,
 <a aria-label="メールへ遷移する" class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" data-ylk="rsec:header;slk:mail;pos:0" href="https://mail.yahoo.co.jp/"><p class="oLvk9L5Yk-9JOuzi-OHW5"><span class="t_jb9bKlgIcajcRS2hZAP">メール</span><span class="_2Uq6Pw5lfFfxr_OD36xHp6 _3JuM5k4sY_MJiSvJYtVLd_ _3Qi5P0lTFbNkWishPzz8tb" style="width:36px;height:38px"></span></p></a>,
...]

# 取得したaタグのテキストとリンクを取得する
for tag in tags:
 print (tag.string)
 print (tag.get("href"))
## 結果
ヘルプ
https://www.yahoo-help.jp/
Yahoo! JAPAN
https://www.yahoo.co.jp
None
https://premium.yahoo.co.jp/
...

CSVデータに保存

import pandas as pd
from google.colab import files

columns = ["name", "url"]
df = pd.DataFrame(columns=columns)
# 記事名と記事URLをデータフレームに追加
for tag in tags:
 name = tag.string
 url = tag.get("href")
 se = pd.Series([name, url], columns)
 print(se)
 df = df.append(se, columns)
# result.csvという名前でCSVに出力
filename = "result.csv"
df.to_csv(filename, encoding = 'utf-8-sig', index=False)
files.download(filename)

# 参考)
# pandasでcsvファイルの書き出し・追記(to_csv)
# https://note.nkmk.me/python-pandas-to-csv/

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