python-selenium的介紹及定位元素方法

selenium 是一種爬取資料的一種插件、方法 ,其功能很強大,它的功能是真的自動開啟瀏覽器來執行動作,就好像是被遠端遙控一樣。 我認為算是比較穩定、比較不會出錯的爬蟲方法。以下我將介紹如何安裝這個套件以及地位元素的方法。

python-selenium的介紹及定位元素方法
PYTHON

python-selenium的介紹及定位元素方法

(一)selenium的介紹與安裝

selenium 是一種爬取資料的一種插件、方法 ,其功能很強大,它的功能是真的自動開啟瀏覽器來執行動作,就好像是被遠端遙控一樣。
我認為算是比較穩定、比較不會出錯的爬蟲方法。以下我將介紹如何安裝這個套件以及地位元素的方法。

這套插件要如何安裝呢?
首先在python程式下輸入:

pip install selenium

只安裝這個插件是無法使用的,還必須另外下載selenium驅動程式。

第二步是到 selenium官網,畫面往下移到約莫中間的地方,有個Browsers。

往下滑到有Browsers的地方

這個意思是要驅動哪一個瀏覽器來進行程式,一般比較常見的驅動程式是選用Firefox和Chrome的,我本身比較習慣使用Chrome,擇其一下載就好囉。

驅動程式有很多,不過一般大多數人都選擇Firefox或Chorme

這個意思是要驅動哪一個瀏覽器來進行程式,一般比較常見的驅動程式是選用Firefox和Chrome的,我本身比較習慣使用Chrome,擇其一下載就好囉。
以Chrome為例,點擊網站進去,會要選擇下載哪一個版本,這時請檢查一下自己的Chrome的版本是什麼。

查詢Chrome版本的方法為右上角…  →設定→跳出一個畫面後,在左欄的最下方-關於Chrome就有囉!
接著就可以開始安心下載了。
下載的位置請幫到簡單的位置就好,比如D:\geckodriver 下

(二)selenium語法使用

我先以簡單的程式碼當例子講解:

#驅動瀏覽器
from selenium import webdriver
driverpath = 'D:\geckodriver\chromedriver.exe'
browser = webdriver.Chrome(executable_path=driverpath)

其中driverpath就是你放置驅動程式的路徑及檔案,如果讀者是放在其他地方,請自行修改。
執行程式後,如果有跳出一個空的chrome瀏覽器代表你成功了。

接下來想要連上某個網站的話…
程式碼如下:

#連上網站
from selenium import webdriver
driverpath = 'D:\geckodriver\chromedriver.exe'
browser = webdriver.Chrome(executable_path=driverpath)
url = 'https://tw.yahoo.com/'
browser.implicitly_wait(5)
browser.get(url)

這裡多出了browser.implicitly_wait(5)是因為,瀏覽器開啟時需要一些時間,必須等到瀏覽器開好,才有辦法去get網站,如果沒有等待5秒(或是更少、可自行決定)的話,程式將會出錯。
輸出結果就是跳出的瀏覽器自動可以連上yahoo的網站囉。
接下來就是尋找元素的方法了。

(三)selenium搜尋元素的方法介紹

找元素的方法有:
find_element_by_id('名稱')
find_element_by_class_name('名稱')
find_element_by_ name('名稱')
find_element_by_ css_selector('名稱')
find_element_by_partial_link_text('名稱')
find_element_by_link_text('名稱')
find_element_by_tag_name('名稱')
注意,以上都是只找"第一個"符合的內容就會停止搜尋了。
如果要找全部符合內容的話,就如下:
find_elements_by_id('名稱')
find_elements_by_class_name('名稱')
find_elements_by_ name('名稱')
find_elements_by_ css_selector('名稱')
find_elements_by_partial_link_text('名稱')
find_elements_by_link_text('名稱')
find_elements_by_tag_name('名稱')  
結果會傳回串列!
那這七個找元素方法個別是什麼意思,以下一個一個介紹一下:(我都省略 find_elements_by )

id:找符合id的元素
例:

某網頁原始碼節錄...
========================================================
<div id="news">大家好</div>
<div id="news">我是落葉</div>
========================================================

於python輸入:find_element_by_id('news').text
輸出結果:
大家好
於python輸入:find_elements_by_id('news').text
輸出結果:
[大家好,我是落葉]

