Selenium一开始并不是我想要的,但是马勒戈壁的的骚年对心仪的女主播放不下,想要给她刷点人气,技术是要为兴趣服务的.
Selenim用法很简单,pip install selenium就能完成安装.
使用方法也很简单,直接从selenium导入webdriver模块即可
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)
<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解析.
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欢迎来到本直播间
最后女主播问了我一句,会充值吗?
有点尴尬….
未经允许不得转载:http://www.yueguangzu.net
逗逗网 »
使用Selenium爬取弹幕,为女主播刷人气
最新评论