使用Selenium爬取弹幕,为女主播刷人气

Selenium一开始并不是我想要的,但是马勒戈壁的的骚年对心仪的女主播放不下,想要给她刷点人气,技术是要为兴趣服务的.

Selenim用法很简单,pip install selenium就能完成安装.


使用方法也很简单,直接从selenium导入webdriver模块即可
#selenium_yewei.py
#-*-coding:utf-8-*-
from selenium import webdriver
def openChrome(url):
    gg=webdriver.Chrome('chromedriver.exe')
    gg.get(url)
    print gg.title
    print gg.current_url
    return gg
webdriver.Chrome(‘chromedriver.exe’)这里指的是使用Chrome浏览器进行操作.

虽然说用法很简单,但是第一次用很麻烦.需要想在对应浏览器的webdriver,所以chromedriver.exe是我下载好的webdriver,放在我这个文件同级的目录.

get方法是打开url,调用此方法会调用本地的浏览器,输入该页面并打开.
title属性是获取网页的标题
current_url是获取当前的浏览器地址
def getChat(gg):
    count=0
    while True:
        try:
            t=gg.find_elements_by_xpath('//div[@class="chat-cont-wrap"]/ul[@class="c-list"]/li/p')
            l=len(t)-count
            if l<0:
                count=0
                continue
            elif l==0:
                continue
            for i in xrange(l):
                result=t[-1*l:].pop(i)
                print result.find_element_by_xpath('.//a').get_attribute('title'),result.text
                count+=1
        except Exception as e:
            print e
            pass
        time.sleep(15)
这里以斗鱼为例https://www.douyu.com/3518103,定义getChat函数进行获取弹幕,gg是传入的操作对象
<div class="chat-cont-wrap" data-type="chat-cont">
    <ul class="c-list" data-type="chat-list">
      
        <li class="jschartli" data-type="list" data-level="10">
            <p class="text-cont">
                <a class="chat-icon-pad user-level level-10 level-bgpng  level-size1 " title="用户等级:10"></a>
                <a href="javascript:;" class="hy-name js-nick" rel="43210074" is-show-super-icon="0" avatar="avatar/default/12" gid="1" data-noble="0">DT玖</a>
                <span>欢迎来到本直播间</span>
            </p>
        </li>
      
        <li class="jschartli" data-type="list" data-level="11">
            <p class="text-cont">
                <a class="chat-icon-pad user-level level-11 level-bgpng  level-size1 " title="用户等级:11"></a>
                <a href="javascript:;" class="hy-name js-nick" rel="185164901" is-show-super-icon="0" avatar="avanew/face/201802/04/21/2aa18a55c6e792d55ec535187a87e66d" ="1" data-noble="0">骚白的咸鱼欣</>
                <span>欢迎来到本直播间</span>
            </p>
        </li></ul>
</div>
分析网页结构,聊天的弹幕其实是通过class=”chat-cont-wrap”的div标签下的class=”c-list”下的ul>li标签里面的p标签下的a,span标签的文本.此类结构使用xpath解析会更有优势,所以使用find_elements_by_xpath方法对网页的源代码进行xpath解析.
#解析到每一条li下p标签
gg.find_elements_by_xpath('//div[@class="chat-cont-wrap"]/ul[@class="c-list"]/li/p') 
注意find_elements_by_xpath返回的是一个列表
这个函数getChat的逻辑是:
定义计数器count
每定时一秒钟,从网页抓取一次弹幕列表,列表的记录数减去计数器,差值记录在l
l=len(t)-count 
if l<0: 如果差值为负数,说明可能更换了女主播,消息计数器清零,并退出当前循环
    count=0
    continue
elif l==0:如果差值为0,说明新消息,跳过
    continue
for i in xrange(l): 否则遍历每一个差值,
    result=t[-1*l:].pop(i)  从列表弹出最后添加的几条信息
    print result.find_element_by_xpath('.//a').get_attribute('title'),result.text 打印出来
    count+=1 计数器加1

再定义个发送消息的模块:

使用send_keys方法发送消息到指定标签
随后调用标签自己的click发送消息
def sendMsg(content):
    try:
        kw=gg.find_element_by_class_name("cs-textarea")
        kw.send_keys(content) 
        bt=gg.find_element_by_class_name("b-btn")
        bt.click()
    except Exception as e:
        print e
        pass

写个自动发消息的队列

随便定义了一个列表预先放一些要发送的消息,也可以自己调用自己的api
if __name__=='__main__':
    to_say=['主播早啊!','我看了一个多小时了!','哈哈,有意思!','主播人好好','刚注册,不太会玩斗鱼~~~']
    q=queue.Queue(20)
    for i in to_say:
        q.put(i)
    url='https://www.douyu.com/3518103'
    gg=openChrome(url)
    getChat(gg)

结果如下:

你的美兮呀_你的美兮呀直播间3518103_颜值直播_斗鱼 - 每个人的直播平台
https://www.douyu.com/3518103
用户等级:57 M美兮
撩无家可归的太子:我就只要那点经验就可以了
用户等级:6 得更好发挥欢迎来到本直播间
用户等级:38 丿丶至尊宝欢迎来到本直播间
 雨蠢
撩情人眼里出雨点:告辞
用户等级:1 肥肥技术达人:主播早啊!
用户等级:8 自卑地天才欢迎来到本直播间
用户等级:1 肥肥技术达人:我看了一个多小时了!
用户等级:57 M美兮
撩无家可归的太子:3+1.5+1.5
用户等级:21 痞子灬蔡欢迎来到本直播间
用户等级:8 罗宾汉Robin欢迎来到本直播间
用户等级:8 纯白旧日时光欢迎来到本直播间
用户等级:57 M美兮
撩无家可归的太子:+1.3
用户等级:12 乜円欢迎来到本直播间
用户等级:1 肥肥技术达人:哈哈,有意思!
用户等级:57 M美兮
撩无家可归的太子:7.3
用户等级:8 寥寥无几丿欢迎来到本直播间
用户等级:1 肥肥技术达人:主播人好好
Rain小雨点儿(不在直播) 雨蠢
撩情人眼里出雨点:还有公爵加速呢
用户等级:15 陨石丶TNT欢迎来到本直播间
用户等级:57 M美兮
撩无家可归的太子:情人别走啊 
用户等级:11 我晓得哈123欢迎来到本直播间

最后女主播问了我一句,会充值吗?

有点尴尬….

赞(0)
未经允许不得转载:http://www.yueguangzu.net逗逗网 » 使用Selenium爬取弹幕,为女主播刷人气
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址