Python3實戰—原生爬蟲
阿新 • • 發佈:2019-02-07
基本步驟:
1.明確目的
2.找到資料對應的網頁,分析網頁結構找到資料所在的標籤位置
3.模擬HTTP請求,向伺服器傳送這個請求,獲取伺服器返回的HYML
4.用正則表示式提取 所需資料(主播名、人氣)
5.精煉資料、處理資料、儲存資料
目的:
爬取熊貓直播英雄聯盟主播人氣排行
原理:
對HTML檔案進行文字分析,從而提取出所需資料
分析網頁結構:
資料的獲取與處理
import re from urllib import request class Spider(): url = 'https://www.panda.tv/cate/lol?pdt=1.24.s1.3.7o5937s6suv' root_pattern = '<div class="video-info">([\s\S]*?)</div>' name_pattern = '</i>([\s\S]*?)</span>' number_pattern = '<span class="video-number">([\s\S]*?)</span>' # 私有方法,獲取資料 def __fetch_content(self): r = request.urlopen(Spider.url) htmls = r.read() htmls = str(htmls, encoding='utf-8') return htmls # 正則分析html def __analysis(self,htmls): root_html=re.findall(Spider.root_pattern,htmls) anchors = [] for html in root_html: name = re.findall(Spider.name_pattern, html) number = re.findall(Spider.number_pattern, html) anchor = {'name':name, 'number':number} anchors.append(anchor) return anchors # 精煉資料 def __refine(self,anchors): l = lambda anchor:{'name':anchor['name'][0].strip(),'number':anchor['number'][0]} return map(l, anchors) # 資料排序 def __sort(self,anchors): anchors = sorted(anchors,key = self.__sort_seed,reverse=True) return anchors def __sort_seed(self,anchor): r = re.findall('\d*',anchor['number']) number = float(r[0]) if '萬' in anchor['number']: number *=10000 return number # 顯示函式 def __show(self,anchors): for rank in range(0,len(anchors)): print('rank'+str(rank+1)+' : '+anchors[rank]['name'] + ' '+anchors[rank]['number']) # 入口方法(主方法) def go(self): htmls = self.__fetch_content() anchors = self.__analysis(htmls) result = list(self.__refine(anchors)) sorted_result = self.__sort(result) self.__show(sorted_result) spider = Spider() spider.go()