Grattage avec Python + PhantomJS

Article associé

environnement

installation npm

Voir l'article suivant Procédure d'installation Npm

Installation de dépendance

$ sudo yum install -y bzip2

Installez PhantomJS

$ npm install --save phantomjs

selenium

$ pip install selenium

nose

$ pip install nose

sample

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import nose.tools as nose

# account
email = 'user'
password = 'password'


#############
# phantomjs
#############
# user agent
user_agent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'
#Chemin du corps PhantomJS
pjs_path = 'node_modules/phantomjs/bin/phantomjs'
dcap = {
    "phantomjs.page.settings.userAgent" : user_agent,
    'marionette' : True
}
driver = webdriver.PhantomJS(executable_path=pjs_path, desired_capabilities=dcap)
#Attendez 5 secondes
wait = WebDriverWait(driver, 5)

#############
# get html
#############
# login page
login_page_url = 'http://127.0.0.1/sign_in'
driver.get(login_page_url)
#Attendez que la page se charge
wait.until(ec.presence_of_all_elements_located)
#Vérifiez l'URL actuelle
nose.eq_('http://127.0.0.1:8080/login', driver.current_url)

#############
# login
#############
# button click
show_signin = driver.find_element_by_id('showSignIn')
show_signin.click()


# email
login_xpath = '//*[@id="user_email"]'
#Attendez que l'élément cible soit visible
wait.until(ec.visibility_of_element_located((By.XPATH, login_xpath)))

#saisie de formulaire par e-mail
login_id_form = driver.find_element_by_xpath(login_xpath)
login_id_form.clear()
login_id_form.send_keys(email)

# password
password_xpath = '//*[@id="user_password"]'
#Attendez que l'élément cible soit visible
wait.until(ec.visibility_of_element_located((By.XPATH, password_xpath)))

#saisie du formulaire de mot de passe
password_form = driver.find_element_by_xpath(password_xpath)
password_form.clear()
password_form.send_keys(password)

# submit
submit_xpath = '//*[@id="new_user"]/div[4]/input'
driver.find_element_by_xpath(submit_xpath).click()


#############
# result
#############
driver.get('http://127.0.0.1/users/edit')
#Attendez que la page se charge
wait.until(ec.presence_of_all_elements_located)
#Vérifiez l'URL actuelle
nose.eq_('http://127.0.0.1:8080/users/edit', driver.current_url)
#Vérifiez les éléments d'affichage à l'écran pour voir si vous êtes connecté
user_email = driver.find_element_by_xpath('//*[@id="user_email"]').get_attribute("value")
nose.eq_(email, user_email)

BeautifulSoap Si vous l'utilisez en combinaison avec BeautifulSoap, vous pouvez facilement analyser le code HTML.

$ pip install beautifulsoup4

Il est également possible d'inclure l'analyseur suivant. Référence: Spécifions explicitement l'analyseur dans Beautiful Soup 4.x

$ pip install html5lib
$ pip install lxml
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import nose.tools as nose
from bs4 import BeautifulSoup

#############
# phantomjs
#############
# user agent
user_agent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'
#Chemin du corps PhantomJS
pjs_path = 'node_modules/phantomjs/bin/phantomjs'
dcap = {
    "phantomjs.page.settings.userAgent" : user_agent,
    'marionette' : True
}
driver = webdriver.PhantomJS(executable_path=pjs_path, desired_capabilities=dcap)
#Attendez 5 secondes
wait = WebDriverWait(driver, 5)

#############
# load page
#############
driver.get('http://127.0.0.1/users/edit')
data = driver.page_source.encode('utf-8')

#############
# parse html
#############
html = BeautifulSoup(data)
print(html)
print(html.title)
print(html.title.string)
print(html.find('h1'))
print(html.find('select',{'id':'hoge'}))

table d'analyse avec des pandas

# -*- coding:utf-8 -*-
import pandas as pd

url = 'http://stocks.finance.yahoo.co.jp/stocks/history/?code=998407.O'
tables = pd.io.html.read_html(url, flavor='bs4')
print(tables[1])

Vous pouvez analyser non seulement à partir de l'url, mais aussi à partir de la source html.

# -*- coding:utf-8 -*-
import pandas as pd

html = '''
<html>
<body>
<table>
<tr><td>sample1</td></tr>
<tr><td>sample2</td></tr>
<tr><td>sample3</td></tr>
<tr><td>sample4</td></tr>
</table>
</body>
</html>
'''

tables = pd.io.html.read_html(html, flavor='bs4')
print(tables[0])

PhantomJS with pandas

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from bs4 import BeautifulSoup
import pandas as pd

#############
# phantomjs
#############
# user agent
user_agent = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36'
#Chemin du corps PhantomJS
pjs_path = 'node_modules/phantomjs/bin/phantomjs'
dcap = {
    "phantomjs.page.settings.userAgent" : user_agent,
    'marionette' : True
}
driver = webdriver.PhantomJS(executable_path=pjs_path, desired_capabilities=dcap)
#Attendez 5 secondes
wait = WebDriverWait(driver, 5)

#############
# load page
#############
driver.get('http://127.0.0.1/users/edit')
data = driver.page_source.encode('utf-8')

# parse
soup = BeautifulSoup(data,'lxml')
table = soup.find_all('table')[0]
df = pd.read_html(str(table))
print(df[0])

référence

Recommended Posts

Grattage avec Python + PhantomJS
Grattage avec Python
Grattage avec Python
Essayez de gratter avec Python.
Grattage avec du sélénium [Python]
Scraping avec Python + PyQuery
Scraping RSS avec Python
J'ai essayé de gratter avec Python
Web scraping avec python + JupyterLab
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
Grattage avec chromedriver en python
Grattage festif avec Python, scrapy
Grattage avec du sélénium en Python
Grattage avec Tor en Python
[Scraping] Scraping Python
Scraping prévisions météorologiques avec python
Grattage avec Selenium + Python Partie 2
J'ai essayé de gratter avec du python
Web scraping débutant avec python
Essayez de gratter avec Python + Beautiful Soup
Scraping avec Node, Ruby et Python
Scraping avec Selenium en Python (Basic)
Grattage avec Python, Selenium et Chromedriver
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Grattage avec Python et belle soupe
Faisons du scraping d'images avec Python
Obtenez les tendances Qiita avec le scraping Python
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Obtenez des informations météorologiques avec Python et le grattage
Mémo de raclage Python
Grattage au sélénium
FizzBuzz en Python3
Scraping Python get_ranker_categories
Grattage au sélénium ~ 2 ~
Statistiques avec python
Python avec Go
Twilio avec Python
Intégrer avec Python
Python racle eBay
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
Grattage avec du sélénium
python commence par ()
Grattage Python get_title
avec syntaxe (Python)
Python: grattage partie 1
Bingo avec python
Zundokokiyoshi avec python
Scraping à l'aide de Python
Excel avec Python
Micro-ordinateur avec Python
Python: grattage, partie 2
Cast avec python
Obtenez des informations sur la propriété en grattant avec python
Grattage WEB avec Python (pour mémo personnel)
Automatisez des tâches simples avec Python Part1 Scraping
Premiers pas avec Python Web Scraping Practice