十三、原生爬蟲實戰
阿新 • • 發佈:2018-08-03
enc pri 實例 vid 唯一標識 ext 聯盟 info 目標
一、簡單實例
1、需求:爬取熊貓直播某類主播人氣排行
2、了解網站結構
分類——英雄聯盟——"觀看人數"
3、找到有用的信息
二、整理爬蟲常規思路
1、使用工具chrome——F12——element——箭頭——定位目標元素
目標元素:主播名字,人氣(觀看人數)
2、方法:使用正則表達式提取有用的信息
主播名字,人氣(觀看人數)
總結
- 爬蟲前奏
1)明確目的
2)找到數據對應的網頁
3)分析網頁的結構找到數據所在的標簽位置
- 步驟
1)模擬HTTP請求,向服務器發送這個請求,獲取到服務器返回給我們的HTML
2)用正則表達式提取我們要的數據(名字,人氣)
三、HTML結構分析基本原則
1、爬蟲分析,最重要的一步,找到標簽(即左右邊界)
原則:
1)盡量選擇有唯一標識性的標簽
2)盡量選擇離目標信息最近的標簽
不同人選擇的標簽可能不同。
四、數據提取層級及原則
1、找到最近的定位標簽(肉眼可見)
有關聯的信息作為一組,找離這一組最近的定位標簽
如:示例中的“主播姓名”和“人數”是有關聯的,作為一組
2、判斷選擇的標簽是否是唯一的(需代碼驗證)
3、盡量選擇可閉合的定位標簽
可閉合,是指可將目標信息包裹起來的定位標簽。如:<... />
4、代碼實戰
1 # coding=utf-8
2 import re
3 from urllib import request
4
5 url = ‘https://www.panda.tv/all‘
6 r = request.urlopen(url)
7 htmls = r.read()
8
9 print(type(htmls)) # 打印type,結果是bytes類型
10 htmls = str(htmls, encoding=‘utf-8‘) # 將bytes轉成utf-8
11 print(htmls)
運行結果
Traceback (most recent call last):
File "E:/pyClass/thirtheen/spider.py", line 12, in <module>
print(htmls)
UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\xa0‘ in position 62321: illegal multibyte sequence
原因是使用的print()是win7系統的編碼,但是win7系統的默認編碼是GBK,解決方式,增加如下代碼
1 import io
2 import sys
3 sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding=‘gb18030‘)
優化後代碼
# coding=utf-8 import re from urllib import request import io import sys sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding=‘gb18030‘) class Spider(): url = ‘https://www.panda.tv/all‘ def __fetch_content(self): r = request.urlopen(Spider.url) htmls = r.read() htmls = str(htmls, encoding=‘utf-8‘) # 將bytes轉成utf-8 print(htmls) return htmls def go(self): self.__fetch_content() spider=Spider() spider.go()
五、正則分析HTML
1、獲取root_html
正則表達式匹配<div class="video-info">和</div>之間的所有字符,有哪些方式?
匹配所有字符的方式
1)[\s\S]*?
2)[\w\W]*?
* 表示任意次
?表示貪婪
2、代碼實戰
十三、原生爬蟲實戰