1.明确爬虫目的
爬虫目的需要我们明确的,没有目的的爬虫都是耍流氓!像我这次爬虫目的能不能从网页上爬下来。
2.怎么来爬?
a. 先要找到具有唯一性的标签
开始的时候我选取的是,虽然这个标签中涵盖了我们需要的主播名字和主播的粉丝量,但是,如果我们用正则表达式提取的时候,如果使用贪婪模式的时候,提取的信息就比上面多太多了,如果用非贪婪模式的时候,
提取的内容也就只有下面这些:
炸姐ADC
缺失了主播的粉丝数,那么选取的标签就是不合理的。
如果我们选择
b. 尽量选取匹配的信息
假想一下,如果我们只是获得主播名字,然后再获取主播粉丝,那么信息就对不上了,所以我们要选取匹配的信息。选取下面的就很合理。
c. 尽量选取他们的父级标签
3. 简单点的爬虫思路
a. 模拟HTTP请求,向服务器发送这个请求,获取到服务器返回给我们的HTML
b.用正则表达式获取我们想要的数据
4.开始爬
附上源码(每个函数都解释的很清楚):
fromurllibimport requestimport reclass Spider():
url ='http://www.huya.com/g/lol' root_pattern ='
r = request.urlopen(Spider.url)
htmls=r.read()
#如果不转成str的格式的话,就会造成机器卡顿htmls= str(htmls,encoding='utf-8')
return htmls
#数据分析def__analynize(self,htmls):
rs = re.findall(Spider.root_pattern,htmls)
star_lists = []
forrin rs:
rz = re.findall(Spider.one_pattern,r)
#粉丝数follwers = re.findall(Spider.two_pattern,r)
#主播名字name = re.findall(Spider.one_pattern_name,str(rz))
#Spider.result[str(rzz[0])]=str(rx[0])star_list = {'name':name,'follwers':follwers}
star_lists.append(star_list)
return star_lists
#数据精炼(提高数据的可靠性)def__refine(self,star_lists):
func =lambda star_list:{
'name':star_list['name'][0],
'follwers':star_list['follwers'][0]
}
return map(func,star_lists)
#业务处理(这里以排序代替)def__sort(self,star_end_lists):
star_end_lists = sorted(star_end_lists,key=self.__key_access,reverse=True)
return star_end_lists
#key的排序规则def__key_access(self,star_end_list):
num = re.findall('\d*',star_end_list['follwers'])
num = float(num[0])
if'万'instar_end_list['follwers']:
num=num*10000return num
#数据的后续处理(可以存入数据库)def__show(self,star_end_lists_sorted):
print('------虎牙LOL主播粉丝的排行榜------')
foriinrange(1,len(star_end_lists_sorted)):
print('排名:'+str(i)+''+star_end_lists_sorted[i-1]['name']+''+star_end_lists_sorted[i-1]['follwers'])
#爬虫入口 def go(self):
r1 = self.__fetch_content()
star_lists = self.__analynize(r1)
star_end_lists = self.__refine(star_lists)
star_end_lists_sorted = self.__sort(list(star_end_lists))
self.__show(star_end_lists_sorted)
spider = Spider()
spider.go()
运行结果:
------虎牙LOL主播粉丝的排行榜------排名:1 卡尔 71.9万
排名:2 毒纪 36.1万
排名:3 LCK冠军联赛 17.7万
排名:4 LPL职业联赛 16.0万
排名:5 MH、金灿毅ChanE 12.6万
排名:6 聆听-旋律 9.5万
排名:7 董月月 8.2万
排名:8 完美OB 7.9万
排名:9 芜湖神 6.3万
排名:10 叶子yasuo 5.2万
排名:11 第一吸血鬼屿水 3.5万
排名:12 灭世冷漠 3.3万
排名:13 最快锐雯风神 3.4万
排名:14 娇宝的老公李青强 2.2万
排名:15 纪小鹿 2.1万
排名:16 菜鸡文 1.9万
排名:17 八神 1.4万
排名:18 幼灵梦 1.5万
排名:19 虎牙丶柯南 1.0万
排名:20 小僧空空 9972排名:21 潘神丶 9392排名:22 开森的小唯美 8888排名:23 阿俊z 8712排名:24 90818丶追梦 8678排名:25 铸哥 8010排名:26 二A 7915排名:27 烟雨丶青蛙瑞兹 7824排名:28 吐司 6774排名:29 正恒丶小白 6635排名:30 844-暮笙小爷 5972排名:31 国服第一赵信小雨 5655排名:32 雨雾-小杰人马 5564排名:33 正恒丶兔子 5479排名:34 先锋丶婉清 5417排名:35 可乐剑姬 5379排名:36 节奏 4985排名:37 腾嘉-熊大 4959排名:38 正恒丶小鱼 4923排名:39 844-雯雯 4779排名:40 雨雾-阿龙赵信 4416排名:41 娱加-萌小希 4373排名:42 虎丶牙莎莉 4020排名:43 十年锐雯 4013排名:44 正恒丶伊芙神 3999排名:45 亚古兽 3972排名:46 虎牙东方梦魇 3888排名:47 猴王一心 3806排名:48 谁明浪子心 3694排名:49 浩东德莱文 3539排名:50 正恒丶芒果 3350排名:51 兆辉-风度人影剑度天 3347排名:52 耀弟-最强武器 3120排名:53 觅寻哟 3049排名:54 天亿-Aarou 2916排名:55 先锋GJ丶空城男刀 2812排名:56 爱拍-阿浩 2682排名:57 Autism 2672排名:58 叶包包丶 2571排名:59 固执 2529排名:60 Huya丶薄荷 2505排名:61 阿明 2490排名:62 兆辉-瑶神皎月 2475排名:63 何遇是个帅卡特i 2472排名:64 悦儿 2416排名:65 5斧德莱文丶秒杀 2211排名:66 正恒丶小雪 2197排名:67 会好的 2151排名:68 飘逸 2147排名:69 娱加-U妮 2144排名:70 铭人丶千姿 2038排名:71 虎牙直播-蔸 1992排名:72 无心瑞兹 1979排名:73 逍遥 1954排名:74 悟道沙皇 1934排名:75 光锡兰博 1918排名:76 开开皇子 1874排名:77 正恒丶小贼 1782排名:78 泽佳琴女 1713排名:79 娱加-杨思涵 1712排名:80 武神诺手丶强者灌篮 1654排名:81 烟雨丶陈年剑圣 1646排名:82 娱加-辣么萌 1642排名:83 LCK备用1 1595排名:84 聆听-鑫哥卡萨丁 1582排名:85 雨雾-火鸡兰博 1571排名:86 老唐家糯米饭 1570排名:87 正恒丶逗比空 1552排名:88 拔哥丶卡特 1540排名:89 菲菲 1532排名:90 辗转辗转辗转 1517排名:91 虎牙鱼王-洛水尘 1505排名:92 国服第一卡特 1495排名:93 极限哥 1477排名:94 Huya丶风男 1431排名:95 王吉吉先生 1424排名:96 小风手速亚索 1402排名:97 魔魅大少 1401排名:98 LCK备用2 1396排名:99 虎牙嗨少 1371排名:100 北北 1365排名:101 坑货的提莫 1346排名:102 正恒丶烧肉粽 1320排名:103 甲第-乔仪 1298排名:104 提百万 1297排名:105 十四剑姬 1277排名:106 正恒丶啤梨 1241排名:107 我是钟钟 1166排名:108 天天天 1121排名:109 RiotGame1 1109排名:110 兆辉-章鱼哥 1090排名:111 河蟹i 1090排名:112 京酱Rose 1063排名:113 零一c 1063排名:114 冷三指 1059排名:115 喵喵 1058排名:116 腾嘉-陈小艾 1026排名:117 虎牙野区剑圣皓児 1006排名:118 小姚姚 1001排名:119 虎牙丶Hope 991