Python學習筆記(一)——瀏覽器自動化測試工具Selenium
看了網友用Python通過影評來分析電影是好片還是爛片,自己也有了個想法想去分析下百度貼吧的帖子是精品帖子還是水帖子。目前正在熟悉工具的使用。
會用到的庫:Selenium, pandas(資料模型),jieba(分詞器),snownlp(情感分析),worldcloud(生成詞雲)
1.pycharm安裝 Selenium,pandas與numpy庫,均使用pip來自動安裝
pip install —U selenium
pip install pandas //pandas一般與numpy庫一起安裝
2.Selenium 瀏覽器驅動
Firefox瀏覽器需安裝geckdriver.exe
Chrome瀏覽器需要安裝chromedriver.exe
IE瀏覽器要安裝IEdriver.exe
均放在python27的scripts目錄下
3.通過元素檢視器查詢頁面元素
這裡使用的Firefox瀏覽器自帶的元素查詢器
這樣就可以比較簡便的獲取所需要用到頁面的元素
4.selenium基礎用法
(1)訪問頁面
#_*_coding: utf-8_*_
from selenium import webdriver
browser=webdriver,Firefox() #宣告瀏覽器物件
browser.get("www.baidu.com")
print(browser.page_source) #獲取頁面渲染後的原始碼
browser.close
(2)元素選取
單個:
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
多個:
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
(3)元素互動
輸入文字
browser.find_elements_by_id("kw").send_key("selenium") //在百度搜索框輸入內容
由於輸入的值會儲存,當你向下一個輸入框輸入時,所輸入的文字是在原有的基礎上繼續輸入,可以用以下指令來清除原有的內容:browser.find_elements_by_id("su").clear()
模擬點選
browser.find_elements_by_id("su").click() //點選百度的搜尋按鈕
獲取元素文字值
網頁原始碼<span class="short">可怕,後味無窮。主要是暗網對大眾來說太恐怖了,難以想象背後的黑暗。</span>
browser.find_elements_by_class_name("short").text //獲取豆瓣短評文字
獲取元素的屬性(在一組元素中很有用)
網頁原始碼<span class="comment-time " title="2018-09-11 10:11:28"> 2018-09-11 </span>
browser.find_elements_by_class_name(" comment-time").get_attribute('title') //獲取豆瓣短評時間
5.panda:DataFrame的使用
(1)建立DataFrame物件
import pandas as pd
import numpy as np
df=pd.DataFrame(['a','b','c','d','e'],columns=['cols'],index=[1,2,3,4,5]) //建立DataFrame需要“資料”,“列”,“標誌”三個基本的屬性
print df
執行結果:
cols
1 a
2 b
3 c
4 d
5 e
(2)對資料進行應用
獲取:df['cols'],在方括號中輸入這個單一的列名,來獲得一個Series,該操作相當於df.cols
注:使用IPython,tab鍵可以自動啟用可選列名(包括其它的屬性)
應用函式:df.apply()
>>>通常都會使用到lambda函式:例如:func=lambda x:x+1 等同於 def func(x):return(x+1)
df = pd.DataFrame(np.array([['a','b','c','d','e'],[1,2,3,4,5]]).T, columns=['cols','cols2']) print df print(df.apply(lambda x:x.max()))
執行結果:
cols cols2 0 a 1 1 b 2 2 c 3 3 d 4 4 e 5 cols e cols2 5 dtype: object
6.小測試,獲取豆瓣短評
#-*-coding:utf-8-*- import pandas as pd import numpy as np import time from selenium import webdriver def getComment(url): browser=webdriver.Firefox() i=1 AllArticle = pd.DataFrame() browser.get(url) while True: s = browser.find_elements_by_class_name('comment-item') articles = pd.DataFrame(s,columns=['web']) articles['user'] = articles.web.apply(lambda x:x.find_element_by_tag_name('a').get_attribute('title')) articles['comment'] = articles.web.apply(lambda x:x.find_element_by_class_name('short').text) articles['star'] = articles.web.apply(lambda x:x.find_element_by_xpath("//*[@id='comments']/div[1]/div[2]/h3/span[2]/span[2]").get_attribute('title')) articles['date'] = articles.web.apply(lambda x:x.find_element_by_class_name('comment-time').get_attribute('title')) articles['vote'] = articles.web.apply(lambda x:np.int(x.find_element_by_class_name('votes').text)) del articles['web'] AllArticle=pd.concat([AllArticle,articles],axis=0) print('第'+str(i)+'頁完成!') try: if i==1: browser.find_element_by_xpath("//*[@id='paginator']/a").click() else: browser.find_element_by_xpath("//*[@id='paginator']/a[3]").click() browser.implicitly_wait(10) time.sleep(3) i=i+1 except: AllArticle=AllArticle.reset_index(drop=True) return AllArticle if i==2: AllArticle=AllArticle.reset_index(drop=True) browser.close() return AllArticle AllArticle=AllArticle.reset_index(drop=True) return AllArticle if __name__ == '__main__': url='https://movie.douban.com/subject/26725678/comments?sort=new_score&status=P' pd.set_option('display.width',200) #顯示寬度 pd.set_option('display.max_colwidth',30) #每列寬度 pd.set_option('display.max_columns',10) #設定顯示的列數 pd.set_option('display.colheader_justify','right') #對齊方式,預設居中 print(getComment(url))
執行結果:
user comment star date vote
0 凌睿 1.陳冠希:這有什麼恐怖的,這不就是我的親身經歷嗎?... 推薦 2018-09-11 10:11:28 1220 1 倪克斯 可怕,後味無窮。主要是暗網對大眾來說太恐怖了,難以想... 推薦 2018-07-21 12:22:17 909 2 桃桃淘電影 看完之後,馬上刪除,並清空回收站。要不電腦裡放這麼個... 推薦 2018-09-14 00:08:32 761 3 蘆哲峰 還是那句話:網際網路改變世界,同樣也改變了電影,不僅是... 推薦 2018-09-09 13:05:25 535 4 降半音耳朵 本來只是隨便看看,沒想到意外地好看!可以說是「新時代... 推薦 2018-07-21 12:26:30 288 5 王大根 蘋果公司過來看看,1T快閃記憶體的MacBook Pro ... 推薦 2018-09-17 21:52:42 255 6 l6632154j 不要隨便拿走不屬於自己得東西..... 推薦 2018-07-29 09:59:48 259 7 蠟筆 嚇到我了。期間網盤還中斷了兩三次,以為黑到我的手機裡... 推薦 2018-09-10 23:34:37 262 8 水仙操 搜資源的時候好擔心點開是真·暗網視訊 虐殺訂製 人肉... 推薦 2018-09-04 20:46:42 197 9 高仿外殼 驚心動魄,螢幕的背面是深不見底的人性暗河。極度恐慌,... 推薦 2018-09-12 23:06:53 221 10 謝謝你們的魚 後半部分一直在喊臥槽,不光光是嚇人這麼簡單,好幾處真... 推薦 2018-09-11 00:58:45 157 11 戚阿九 比特幣真的很值錢,幾年前為什麼不買點!(重點誤) 推薦 2018-09-11 16:48:18 124 12 楊三瘋 想象下在天朝用微信、微博、百度、朋友圈、抖音、迅雷、... 推薦 2018-09-11 14:03:32 91 13 逢澶Ty 沒看過前作,所以再爛也沒比較點…但是這部出乎意料我覺... 推薦 2018-07-29 14:00:24 81 14 褻瀆電影 竟然爽到了,暗網大神們連鬼畜混剪都能玩出新花樣,想到... 推薦 2018-09-12 21:15:02 69 15 方槍槍 創意牛逼,一黑到底,螳螂捕蟬黃雀在後。感慨:別太好奇... 推薦 2018-09-11 11:34:30 83 16 田間簫鼓賽閒神 新的電影拍攝手法和審美正在逐步誕生、成型。 推薦 2018-09-11 12:55:31 68 17 透明 線上視訊直播聊天,美女帥哥免費陪聊! 推薦 2018-09-12 00:13:04 59 18 glim 不怕,網際網路法院比他們狠多了 推薦 2018-09-11 22:39:48 54 19 agangisboy 真特麼扯淡,壞人出現還自帶馬賽克。真是有多無知,就會... 推薦 2018-09-15 19:39:10 43