J'ai dû gratter des sites avec des éléments dynamiques, donc je n'avais pas d'autre choix que de commencer à apprendre Selenium.
pip install selenium
Étant donné que le navigateur souhaite utiliser Chrome, téléchargez le pilote Chrome et déplacez-le sous l'environnement virtuel. J'ai déménagé dans / bin.
https://sites.google.com/a/chromium.org/chromedriver/downloads
Je vais essayer de voir si cela fonctionne immédiatement. La vérification utilise Yahoo! Comme URL.
test.py
import os
import time
from selenium import webdriver
DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver')
browser = webdriver.Chrome(DRIVER_PATH)
browser.get('https://www.yahoo.co.jp')
try:
elem_1 = browser.find_element_by_class_name('emphasis')
print ('<{}>Découvrir!'.format(elem_1.text))
time.sleep(3)
except:
print ('Non')
(flaskworks) $ python test.py
<PIB année 1.0%Révision à la baisse pour augmenter
Photo incohérente NOUVEAU à la réponse du premier ministre
Témoignage en colère d'un oncle suspect terroriste britannique
Mont Fuji à Gunma?Photo de nom de station trompeuse NOUVEAU
Ancien Idol Bartender Non.1 photo
Tanaka apprend la langue Photo d'excuses du commentateur NOUVEAU
Honda Photo de tabagisme passif immédiatement après le match
Yamazaki Anna Photo qui admet sortir avec Obata NOUVEAU>Découvrir!
Confirmez qu'il fonctionne en toute sécurité. J'essaierai également de tourner les pages.
test.py
import os
import time
from selenium import webdriver
DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver')
browser = webdriver.Chrome(DRIVER_PATH)
browser.get('https://www.yahoo.co.jp')
try:
link_elem = browser.find_element_by_link_text('En savoir plus')
link_elem.click()
text_elem = browser.find_element_by_class_name('ttl')
print (text_elem.text)
time.sleep(3)
except:
print ('Non')
(flaskworks)$ python test.py
La Corée du Nord lance un projectile inconnu
cette? Vous ne pouvez obtenir qu'un seul cas.
link_elem = browser.find_element_by_class_name('list')
Une fois réécrit,
(flaskworks) $ python test.py
La Corée du Nord lance un projectile inconnu
international
6/8(bois) 7:42
Nishikiori vaincu le regret est un tie-break
Des sports
6/8(bois) 5:10
Nishikiori contre la défaite
Des sports
6/8(bois) 2:12
Signes de lancement de missiles balistiques nord-coréens
international
....Omis ci-dessous
Je vois. C'est peut-être plus facile que Beautiful Soup.
C'est juste un ajout grossier de paramètres de page. Après tout, j'ai cliqué sur Suivant, donc ce n'est pas beau comme processus. Je pense qu'il existe un meilleur moyen, mais c'est la limite car ce n'est que le début.
test.py
import os
import time
from selenium import webdriver
DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver')
browser = webdriver.Chrome(DRIVER_PATH)
url = 'https://news.yahoo.co.jp/list/?c=domestic&p='
a = 0
i = 1
while a < 5:
a += 1
try:
browser.get(url)
link_elem = browser.find_element_by_link_text('prochain')
link_elem.click()
text_elem = browser.find_element_by_css_selector('.list')
print (text_elem.text)
time.sleep(3)
i += 1
url = 'https://news.yahoo.co.jp/list/?c=domestic&p=' + str(i)
except:
print ('Non')
Recommended Posts