読者です 読者をやめる 読者になる 読者になる

サーバーにphantomjsをおいてスクレイピングを動かしたい時

サーバーにphantomjsを置くなら、npmからインストールするのがおすすめ

sudo yum install epel-release
sudo yum install nodejs npm

でnpmをインストールして

npm install phantomjs

でphantomjsをインストールする。
node_modulesというフォルダができてその中にphantomjsがインストールされるのでそこにパスを張る。
実際のインスコ先は
node_modules/phantomjs/bin/phantomjs
になる。

from selenium import webdriver
import time
from bs4 import BeautifulSoup

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 "
    "(KHTML, like Gecko) Chrome/15.0.87"
)

driver = webdriver.PhantomJS("/home/user/app/node_modules/phantomjs/bin/phantomjs", desired_capabilities=dcap)

url="http://yahoo.co.jp" #yahooは単なるたとえ
driver.get(url)

#スクリーンショットのとり方
driver.save_screenshot("./screen_shot_1.png")

# javascriptのレンダリングを確実に待つ、読み込み待機 time.sleep(5)とか使ってもいいけど、下記の方が確実でいい。
#例外処理をちゃんと書くともっと良い
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "articleList")))

#BeautifulSoupで欲しい部分を
soup = BeautifulSoup(driver.page_source,'html.parser')

#h2要素でclassがarticleList__titleのものを引っ張ってくる。
h2_element = soup.find_all("h2", class_="articleList__title")

#h2要素内からa要素を探してきて、href(リンク)とaタグに囲まれている文字列を抜き出す。
for article in h2_element:
        print(article.find("a").get("href"))
   print(article.find("a").string)