class_name:找符合Class的元素
例:

某網頁原始碼節錄...
========================================================
<div class="news">大家好</div>
<div class="news">我是落葉</div>
========================================================

於python輸入:find_element_by_class_name('news').text
輸出結果:
大家好
於python輸入:find_elements_by_class_name('news').text
輸出結果:
[大家好,我是落葉]

name:找符合name屬性的元素
例:

某網頁原始碼節錄...
========================================================
<div name="news">大家好</div>
<div name="news">我是落葉</div>
========================================================

於python輸入:find_element_by_name('news').text
輸出結果:
大家好
於python輸入:find_elements_by_name('news').text
輸出結果:
[大家好,我是落葉]

css_selector:找符合 css_selector的元素
這個稍微複雜點,若是在Chrome瀏覽器下,請對著想要爬取的句子、物件、圖片點選右鍵->檢查
接著他會跑出開發者模式的視窗在右邊,該區域會有灰色的底顯示著,請用滑鼠指著它,接著你會看到你要排取的句子、物件、圖片會顯示一串文字。
我拿台灣大學網站為例子,如下圖

有顯示a 這個字,這個就是  css_selector 會定位到的資料
例:

於python輸入:find_element_by_css_selector('a').text
輸出結果:
新春賀歲交流會 – 108梯新進教師回娘家囉!

於python輸入:find_elements_by_css_selector('a').text
輸出結果:
[新春賀歲交流會 – 108梯新進教師回娘家囉!,「不畏失敗 Dare to Fail !」-失敗學館藏展]

partial_link_text :找出內容有text的<a>元素
例:

某網頁原始碼節錄...
========================================================
 <a href="aaa.html">abcd</a>
 <a href="bbb.html">abcdefg</a>
========================================================

於python輸入:find_element_by_partial_link_text('abc').text
輸出結果:
abcd
於python輸入:find_elements_by_partial_link_text('abc').text
輸出結果:
[abcd,abcdefg]

link_text :找出內容完全相同text的<a>元素
例:

某網頁原始碼節錄...
========================================================
 <a href="aaa.html">abcd</a>
 <a href="bbb.html">abcdefg</a>
========================================================

於python輸入:find_element_by_link_text('abcd').text
輸出結果:
abcd
於python輸入:find_elements_by_link_text('abcd').text
輸出結果:
[abcd]

tag_name :找出標籤名稱的元素
例:

某網頁原始碼節錄...
========================================================
 <a href="aaa.html">abcd</a>
 <a href="bbb.html">abcdefg</a>
========================================================

於python輸入:find_element_by_tag_name('a').text
輸出結果:
abcd
於python輸入:find_elements_by_tag_name('a').text
輸出結果:
[abcd,abcdefg]

以上是定位元素的方法,是不是很簡單呢!?

Read more

讀書心得-Read Write Own:開啟WEB3新局的區塊鏈網路

讀書心得-Read Write Own:開啟WEB3新局的區塊鏈網路

本書清楚的說明網路及區塊鏈的歷史以及區塊鏈的優點,以及抨擊那些獨佔網路生態的大型企業,對於不熟悉區塊鏈的新手,是個很好的入門書,理解到區塊鏈的迷人之處。 協定網路與區塊鏈網路 協定網路是一個大家講好的「規則」,是由中心化機構維持運作,例如「網際網路協定 TCP/IP」、「網站瀏覽協定HTTP」多半是由領少量的捐款或是志工來維持經營,所以要維持運作的話通常比較困難。 作者說明有個強化協定網路運作的方法,「區塊鏈網路」 區塊鏈網路採取「分散式帳本及共識帳本」、「代幣獎勵」、「不可竄改」、「去中心化」等方式來維持運作,例如:想要做交易,將交易需求發送各個節點,讓他們簽屬通過,好處是,發起交易者的手續費是直接交由共同簽屬的節點(礦工)。 這種運作方式聽起來好像沒甚麼特別的,但卻是非常「去中心化」的方式,也就是說,是經由多數人的檢查及驗證同意,意即要竄改內容是無法完成交易的,也因此區塊鏈網路是本質上透明、不可以修改的運作方式。 企業網路 網路初期,還沒有任何一家公司把網路社群一把抓住。 在我有印象的早期是使用撥接網路,接著可以上到Yahoo搜尋一些網路資料,接著開始出現了聊天

