selenium和PhantomJS爬取動態網頁
一、selenium和PhantomJS用法簡介
selenium是web的自動化測試工具,類似按鍵精靈,可以直接執行在瀏覽器上。
pip install selenium
PhantomJS是基於webkit的無介面瀏覽器,使用時,無需輸入header等。
需要從 phantomjs.org處下載,再將bin目錄新增到環境變數path中。
1.1 基本使用流程
"""基本流程""" from selenium import webdriver #要想呼叫鍵盤操作需要引入keys包 from selenium.webdriver.common.keys import Keys #呼叫環境變數指定的PhantomJS瀏覽器建立瀏覽器物件 driver = webdriver.PhantomJS() #如果沒有在環境變數指定PhantomJS位置 #driver = webdriver.PhantomJS(executable_path="F:\phantomjs\phantomjs-2.1.1-windows\bin") #get方法會一直等到頁面被完全載入,然後才會繼續程式 #通常測試會在這裡選擇time.sleep(2) driver.get("http://www.baidu.com") '''具體的操作,仿人為上網''' #關閉當前網頁,如果只有一個頁面,會關閉瀏覽器 #driver.close() #關閉瀏覽器 driver.quit()
1.2 網頁資訊顯示
"""網頁資訊"""
#列印頁面標題“百度一下,你就知道”
str_ = driver.title
#獲取當前網頁的原始碼
str_html = driver.page_source
#獲取當前網頁的cookie
cookies = driver.get_cookies()
cookies['name']
cookies['value']
#獲取當前網頁的url
str_ = driver.current_url
1.3 鍵盤操作
"""鍵盤操作""" #要想呼叫鍵盤操作需要引入keys包 from selenium.webdriver.common.keys import Keys #獲取頁面名為wrapper的id標籤的文字內容 data = driver.find_element_by_id("wrapper").text #除了by_id之外,還有by_name, by_xpath, by_class_name等 #其中,element選取的是一個,elements選出的是全部。 #這個類似bs4 #生成當前頁面的快照並儲存 driver.save_screenshot("baidu.png") #id="su"是百度搜索按鈕,click()是模擬點選 driver.find_element_by_id("su").click() #click之後需要等待幾秒,等待網頁響應。 time.sleep(2) driver.save_screenshot("click.png") #id="kw"是百度搜索輸入框,輸入字串“長城” driver.find_element_by_id("kw").send_keys(u"長城") driver.save_screenshot("input.png") #ctrl+a全選輸入框 driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a') #模擬ENTER回車鍵 driver.find_element_by_id("kw").send_keys(Keys.RETURN) #清空輸入框 driver.find_element_by_id("kw").clear()
1.4 滑鼠操作
"""滑鼠操作""" #匯入類 from selenium.webdriver import ActionChains #滑鼠移動到某個位置 ac = driver.find_element_by_xpath('element') ActionChains(driver).move_to_element(ac).perform() #單擊,(操作滑鼠,移到某處,點選,顯示效果) ac = driver.find_element_by_xpath('element') ActionChains(driver).move_to_element(ac).click(ac).perform() #或者可以driver.find_element_by_xpath('element').click() #雙擊 ac = driver.find_element_by_xpath('element') ActionChains(driver).move_to_element(ac).double_click(ac).perform() #右擊 ac = driver.find_element_by_xpath('element') ActionChains(driver).move_to_element(ac).context_click(ac).perform()
1.5 其他操作
"""執行JavaScript語句"""
js='document.body.scrollTop=10000'#向下滾動10000畫素
driver.execute_script(js)
二、示例:鬥魚房間人數爬取
# -*- coding:utf-8 -*-
import unittest
from selenium import webdriver
from lxml import etree
class douyu(unittest.TestCase):
# 初始化方法,必須是setUp()
def setUp(self):
self.driver = webdriver.PhantomJS()
self.num = 0
self.count = 0
# 測試方法必須有test字樣開頭
def testDouyu(self):
self.driver.get("https://www.douyu.com/directory/all")
while True:
content = etree.HTML(self.driver.page_source)
# 房間名, 返回列表
names = content.xpath('//h3[@class="ellipsis"]')
# 觀眾人數, 返回列表
numbers = content.xpath('//span[@class="dy-num fr"]')
# zip(names, numbers) 將name和number這兩個列表合併為一個元組 : [(1, 2), (3, 4)...]
for name, number in zip(names, numbers):
print( u"觀眾人數: -" + number.text.strip() + u"-\t房間名: " + name.text.strip())
self.num += 1
# 如果在頁面原始碼裡找到"下一頁"為隱藏的標籤,就退出迴圈
if self.driver.page_source.find("shark-pager-disable-next") != -1:
break
# 一直點選下一頁
self.driver.find_element_by_class_name("shark-pager-next").click()
# 測試結束執行的方法
def tearDown(self):
# 退出PhantomJS()瀏覽器
print( "當前網站直播人數" + str(self.num))
print( "當前網站觀眾人數" + str(self.count))
self.driver.quit()
if __name__ == "__main__":
# 啟動測試模組
unittest.main()
相關推薦
[Python爬蟲]Scrapy配合Selenium和PhantomJS爬取動態網頁
Python世界中Scrapy一直是爬蟲的一個較為成熟的解決方案,目前javascript在網頁中應用越來越廣泛,越來越多的網站選擇使用javascript動態的生成網頁的內容,使得很多純html的爬蟲解決方案失效。針對這種動態網站的爬取,目前也有很多解決方案。
selenium和PhantomJS爬取動態網頁
一、selenium和PhantomJS用法簡介 selenium是web的自動化測試工具,類似按鍵精靈,可以直接執行在瀏覽器上。 pip install selenium PhantomJS是基於
爬取動態網頁:Selenium
如何 瀏覽器 要去 nbsp ges selenium 安全性 接口 比較 參考:http://blog.csdn.net/wgyscsf/article/details/53454910 概述 在爬蟲過程中,一般情況下都是直接解析html源碼進行分析解析即可。但是
Python3+Selenium爬取動態網頁資料
背景: 有時候想獲取網頁的資訊,然後下載裡面的圖片資料等等 遇到的問題: 有時一些網頁是動態的,一些內容是通過js非同步拉取,甚至拉取時間是懶載入的,例如滾動到元素位置的時候才載入 解決方案: 這個時候就需要Selenium神器了 Selenium 是什麼?一句話
Python使用selenium爬取動態網頁時遇到的問題
我們在做京東手機資訊的爬取時,遇到的一些問題,現在就來跟大家分享一下。 1.首先,京東的網頁是動態的,當我們搜尋一個商品時,需要把頁面往下翻,下面的內容才會出來,這也是我們選selenium方法的原因 解決方法:讓瀏覽器模擬下拉幾次頁面即可 from selen
使用Selenium爬取動態網頁
使用selenium優點:所見既所得 通過page_source屬性可以獲得網頁原始碼 selenium可以驅動瀏覽器完成各種操作,如填充表單、模擬點選等。 獲取單個節點的方法: find_element_by_id find_element_by_na
使用selenium結合PhantomJS爬取淘寶美食並存儲到MongoDB
cnblogs exc cte ota browser -- pre command out PhantomJS是一種沒有界面的瀏覽器,便於爬蟲 1、PhantomJS下載 2、phantomjs無須安裝driver,還有具體的api參考: http://phantomj
爬取動態網頁中關於構造瀏覽器頭的註意事項
rand 服務器 mage 地址 span gzip 原來 動態網頁 ati 在原來爬取動態網頁圖片中,獲取到了圖片的實際地址,但是下載下來的圖片是損壞的,究其原因,是服務器端阻止了訪問,但是觀察發現 headers = {‘User-Agent‘: random.cho
網路爬蟲:爬取動態網頁
import requests from bs4 import BeautifulSoup res = requests.get('http://news.sina.com.cn/c/nd/2017-06-12/doc-ifyfzhac1650783.shtml') res.encoding = '
python 爬取動態網頁(百度圖片)
# python 3.6.3 import re import os from urllib import parse from urllib import request ################################################### # 搜尋關鍵字
python 使用selenium和requests爬取頁面資料
目的:獲取某網站某使用者下市場大於1000秒的視訊資訊 1.本想通過介面獲得結果,但是使用post傳送資訊到介面,提示服務端錯誤。 2.通過requests獲取頁面結果,使用html解析工具,發現麻煩而且得不到想要的結果 3.直接通過selenium獲取控制元件的屬性資訊,如圖片、視訊地址,再對時間進行篩選
python 使用selenium和requests爬取頁面數據
ret pre tex 爬取 test user 發現 rom request 目的:獲取某網站某用戶下市場大於1000秒的視頻信息 1.本想通過接口獲得結果,但是使用post發送信息到接口,提示服務端錯誤。 2.通過requests獲取頁面結果,使用html解析工具,發現
R語言爬取動態網頁之環境準備
在R實現pm2.5地圖資料展示文章中,使用rvest包實現了靜態頁面的資料抓取,然而rvest只能抓取靜態網頁,而諸如ajax非同步載入的動態網頁結構無能為力。在R語言中,爬取這類網頁可以使用RSelenium包和Rwebdriver包。 RSelenium包和Rwebdriver包都是
Python3網路爬蟲:Scrapy入門實戰之爬取動態網頁圖片
Python版本: python3.+ 執行環境: Mac OS IDE: pycharm 一 前言 二 Scrapy相關方法介紹 1 搭建Scrapy專案 2 shell分析 三 網頁分析
Python3網路爬蟲:requests爬取動態網頁內容
本文為學習筆記 學習博主:http://blog.csdn.net/c406495762 Python版本:python3.+ 執行環境:OSX IDE:pycharm 一、工具準備 抓包工具:在OSX下,我使用的是Charles4.0 下載連結以及安裝教
Python如何爬取動態網頁資料
1.引言 說到爬網頁,我們一般的操作是先檢視原始碼或者審查元素,找到資訊所在節點,然後用 beautifulsoup/xpth/re 來獲取資料,這是我們對付靜態網頁的常用手段。 但大家也知
一起學爬蟲 Node.js 爬蟲篇(三)使用 PhantomJS 爬取動態頁面
今天我們來學習如何使用 PhantomJS 來抓取動態網頁,至於 PhantomJS 是啥啊什麼的,看這裡 我們這裡就不再討論 PhantomJS 的入門基礎了。下面正題 1.我們先準備,開啟瀏覽器,輸入網址 http://news.163
nodejs 爬取動態網頁
前言 準備工作 建立工程 後記 前言 昨天實現了草榴的爬取 nodejs 做一個簡單的爬蟲爬草榴,今天對程式碼做了一部分修改,增加了可以指定開始頁和結束頁,並且給所有檔案都單獨建立了資料夾。那麼問題來了,說好的爬 街拍圖
python爬取動態網頁
還記得在之前一篇python開發電影查詢系統(一)—python實現後臺資料中,對電影的下載地址無法進行爬取,原因是下載地址在網頁原始碼中無法檢視,而是存放在js中,動態載入了。所以在爬取時,我在文章中寫道 現在,我們找到了攻破他反爬的方法。下面我來詳細介
爬蟲爬取動態網頁下載美女圖片
scrapy爬取動態網頁下載圖片 靜態頁面練習了後,我們開始來爬取動態頁面,為了滿足廣大程式猿的需求,在這裡就選擇360圖片吧,網址是image.so.com。希望大家學會後身體一天不如一天。 首先我們來分析這個網頁,開啟開發者工具,滑動頁面等加載出新的圖片