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

可以到官网下载浏览器驱动:http://www.seleniumhq.org/download/

均放在python27的scripts目录下

 

3.通过元素查看器查找页面元素

这里使用的Firefox浏览器自带的元素查找器

Python学习笔记(一)——浏览器自动化测试工具Selenium_第1张图片

这样就可以比较简便的获取所需要用到页面的元素

 

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()  //点击百度的搜索按钮

 

获取元素文本值

网页源码可怕,后味无穷。主要是暗网对大众来说太恐怖了,难以想象背后的黑暗。

browser.find_elements_by_class_name("short").text //获取豆瓣短评文本

 

获取元素的属性(在一组元素中很有用)

网页源码  2018-09-11  

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 

你可能感兴趣的:(Python学习笔记(一)——浏览器自动化测试工具Selenium)