本人的全部文章只適合善於使用百度的人,由於全部基礎知識個個博客複製粘貼了無數遍,我這裏均不會詳細講述。html
在這裏我表示全部不經驗證的轉載都是耍流氓,把一篇篇錯誤的文章轉載的處處都是,不知道浪費了多少人的時間精力去反覆調試錯誤的代碼,尤爲是對初學者有極大的打擊性。python
你們在學習python爬蟲的過程當中,會發現一個問題,語法我看完了,說的也很詳細,我也認真看了,爬蟲仍是不會寫,或者沒有思路,因此個人全部文章都會從實例的角度來解析一些常見的問題和報錯。linux
環境交代:win10+python3.6
代碼很是簡單,多線程
這麼低級的代碼是由於這個路由器頁面很是垃圾,用不到~~~,不過這樣也適合初學者觀看,固然了,後續會嘗試添加更多功能python爬蟲
首先咱們對本身的需求要進行分析,新手嘛,先把複雜的東西簡單化,模塊化,整理出思路,再一步步的去實現,最後整合。ide
重點講一講我遇到的坑模塊化
通常來說右鍵查看頁面編碼,如圖所示,由於在國外是很是奇怪的編碼
當時我就矇蔽了,這是什麼鬼~
這個時候咱們須要用到chardet庫來判斷編碼類型,拿百度舉例,自行百度python第三方庫如何安裝,這裏不作闡述函數
import chardet import urllib.request html = urllib.request.urlopen('http://www.baidu.com/').read() print (chardet.detect(html))
獲得的結果以下:學習
C:\python\python.exe D:/python/test/2.py {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''} Process finished with exit code 0
import urllib.request import os from bs4 import BeautifulSoup import time def getHtml(url): html = urllib.request.urlopen(url).read() return html #獲取字符串,由於我在國外,路由器low到爆,編碼格式也蛋疼了我好久 html = getHtml("http://192.168.0.254/pub/fbx_info.txt") #將read()獲取的是bytes編碼轉化成str html = html.decode("ISO-8859-1")
由於是歐洲網站,獲取的倒是一個 【ISO-8859-1】的網頁編碼。
因爲這裏咱們用read()方法讀取,獲取到的是bytes類型,此時須要轉換成str類型的,才能夠進行下一步的處理,若是不處理就會有下列錯誤TypeError: a bytes-like object is required, not 'str'
這裏可使用decode()方法處理一下html = html.decode("ISO-8859-1")
使用type()方法檢測下編碼print(type(html))
反饋,成功<class 'str'>
網站
#操做字符串 html = html.split('WAN')[1].split('Ethernet')[0] time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #由於使用記事本,在記事本中換行只認\r\n str = time+html+"\r\n"
這裏我使用的是split()方法,使用方法呢,推薦你們學會查手冊,這裏也不詳細再解釋了。
我經過split()方法截取到了本身須要的字符串,而後用time()函數獲取當前本地時間,而後用+鏈接符把當前本地時間和處理後的字符串鏈接起來,再在末尾接上換行符rn,由於懶到只用記事本,換行符這裏只算一個小坑
# 保存文件爲txt,win環境路徑 outfile = open("C:\\Users\\sw\\Desktop\\route.txt","a+",encoding="utf-8",newline='\n') outfile.write(str) outfile.close() print("文件已保存到本地")
關於open函數,每個參數,此篇博文講的很是清楚很是詳細,感謝博主的整理,你們能夠看看,建議收藏
http://blog.csdn.net/doiido/a...
要強調的有2個參數
encoding和newline,由於用的比較少,而後不少文章並不會提到
有人可能會說,哇,真的懶
沒錯,我就是懶,並且再說了,寫了還沒人家寫的好,那我何須誤人子弟。
下面貼上所有代碼
import urllib.request import os from bs4 import BeautifulSoup import time def getHtml(url): html = urllib.request.urlopen(url).read() return html #獲取字符串,由於我在國外,路由器low到爆,編碼格式也蛋疼了我好久 html = getHtml("http://192.168.0.254/pub/fbx_info.txt") #將read()獲取的是bytes編碼轉化成str html = html.decode("ISO-8859-1") #再次檢測編碼 #print(type(html)) #操做字符串 html = html.split('WAN')[1].split('Ethernet')[0] time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #由於使用記事本,在記事本中換行只認\r\n str = time+html+"\r\n" # 保存文件爲txt,注意win環境路徑寫法 #print(type(str)) outfile = open("C:\\Users\\sw\\Desktop\\route.txt","a+",encoding="utf-8",newline='\n') outfile.write(str) outfile.close() print("文件已保存到本地")
原本當初的想法是每秒獲取一次流量,寫入txt,再讀txt,經過數據來繪圖可是有事暫時擱下了,只是win計劃任務定時運行,勉強湊活用下往後再學習補充