1. 程式人生 > >Python學習筆記(一)——瀏覽器自動化測試工具Selenium

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