見出し画像

【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サーバに、高負荷をかけることは、よろしくありません。

悪意あるスクレイピングとスクレイピング対象に受け取られると、よろしくないので怒られます。

↓悪意があると判定されると、こうしなければなりません。

画像1

この記事は前回の記事の続きですが、今回だけでも内容はわかります

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')

動くが不完全なので、修正の工数確保中。

画像2

不完全な点|記事の総数取得部分を後で修正しよう。

▽修正しました

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スプレッドシートで開けば、記事が一覧になっています。

最後に

ここから更に応用をしていって、スキルシェア業務を拡大していきます。


いつもお読みいただき、ありがとうございます。 書くだけでなく読みたいので、コメント欄で記事名入れてもらうと見に行きます。