一.爬蟲實體
1.原理:文本分析并提取資訊——正則運算式,
2.實體目的:爬取熊貓TV某個分類下面主播的人氣排行
分析網站結構
操作:F12查看HTML資訊,Ctrl+Shift+C滑鼠選取后找到對應的HTML,
3.步驟:
前奏:
1、明確目的(分析抓取目的確定抓取頁面)
2、找到資料對應網頁
3、分析網頁的結構,找到資料所在標簽的位置
執行:
4、模擬HTTP請求,向服務器發送請求,獲取到服務器回傳給我們的HTML
5、用正則運算式提取我們要的資料
......
4.代碼
二. VSCode中除錯代碼
斷點除錯:F5啟動,F10單步,F5跳斷點,F11進內部
三.HTML結構分析基本原則
尋找到標簽、識別符號,使之能夠定位要抓取的資訊,
1、盡量選取具有唯一性的標簽
2、盡量選取最接近于資料的標簽
四.資料提取層級分析及原則
1.可以把兩個資料看成是一組資料并再次尋找標簽,
2.盡量選取可以閉合的標簽(父級標簽),并包裹其需要的資料
五.正則分析HTML及具體流程
''' This is a spider,模塊注釋 ''' from urllib import request import re class Spider(): ''' This is a spider class ''' url = 'https://www.panda.tv/cate/lol' root_pattern = '<div >([\s\S]*?)</div>' #注意單雙引號 #[\w\W] [\s\S] . 匹配所有字符 #* 匹配0次或者無限多次 #? 非貪婪模式,匹配到第一個遇到的</div> name_pattern = '</i>([\s\S]*?)</span>' number_pattern = '<span >([\s\S]*?)</span>' def __fetch_content(self): ''' 私有方法,獲取網頁內容 ''' r = request.urlopen(Spider.url) htmls = r.read() htmls = str(htmls,encoding = 'utf-8') return htmls 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_seed(self,anchor): r = re.findall('\d*',anchor['number']) #提取數字 number = float(r[0]) if '萬' in anchor['number']: #處理'萬' number *= 10000 return number def __sort(self,anchors): ''' key確定比較物件 sorted()默認升序排列,reverse = True 降序 不能用str排序,要用int,并且要處理'萬' ''' anchors = sorted(anchors,key = self.__sort_seed,reverse = True) return anchors 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): #Spider的入口方法 htmls = self.__fetch_content() anchors = self.__analysis(htmls) anchors = list(self.__refine(anchors)) anchors = self.__sort(anchors) self.__show(anchors) spider = Spider() spider.go()
爬蟲框架:
Beautiful Soup
Scrapy
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195333.html
標籤:Python
上一篇:K折交叉驗證
下一篇:1.python資料型別詳解
