selenium+PhantomJs爬蟲
阿新 • • 發佈:2018-11-08
需求:urlopen得到的資料不正確,發現是因為介面經過js渲染
,故使用selenium
嘗試一下。
1. 安裝
brew install selenium
brew install phantoms
配合Chrome
使用需要安裝chromedriver
:
- 下載地址 注意驅動版本與瀏覽器版本要對應
- 將下載的可執行檔案(chromedriver) 移動到/usr/bin下
最後,把 phantoms 路徑新增到 bash 中,source一下生效。
export PHANTOMJS_HOME=/usr/local/Cellar/phantomjs/phantomjs-2.1.1-macosx export PATH=$PATH:$PHANTOMJS_HOME/bin
2. 使用selenium
簡單測試一下:
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
獲取網頁內容: driver.page_source
3. selenium+PhantomJs
browser = webdriver.PhantomJS(executable_path="/usr/local/Cellar/phantomjs/phantomjs-2.1.1-macosx/bin/phantomjs") browser.start_session(webdriver.DesiredCapabilities.PHANTOMJS) # 設定超時時間 browser.set_page_load_timeout(50) browser.set_script_timeout(50) browser.get("http://www.baidu.com")
可以通過 browser.find_element_by_class_name
等介面拿到想要的資料。
儲存截圖
browser.save_screenshot("baidu.png")
4. 設定代理
# 利用DesiredCapabilities(代理設定)引數值 proxy = webdriver.Proxy() proxy.proxy_type = ProxyType.MANUAL proxy.http_proxy = ip //ip地址 # 將代理設定新增到 webdriver.DesiredCapabilities.PHANTOMJS 中 proxy.add_to_capabilities(webdriver.DesiredCapabilities.PHANTOMJS)
5. 設定header
desired_capabilities = webdriver.DesiredCapabilities.PHANTOMJS.copy()
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'User-Agent': ' '
}
for key, value in headers.items():
desired_capabilities['phantomjs.page.customHeaders.{}'.format(key)] = value
browser = webdriver.PhantomJS(desired_capabilities=desired_capabilities,executable_path="/usr/local/Cellar/phantomjs/phantomjs-2.1.1-macosx/bin/phantomjs")