爬取斗鱼格斗区主播人气值

来源:互联网 发布:中国网络直播第一人 编辑:程序博客网 时间:2024/04/28 11:13
import urllib.requestimport urllib.errorimport threadingimport timeimport refrom urllib.request import urlopenurl='https://www.douyu.com/directory/game/FTG'agent='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'user_headers={'User-Agent':agent}request=urllib.request.Request(url,headers=user_headers)response=urllib.request.urlopen(request)pagecode=response.read().decode('utf-8')pattern=re.compile('<h3 class="ellipsis">\s+(.*?)\s+</h3>.*?<span class="dy-name ellipsis fl">(.*?)</span>.*?<span class="dy-num fr.*?>(.*?)</span>',re.S)#配好了爬取房间题目,主播名,人气数值三项的正则表达式items=re.findall(pattern,pagecode)contents=[]n=0for item in items:      contents.append(item)      n+=1print(n)file = open("DY_FTG.txt","w+")#创建TXT文件a=0while a<n:      floor=contents[a][0]+' '+contents[a][1]+' '+contents[a][2]+'\n'      file.write(floor)#把爬取数据写入文件里      a+=1file.close()

可以成功爬取主播数据,并写入文件中。
Ps:斗鱼本来就是按照人气高低来给主播排序的,但是我还是想按照人气高低把主播重新排序,于是我加了一个起泡排序法,却发现顺序乱了。
主播人气第一页
主播人气第二页

经过观察发现,在万人气主播和千人气主播的比较出现错误,千人气和百人气主播的比较出现错误,类似如此。应该是人气数值保存成字符型了,应该是数值型才对。而且斗鱼万人气的表示方法是XX万,我的方法是把字符串第一位到倒数第二位转换成数值类型,再乘以10000。
然而这中间又涉及到元组类型是不能更改数据的,列表才可以。而我的元组是多维数组,更是要每一层都要列表化才行。