By 落葉
讀書心得-耕股

讀書心得-耕股

耕股主要是講基本面取向的投資用書,閱讀搭配作者建立的股票研究網站,比較不沉悶。 週期循環指標 依照作者經驗,當我們可以從以下六點來看出目前股市處在哪個階段: 1.巴菲特指標(台股&美股) 依照作者整理,當台股巴菲特指標超過180%時隨即會發生市場修正,在1990年中東危機、2008年金融海嘯、2020年美中貿易戰也都是超過180%,並且發生了修正。 但聰明的讀者會發現,從2020年過後直到今日,巴菲特指標都超過180%,最高已達到333%(25年10月底),為何持續5年都沒發生過大修正? 我個人解讀是,投資者對於風險容忍度提高了,既使巴菲特指數已嚴重超過標準值180%,但仍毫無畏懼的持續投資。 不過我也認為經濟泡沫或許比以往歷史吹的還大,等到泡沫爆開時,可能會跌得非常慘。 2.台灣百大優質企業累計營收年增率趨勢 是作者自創的指標,觀察台灣百大企業營收年增率、3個月營收成長率的走勢關係,當3個月營收成長率向上穿過營收年增率表示景氣不錯(黃金交叉),當3個月營收成長率向下穿過年增率表示景氣有衰退現象(死亡交叉)。 景氣非常好應該是3個月營收率持續都在往上增加,年收成長

By 落葉
讀書心得-我可能錯了

讀書心得-我可能錯了

本書時作者比約恩是個瑞典人,主要講述他前往泰國當森林僧人的十七年來學到的對人生的體悟。 我有著念頭,可是我的念頭不代表我 這句話非常有魔力:「我有著念頭,可是我的念頭不代表我。」 當我們在低潮時,有時會有些負面想法。 而這些負面想法,如果久了又多了,真的對我們心理造成很大的傷害。 這句話可以讓自己站在客觀的角度觀察想法,觀察這個與我無關的想法。我把他解讀為「雜訊」,這只是腦中的一段雜訊,左耳進、右耳出了。 書中提到:「如何放下拖累你的一連串念頭呢?--你需要將注意力轉移到別處。這些念頭唯一的養分來源,就是你的注意力。」 這句話很棒,因為當處在低潮時,很容易一直陷入在負面想法的循環中,那我們可以做的事情就是「轉移注意力」,停止沒必要的負面想法。 書中又提到:「所有人都有能力放下自己的念頭,以及選擇將注意力擺在哪裡,並決定讓注意力在對自己無助益的事情上停留多長的時間。」 像一個有如「兔子」般的人敞開心扉 這也是體驗當下的方式。 有時聽朋友說些自己以為聽過的事情,就變得漫不經心,或是接話,其實這對演講者很不尊重。 我們應時時保持謙遜、保持好奇心,放下成見的仔細聆聽

By 落葉
讀書心得-隱性潛能

讀書心得-隱性潛能

本書主要是講學習法和自我成長的心法,每一章節會先講故事,接著引導到自述的論點,讀起來非常順,且又不無聊。 有時候,你可能會覺得學習某些技能很不順利,總是卡卡的,或是好像學不怎麼深刻,過一陣子好像又忘個精光。 以下是我讀到比較令我印象深刻的學技能心法。 盡量犯錯(享受不適感) 書中舉學習語言當例子。 比如我們在學習英文,我們很害怕自己講錯話,用錯單字、文法,使得對方覺得我們好像英文很差,然後被嘲笑。 不過其實我們應該要"擁抱尷尬"才對,想想還在嬰兒時期的我們,我們不是也都牙牙學語嗎? 換個角度想,如果有個學中文的外國人,他試著用中文跟你溝通,他不小心說錯字時,是不是已經覺得他很厲害了?我們不會放大他的錯誤,而是為他"因為努力說我們的語言而感到開心",是個很有勇氣的人,對吧! 說錯被糾正,使得我們記住這個字該如何說、這個情況要怎麼回答,這才是學習語言的方式。 我們也應該每天累積犯錯機會,多講就會成長、講錯就改進。 不完美主義 完美主義也是會拖累我們學習的進度。 完美主義者害怕犯錯、給予太多假設、

By 落葉