![見出し画像](https://assets.st-note.com/production/uploads/images/21981387/rectangle_large_type_2_0f87a24fb0de26626aff728a82c6e041.jpg?width=1200)
【Python】note記事のバックアップ|Webスクレイピングツール無料作成|実際のプログラムと使い方説明|Colaboratory
note記事のバックアップのための補正版、こちらになります。
note記事のWebスクレイピングとバックアップを自動で行うためのTIPS。Pythonで機械学習やろうよ!【第6回】です。
お世話になっております。
合同会社ムジンケイカクプロ 代表ムジンです。
note記事のWebスクレイピングをする理由
note記事のリライティングをしたい。
特に記事タイトルと目次!
そのためにnoteの記事タイトル一覧が欲しい!
Webスクレイピングとは?
様々なWebサイトから、情報を抽出・取得する技術です。
Googleの検索エンジンが、あなたのサイトを巡回して情報を取得していくのも、Webスクレイピングといっていいでしょう。(多分)
Webサイトの特定の情報を自動で取得し、一覧化までを助ける技術と、ここでは紹介させていただきます。
Webスクレイピングの注意
Webサイトを巡回するということは、どこかのWebサイトへアクセスします。
何度も同じWebサイトにアクセスすると、悪い悪いハッカーと同じ、迷惑行為をしていることになってしまいます。
Webサイトのデータが掲載されているWebサーバに、高負荷をかけることは、よろしくありません。
悪意あるスクレイピングとスクレイピング対象に受け取られると、よろしくないので怒られます。
↓悪意があると判定されると、こうしなければなりません。
この記事は前回の記事の続きですが、今回だけでも内容はわかります
note記事のWebスクレイピング|実際のプログラミング
from google.colab import drive
drive.mount('/content/drive/')
%cd "drive/My Drive/note_backup"
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import numpy as np
import pandas as pd
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)
import csv
from datetime import datetime
from time import sleep
import os, time
import json
import requests
import math
urllist = []
urllist = ['ここを自分のダッシュボードのURLに']
print(urllist)
#######自分の公開記事は何記事かをpost_numに入れる#######
post_num = 200
post_math = math.ceil(post_num/6)
urllist = []
df_concat = pd.DataFrame(index=[])
for i in range(1,post_math):
url = 'https://note.com/api/v2/creators/mkp_consulting/contents?kind=note&page=' + str(i) + '&disabled_pinned=false'
urllist.append(url)
def DF_MAKE(urllist):
html = ""
options = webdriver.ChromeOptions()
options.add_argument('disable-infobars')
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--window-size=1024,768')
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36"
options.add_argument(user_agent)
driver = webdriver.Chrome(options=options);
driver.implicitly_wait(30)
driver.set_page_load_timeout(30)
j = 0
while j < 9:
try:
driver.get(urllist)
print("The page was loaded")
except TimeoutException:
j = j + 1
print("Timeout, Retrying... (%(j)s/%(max)s)" % {'j': j, 'max': 9})
time.sleep(10)
continue
else:
break
print("-----------------------------------------------------------------")
html = driver.page_source
Tag = driver.find_element_by_tag_name('pre').get_attribute('innerText')
json_dict = json.loads(Tag)
df = pd.DataFrame(json_dict["data"]["contents"])
if df.empty:
return
return df
for i in range(len(urllist)):
sleep(5)
print(i,len(urllist),urllist[i])
df = DF_MAKE(urllist[i])
if df.empty:
break
else:
df_concat = pd.concat([df_concat,df])
df_concat.to_csv('note_list_backup.csv')
print('end')
動くが不完全なので、修正の工数確保中。
不完全な点|記事の総数取得部分を後で修正しよう。
▽修正しました
note記事のWebスクレイピング|準備
▽GoogleDriveにフォルダ作成
GoogleDrive直下にnote_backupというフォルダがないとダメ。
note_backupの中に、このプログラムをColaboratory経由で保存してください。
▽noteダッシュボードのURL
まず自身のnoteダッシュボードのURLを取得しておいてください。
urllist = ['ここを自分のダッシュボードのURLに']
▽ここに自分のnoteダッシュボードのURLを入れます。
urllist = ['https://note.com/mkp_consulting/']
▽note記事の公開記事数を入れる
post_num = 200
Webスクレイピングツールとして有料化したら、この入力をなくそうと思っています。
Webスクレイピングの動作後の結果
GoogleDriveのnote_backupフォルダに、CSVファイルが作成されます。
そのままGoogleスプレッドシートで開けば、記事が一覧になっています。
最後に
ここから更に応用をしていって、スキルシェア業務を拡大していきます。
いつもお読みいただき、ありがとうございます。 書くだけでなく読みたいので、コメント欄で記事名入れてもらうと見に行きます。