Python爬虫原理写的一个简单获取观众数据的代码,用tkinter做了个简单的GUI界面,然后用pyinstaller编译为exe可执行文件,有需要的可以根据自己需求修改.
from tkinter import *
import urllib.request
import tkinter.messagebox
from lxml import etree
import json
import time
import re
root=Tk()
root.title("获取氧吧直播间观众数据")
Label(root,text="请输入直播间号码").grid(row=0,column=0,sticky=W)
v1=StringVar()
e1=Entry(root,textvariable=v1,width=30,)
e1.grid(row=0,column=0,padx=105,pady=5,sticky=W)
sb=Scrollbar(root,orient=VERTICAL)
sb.grid(row=1,column=1,columnspan=3,padx=0,pady=5,sticky=NS)
lb = Listbox(root,width=68,height=41,yscrollcommand=sb.set,setgrid=True,selectmode=EXTENDED)
lb.grid(row=1,column=0,padx=5,pady=5,columnspan=5,sticky=W)
sb.config(command=lb.yview)
root.geometry("8x41+750+100")
def getUsertList():
txt=v1.get()
if not txt.isdigit():
tkinter.messagebox.showinfo("请输入","请输入房间号")
else:
url = 'http://yangba.syoogame.com/%s' % (v1.get())
r = urllib.request.urlopen(url)
htmlData = r.read()
html = etree.HTML(htmlData)
nickname = html.xpath('//head/title/text()')
content = html.xpath('//script/text()')
p = r'[0-9]{1,9}'
pid = re.findall(p, content[2])
nowtime = time.time()
nowtime = int(nowtime)
listurl = 'http://yangba.syoogame.com/studio/ajax/getUserList?id=%s&_=%s' % (pid[0], nowtime)
userData = urllib.request.urlopen(listurl)
userList = userData.read()
jsonData = json.loads(userList.decode('utf-8'))
lb.insert(END, "======================================",
nickname[0],
"======================================",
"观众总数:%s"%(jsonData['total']),
"游客总数:%s"%jsonData['visitor'],
"在线守护:%s"%jsonData['guardOnline'],
"登录用户总数:%s"%(jsonData['total'] - jsonData['visitor']),
"======================================",
"登录用户数据",
"======================================"
)
for fans in jsonData['viewer']:
lb.insert(END,
"用户ID:%s"%fans['id'],
"用户昵称:%s"%fans['name'],
"用户等级:%s"%fans['levelList'][0]['levelName'],
"用户城市:%s"%fans['city'],
"======================================"
)
def removeData():
lb.delete(0,END)
e1.delete(0,END)
Button(root,text="获取数据",width=10,command=getUsertList).grid(row=0,column=0,padx=330,pady=5,sticky=W)
Button(root,text="清除",width=7,command=removeData).grid(row=0,column=0,padx=418,pady=5,sticky=E)
mainloop()