ã¯ããã«
ãæ¬èšäºã®ç®çã¯ãWebã³ã³ãã³ãåéã®èªååã«èå³ããæ¹ããçæ³çãªã¯ããŒã©ãŒãéçºã§ããããã«ãªãäºã§ãããã®ããã«ãã¯ããŒã©ãŒéçºã®12ã¹ãããã玹ä»ããŸãã
ãã¯ããŒã©ãŒãšã¯ãWebãµã€ããå·¡åããã³ã³ãã³ããèšé²ã»åéããèªåããã°ã©ã ãèšããŸãããã®äžã§ãçæ³çãªã¯ããŒã©ãŒãšã¯ãæ³åŸãå人ã®å«ç芳ã«åŸãã察象Webãµã€ãã®éçšã劚害ããªããã®ã§ãããšç§ã¯èããŠããŸãã
ãçæ³çã§ãªãã¯ããŒã©ãŒã¯ãWebãµã€ãããã¢ã¯ã»ã¹ãæåŠããããããšã©ãŒç»é¢ã«åŒ·å¶é·ç§»ããããããŸãã
ãéå±ãªäœæ¥ã¯ããœã³ã³ã«ãŸããããã©ãã«ã¯åé¿ãã€ã€ãããªãã®å¯åŠåæéãå¢ãããŠãããŸãããã
ãâ»æ¬èšäºã¯å人ã§ã®ã¯ããŒã©ãŒéçºãæ³å®ããŠããŸãã
ãâ»æ¬èšäºã®å
容ã¯ã¯ããŒã©ãŒéçºã»éçšã®ãã©ãã«ã100%é²ãããã®ã§ã¯ãããŸããããèªèº«ã®è²¬ä»»ãšå€æã§ã掻çšãã ãããç¹ã«ãæ³åŸã«é¢ããèšè¿°ã¯ãæ³åŸå®¶ã§ãªãèè
ã®è§£éãå€åã«å«ããã®ã§ãããããåèæ
å ±çšåºŠã®ãèªèã§ãé¡ãããããŸãã責任ãåãããšã¯ã§ããŸããã
ãâ»Pythonã®ç¥èããããšãæ¬èšäºã®çè§£ãé²ã¿ãŸãã
â åèãµã€ãïŒPythonå ¥éãµã€ãïŒ
- ããã°ã©ãã³ã°èšèª Python - python.jp
- AI Academy | Pythonã»æ©æ¢°åŠç¿ã»AIãå®è·µçã«åŠã¹ãããã°ã©ãã³ã°åŠç¿ãµãŒãã¹
- Python3å ¥éç·šã®ã¬ãã¹ã³äžèЧ | ããã°ã©ãã³ã°åŠç¿ãµãŒãã¹ãpaizaã©ãŒãã³ã°ã
01. ã³ã³ãã³ãåéã®ç®çã¯ãå人ãå®¶æéã§äœ¿çšããããWebæ€çŽ¢ãµãŒãã¹ãæäŸããããæ å ±è§£æããããã®ãããããšããã
ãWebã³ã³ãã³ãã¯ããã¹ãŠèª°ãã®èäœç©ãšãªããŸãããã®çºãèäœæš©æ³ã«åŸããã®ãšãªããŸãã
ãèäœæš©æ³ã§ã¯ã次ã®ç®çã¯èäœç©ãèªç±ã«äœ¿ããå ŽåãšãããŠããŸãã
- å人ãå®¶æéã§äœ¿çšããã
- Webæ€çŽ¢ãµãŒãã¹ãæäŸããã
- æ å ±è§£æãããã
â åèãµã€ã
ãç¹ã«åŸè äºã€ã¯ãå¹³æ30å¹Žæ¹æ£èäœæš©æ³ã§é©æ³æ§ãããæç¢ºã«ãªããŸãããããã®å¶çŽãæç¢ºåãããŸããã®ã§ã詳现ãã確èªããã ããã°å¹žãã§ãã
â åèãµã€ã
ããã ãããããã®ç®çã§ãã£ãŠããæ¬¡ã®ç¹ã«ã¯å ±éã§æ³šæããå¿ èŠããããŸãã
02. 察象ã®Webãµã€ãã¯åæ³çãªã³ã³ãã³ããæ²èŒããŠãããã®ã«ããã
ãéæ³ã¢ããããŒããããã³ã³ãã³ããéæ³ãªãã®ãšèªèãã€ã€ããŠã³ããŒãããäºã¯çŠæ¢ãããŸããèäœæš©æ³æ¹æ£ïŒä»€å3幎1æ1æ¥æœè¡ïŒã§ã¯ãã³ã³ãã³ãã®çš®é¡ïŒex.ããã¹ã,ç»å,é³å£°,åç»ïŒã¯åãããŸããã
ãèäœè
ãã³ã³ãã³ãã®æäŸã«åæããŠããWebãµã€ãã察象ãšããäºããåŒ·ãæšå¥šãããŸãã
â åèãµã€ã
03. Webãµã€ãã®äŒå¡åãã³ã³ãã³ãã察象ãšããå Žåã¯ããã®Webãµã€ãã®å©çšèŠçŽã«åŸãã
ãWebãµã€ãã®äŒå¡ãšãªãçºã«å©çšèŠçŽã«åæããå Žåã¯ããã®å©çšèŠçŽãå®ãå¿ èŠããããŸããå©çšèŠçŽã®äžã§ã¯ããŒã©ãŒãçŠããããŠããå Žåã¯ããã®Webãµã€ããã¯ããŒã©ãŒã®å¯Ÿè±¡ãšããäºã¯ã§ããŸããã
04. Webãµã€ãããã¯ããŒã©ãŒãžã®æç€ºããããŠããå Žåã¯ããã®æç€ºã«åŸãã
ãWebãµã€ãã§ã¯ãWebãµã€ãå šäœãŸãã¯æå®ã®WebããŒãžãç¹å®ã®ç»é¢é ç®ã«å¯ŸããŠãã¯ããŒã©ãŒã®åäœãæç€ºããŠããå ŽåããããŸãããã®æç€ºæ¹æ³ãšããŠæ¬¡ã®ãã®ãããããããã«åŸãå¿ èŠããããŸãã
-
Robots.txtâŠâŠWebãµã€ãåäœã®ã¯ããŒã©ãŒå·¡åã«ãŒã«ïŒããã¹ããã¡ã€ã«ïŒ
â Robots.txt ã®ä»æ§  | Google æ€çŽ¢ããããã㌠ã¬ã€ã  | Google Developers -
robotsã¡ã¿ã¿ã°ãdata-nosnippetãX-Robots-TagâŠâŠWebããŒãžåäœã®å·¡åã«ãŒã«ïŒã¬ã¹ãã³ã¹å ã®ããŒã¯ãŒãïŒ
â robots ã¡ã¿ã¿ã°ãdata-nosnippetãX-Robots-Tag ã®ä»æ§  | Google æ€çŽ¢ããããã㌠ã¬ã€ã -
aã¿ã°ã®rel屿§âŠâŠWebããŒãžã®ãã€ããŒãªã³ã¯åäœã§ã®å·¡åã«ãŒã«ãïŒHTMLã¿ã°ã®å±æ§ïŒ
â Google ã«å€éšãªã³ã¯ã®é¢ä¿æ§ãäŒãã - Search Console ãã«ã
05. VPNããããã·ãµãŒãã§æ¥ç¶å IPã¢ãã¬ã¹ãééç¥ãšããäºã¯æšå¥šãããªãã
ãæ¥ç¶å
ã®IPã¢ãã¬ã¹ã¯ãæ¥ç¶å
ã®Webãµã€ãã«èšé²ãããã¢ã¯ã»ã¹é®æã身å
ã®ç¹å®ã§äœ¿çšãããå¯èœæ§ããããŸãããããåé¿ããããã«ãVPNããããã·ãµãŒãïŒæ¥ç¶å
ããæ¥ç¶å
ã®éã«ä»²ä»è
ãæããµãŒãã¹ïŒã䜿çšããæ¥ç¶å
ã®IPã¢ãã¬ã¹ãééç¥ãšããäºãã§ããŸããïŒæ£ç¢ºã«ã¯ä»²ä»è
ã®IPã¢ãã¬ã¹ãæ¥ç¶å
ã«éç¥ãããïŒ
ãããããWebãµã€ãã«ãã£ãŠã¯VPNããããã·ãµãŒãããã®ã¢ã¯ã»ã¹ã鮿ãããäºããããŸãããŸãã仲ä»è
ã«ãã¹ãŠã®éä¿¡ãèšãã®ã§ãä¿¡é Œã§ããªããµãŒãã¹ãå©çšãããšãæ
å ±æµåºã«ç¹ããå±éºæ§ããããŸãããããŠãWebãµã€ãåŽã§ã¯IPã¢ãã¬ã¹ã§ã®ã¢ã¯ã»ã¹é®æãã§ããªããªããããããäžäœã®å¯Ÿçãè¡ãããå¯èœæ§ãé«ãŸããŸãã
06. ãã©ãŠã¶ã®èªåæäœããŒã«ã Seleniumããã¯ããŒã©ãŒãšããŠæµçšããã
ãããããã¯å
·äœçãªã¯ããŒã©ãŒéçºã«ã€ããŠã§ãã
ãWebãµã€ãã®å€ãã¯æ
å ±ã衚瀺ããããŸã§ã«ãJavascriptã§ã®åŠçãåæãšããŠããŸãããã®åŠçåŸã®æ
å ±ãåŸãçºã«ããã©ãŠã¶ïŒæ£ç¢ºã«ã¯ã¬ã³ããªã³ã°ãšã³ãžã³ïŒã«åŠçããããŸãããã®çºã«ããã©ãŠã¶ã®èªåæäœããŒã«ã Seleniumããã¯ããŒã©ãŒãšããŠæµçšããäºãæšå¥šãããŸããSeleniumã®ã€ã³ã¹ããŒã«æé ãåºæ¬æäœã¯ãäžèšã®ãµã€ãã倧å€åèã«ãªããŸããã
ãèè ã¯æäœå¯Ÿè±¡ã®ãã©ãŠã¶ãFirefoxãšããŠããŸãããç¹ã«GoogleChromeã§ããMicrosoftEdgeã§ããã奜ããªãã®ãã䜿ãäžãããæ¬èšäºã§ã¯Firefoxåæã§èª¬æããŠãããŸãã
Firefoxã®ããŠã³ããŒãããŒãž
Firefoxã®WebDriverã®ããŠã³ããŒãããŒãž
ãâ»ã䜿çšã®OSã察象ã®ãã®ãããŠã³ããŒãããŸãã
ãããã¯ã°ã©ãŠã³ãã§åŠçãè¡ãããäºïŒãããã¬ã¹èšå®ïŒãã§ããŸãããã¯ããã®ãã¡ã¯ç»é¢ã衚瀺ããŠããäºãæšå¥šãããŸããç»é¢é·ç§»ã§å€±æããäºãããã°ãæå®ããç»é¢é ç®ãååŸã§ããªãäºããããŸãããŸããWebãµã€ãããªãã¥ãŒã¢ã«ãããäºã§ãå šé¢æ¹ä¿®ãå¿ èŠã«ãªãããšããããŸãã
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# ãªãã·ã§ã³ã®èšå®
options = Options()
# options.set_headless() # ç»é¢é衚瀺ã«ãããå Žåã¯ã³ã¡ã³ããã¯ããã
# ãã©ãŠã¶ã®èµ·å
driver = webdriver.Firefox(executable_path='Firefoxã®WebDriverã®ãã¹ïŒex.~/geckodriverïŒ', options=options)
# åŸ
æ©æéã®èšå®
driver.implicitly_wait(5) # ç»é¢é
ç®ã衚瀺ããããŸã§ã®æå€§åŸ
æ©ç§
driver.set_page_load_timeout(180) # ç»é¢è¡šç€ºãŸã§ã®æå€§åŸ
æ©ç§
07. 察象WebãµãŒãã¹ã®ã¯ãããŒãããç¶æ ã§ã¢ã¯ã»ã¹ããã
ã倧æµã®WebãµãŒãã¹ã¯å蚪åè
ã®ãã©ãŠã¶ã«ã¯ãããŒãçºè¡ãããã®ã¯ãããŒã§èšªåè
ã®ç®¡çãããŠããŸãããããŠã倧æµã®ã¯ããŒã©ãŒã¯åæèšªåïŒã¯ãããŒãªãïŒã®ç¶æ
ã§ã¢ã¯ã»ã¹ããŸãã®ã§ãã¯ãããŒãããã ãã§äžè¬ãŠãŒã¶ãšããŠæ±ã£ãŠããããå¯èœæ§ãé«ãŸããŸãã
ããã©ãŠã¶ã§æ°ããªãããã¡ã€ã«ïŒãã©ãŠã¶ã®ãŠãŒã¶æ
å ±ïŒãäœæãã察象ã®Webãµã€ãã«æåã§ã¢ã¯ã»ã¹ããŠãããŸãã
ããã®åŸã«ãå
ã®ãããã¡ã€ã«ã®ãã¹ãSeleniumã«ãŠæå®ããäºã§ãå蚪åïŒã¯ãããŒããïŒã®ç¶æ
ã§ã¯ããŒã©ãŒãåãããŸããFirefoxã®ãããã¡ã€ã«ã¯æ¬¡ã®å Žæã«ãã©ã«ãã§ä¿ç®¡ããããããããã¡ã€ã«ãè€æ°ããå Žåã¯æŽæ°æ¥æã§æ°èŠäœæãããã®ã倿ã§ããŸãã
C:/Users/ãŠãŒã¶å/AppData/Roaming/Mozilla/Firefox/Profiles/
# ãã©ãŠã¶ã®èµ·å
profiler = webdriver.FirefoxProfile('Firefoxãããã¡ã€ã«ã®ãã¹ïŒex.~/Firefox/Profiles/FOLDER-NAME)')
driver = webdriver.Firefox(executable_path='Firefoxã®WebDriverã®ãã¹', options=options, firefox_profile=profiler)
08. åäžãµã€ãã®ä»»æã®å¥ããŒãžãžã®é·ç§»ã¯ããã€ããŒãªã³ã¯ã®URLãæžãæããŠã¯ãªãã¯ããäºã§è¡ãã
ãSeleniumã«ã¯ç»é¢é·ç§»çšã®ã³ãã³ããçšæãããŠããã察象ã®Webãµã€ãã«é·ç§»ããéã¯æ¬¡ã®ã³ãã³ãã䜿çšããŸãããã®ã³ãã³ãã¯ããã©ãŠã¶ã®URLæ¬ã«URLãçŽæ¥å ¥åããç»é¢é·ç§»ããåããšåãã«ãªããŸãã
driver.get('ä»»æã®URL')
ãåäžãµã€ãå ã®ç§»åã¯ããã€ããŒãªã³ã¯ããã¿ã³ãã¯ãªãã¯ããéåžžã®æäœãæš¡å£ããã³ãã³ãã§è¡ããŸãã
# ãã€ããŒãªã³ã¯ãååŸ
link = driver.find_element_by_css_selector('CSSã»ã¬ã¯ã¿ãŒ')
# å
ã®é
ç®ãã¯ãªãã¯
link.click()
ããã ããåäžãµã€ãå
ã§ãä»»æã®ããŒãžã«é·ç§»ãããäºããããŸããïŒex. ååAã®è©³çްç»é¢ããã³ã³ãã³ããååŸããåŸã«ããã®é¢é£ååãšããŠååBã®ãªã³ã¯ãæç€ºãããäºã«ããŠãååBã®è©³çްç»é¢ã«é·ç§»ããïŒ
ããã®éã«ã¯ããã€ããŒãªã³ã¯ããã¿ã³ã§ã®é·ç§»å
URLãJavascriptã§æžãæãããã®é
ç®ãã¯ãªãã¯ããäºã§é·ç§»ããŸãã
# ãã€ããŒãªã³ã¯ãååŸ
link = driver.find_element_by_css_selector('CSSã»ã¬ã¯ã¿ãŒ')
# å
ã®é
ç®ãç»é¢å
ã«èŠããäœçœ®ãŸã§ã¹ã¯ããŒã«
driver.execute_script("arguments[0].scrollIntoView()", link)
# å
ã®é
ç®ã®é·ç§»å
URLãä»»æã®ãã®ã«æžãæã
driver.execute_script("arguments[0].setAttribute('href','{}')".format('ä»»æã®URL'), link)
# å
ã®é
ç®ãã¯ãªãã¯
link.click()
ãããã¯åäžãµã€ãå ã®é·ç§»ã§ããã«ãé¢ããããURLæ¬ã«çŽæ¥URLãå ¥åããŠé·ç§»ãããããªäžèªç¶ãªåäœãé¿ããããã®ãã®ã§ããæè¡çã«èšãã°ãåäžãã¡ã€ã³ã®ãªãã¡ã©ãŒïŒç»é¢é·ç§»å URLïŒãèšå®ãããŠããç¶æ ã§ãJavascriptã®ã¯ãªãã¯ã€ãã³ããèµ·ãããªããé·ç§»ããäºãç®çãšããŠããŸãã
09. ç»é¢é·ç§»åŸã¯ãã©ã³ãã ç§åŸ æ©ããã
ãç»é¢é·ç§»åŸã«ã¯ãã©ã³ãã ç§åŸ
æ©ããåŠçãå
¥ããŸãã
ãããã¯ãWebãµã€ããžã®è² è·ã軜æžããããã®ãã®ã§ããããŸãããç»é¢é·ç§»ã®ãã©ãã«ãé²ãããã®ãã®ã§ããããŸããç»é¢é·ç§»åŸã®åŸ
æ©æéã«ãã£ãŠã¯ãJavascriptã§ã®åŠçåã«æäœããçºã«ãæ£åžžã«ç»é¢é·ç§»ã§ããªãã£ããšãããã©ãã«ããããŸããããã®åŸ
æ©æéã¯ãWebãµã€ãã«ãã£ãŠå€æŽããã®ãè¯ããšæããŸãã
from time import sleep
import random
def get_wait_secs():
"""ç»é¢ã®åŸ
æ©ç§æ°ã®ååŸ"""
max_wait = 7.0 #æå€§åŸ
æ©ç§
min_wait = 3.0 #æå°åŸ
æ©ç§
mean_wait = 5.0 #å¹³ååŸ
æ©ç§
sigma_wait = 1.0 #æšæºåå·®ïŒãã¬å¹
ïŒ
return min([max_wait, max([min_wait, round(random.normalvariate(mean_wait, sigma_wait))])])
sleep(get_wait_secs())
10. ãã¡ã€ã«ãããŠã³ããŒãããéã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ããšãªãã¡ã©ãŒããªã¯ãšã¹ãã«ä»ããã
ããã¡ã€ã«ãç¹ã«ç»åãã¡ã€ã«ã®ããŠã³ããŒãã¯ãçŽãªã³ã¯ãç¡ç§©åºãªããŠã³ããŒããé¿ããããã«ãäžèšã®å¶çŽãèšå®ãããŠããäºããããŸããéåžžã®ãã©ãŠã¶æäœã§ã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ãïŒæ¥ç¶å ã®OSããã©ãŠã¶çã®æ å ±ïŒãšãªãã¡ã©ãŒïŒç»é¢é·ç§»å URLïŒã¯èªåã§èšå®ãããŸãã
import requests
import shutil
img = driver.find_element_by_css_selector('imgã¿ã°ãžã®CSSã»ã¬ã¯ã¿ãŒ')
src = img.get_attribute('src')
r = requests.get(src, stream=True, headers={'User-Agent':'ãŠãŒã¶ãŒãšãŒãžã§ã³ã' , 'Referer':driver.current_url})
if r.status_code == 200:
with open('ç»é¢ä¿åå
ã®ãã¹', 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
11. ã¯ããŒã©ãŒã®èµ·åæéã¯äžå®æã«ããããŸããäžåã®èµ·åæéã¯æ°æéçšåºŠã«ããã
ãã¯ããŒã©ãŒã®èµ·åã¯ãæäœæ¥ã§ãè¯ãã§ããã宿çã«äºçŽèµ·åãããäºãã§ããŸããOSã«ãã£ãŠå€ãããŸãããæ¬¡ã®ããŒã«ãæšæºã§çšæãããŠããŸãã
-
Windows - ã¿ã¹ã¯ã¹ã±ãžã¥ãŒã©
ãWindows 10察å¿ãã¿ã¹ã¯ã¹ã±ãžã¥ãŒã©ã§å®æçãªäœæ¥ãèªååãã (1/2)ïŒTech TIPS - ïŒ IT -
MacOS/Linux - cron
cron ã®èšå®ã¬ã€ã
ããã ãæ£ç¢ºã«åãæéã§Webãµã€ããžã¢ã¯ã»ã¹ãç¶ãããšããã®æéã«Webãµã€ãã®è² è·ãéäžããŠããŸããããããçšåºŠã¢ã¯ã»ã¹æéã«ãã¬å¹ ãçšæããäºãæšå¥šãããŸãããã®ææ®µãšããŠã¯ãäºçŽèµ·åããåŸã«ã08ã®æé ãšåæ§ã®æé ã§ã©ã³ãã ãªæé忢ãããæ¹æ³ããããŸãã
ããŸããæ°æéãè¶ ããã¢ã¯ã»ã¹ãåæ§ã§ãããããããçšåºŠã¢ã¯ã»ã¹ãç¶ãããã¯ããŒã©ãŒãæ¢ããåŠçãå ¥ããäºãæšå¥šãããŸãã
12. ããªãã®å«ç芳ã§ã¯ããŒã©ãŒã®éçšã«ãŒã«ã远å ããã
ãäžèšä»¥å€ã§ãã察象Webãµã€ãã®éçšã劚害ããªãéçšã«ãŒã«ãèŠã€ãããããããå°å ¥ããŠãããŸããWebãµã€ããå©çšãããŠããã£ãŠããããšã«æè¬ããããŸãã
ïŒ2020幎9æ6æ¥ çŸåšïŒ