本記事では、PythonでRPA(Robotic Process Automation)を行う実施例を載せました。はてなブログ記事をサイトマップ「sitemap.xml」から、全自動で保存する雛形コードで動作例は次の動画です。
www.youtube.com
手法は、前提としてChromeブラウザを使用します。そして、ChromeDriverのダウンロードと使用手順と注意点は下記を参考下さい。
Python webスクレイピング/①google NEWSトップページ/②googleニュース検索エンジン/③画像 - PythonとVBAで世の中を便利にする
その他に必要なライブラリ「」,「」,「」,「」4つのインストール方法は下記です。
conda install -c anaconda lxml
conda install -c conda-forge selenium
conda install -c conda-forge pyautogui
conda install -c conda-forge pyperclip
■本プログラム
特記事項は、所々でtime.sleep()で時間稼ぎをしていることです。極力サーバーに負荷を掛けないことと、処理遅延が起きた場合に備えるためです。
import os, sys
import requests
import xml.dom.minidom
import xml.etree.ElementTree as ET
from selenium import webdriver
import pyautogui
import pyperclip
import time
def get_url(myurl, target_str, file_name):
res = requests.get(myurl)
with open(file_name + '.xml', mode='w') as f:
f.write(res.text)
dom = xml.dom.minidom.parse(file_name + '.xml')
xml_string = dom.toprettyxml()
print(xml_string)
root = ET.fromstring(xml_string)
url_list = []
for i, child in enumerate(root):
url = root[i][0].text
url_list.append(url)
url_list2 = [myurl for myurl in url_list if target_str in myurl]
return url_list2
def save_html(options, myurl):
driver = webdriver.Chrome('chromedriver.exe', chrome_options=options)
driver.set_window_size(1024,768)
driver.set_window_position(0,0)
driver.get(myurl)
time.sleep(5)
pyautogui.hotkey('ctrl', 's')
time.sleep(1)
pyautogui.hotkey('Home')
time.sleep(1)
pyperclip.copy(os.getcwd())
pyautogui.hotkey('ctrl', 'v')
time.sleep(1)
pyautogui.typewrite('\\')
pyautogui.hotkey('tab')
if save_file_type == 'mhtml':
time.sleep(1)
pyautogui.press("down")
time.sleep(1)
pyautogui.press("up")
pyautogui.press("up")
pyautogui.press("down")
time.sleep(1)
pyautogui.hotkey('enter')
time.sleep(1)
pyautogui.hotkey('tab')
pyautogui.hotkey('enter')
time.sleep(6)
driver.close()
def main():
URL_list = get_url(URL, 'month', 'sitemap')
for n, myurl in enumerate(URL_list):
get_url_list = get_url(myurl, 'entry', str(n))
print(get_url_list)
options = webdriver.ChromeOptions()
options.add_experimental_option("prefs", {
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": True
})
for myurl_sub in get_url_list:
print(myurl_sub)
save_html(options, myurl_sub)
sys.exit()
if __name__ == '__main__':
URL = 'https://hk29.hatenablog.jp/sitemap.xml'
save_file_type = 'mhtml'
main()
●参考リンク
xml.etree.ElementTree --- ElementTree XML API — Python 3.8.3rc1 ドキュメント
4. 要素を見つける — Selenium Python Bindings 2 ドキュメント
python - python / seleniumを使用して完全なWebページ(CSS、画像を含む)を保存する - ITツールウェブ
Python 3.x - pyautoguiを用いて「:」の入力をしたいです。|teratail
以上
<広告>
リンク