摘要:寫在前面本人的所有文章只適合善于使用百度的人,因?yàn)樗谢A(chǔ)知識(shí)個(gè)個(gè)博客復(fù)制粘貼了無數(shù)遍,我這里均不會(huì)詳細(xì)講述。
寫在前面
本人的所有文章只適合善于使用百度的人,因?yàn)樗谢A(chǔ)知識(shí)個(gè)個(gè)博客復(fù)制粘貼了無數(shù)遍,我這里均不會(huì)詳細(xì)講述。
在這里我表示所有不經(jīng)驗(yàn)證的轉(zhuǎn)載都是耍流氓,把一篇篇錯(cuò)誤的文章轉(zhuǎn)載的到處都是,不知道浪費(fèi)了多少人的時(shí)間精力去反復(fù)調(diào)試錯(cuò)誤的代碼,尤其是對(duì)初學(xué)者有極大的打擊性。
大家在學(xué)習(xí)python爬蟲的過程中,會(huì)發(fā)現(xiàn)一個(gè)問題,語法我看完了,說的也很詳細(xì),我也認(rèn)真看了,爬蟲還是不會(huì)寫,或者沒有思路,所以我的所有文章都會(huì)從實(shí)例的角度來解析一些常見的問題和報(bào)錯(cuò)。
環(huán)境交代:win10+python3.6
代碼非常簡(jiǎn)單,
模擬登陸,沒有
網(wǎng)頁標(biāo)簽過濾,沒有
多線程,也沒有
文本處理,只有涉及到字符串截取
本地文本寫入,有
這么低級(jí)的代碼是因?yàn)檫@個(gè)路由器頁面非常垃圾,用不到~~~,不過這樣也適合初學(xué)者觀看,當(dāng)然了,后續(xù)會(huì)嘗試添加更多功能
首先我們對(duì)自己的需求要進(jìn)行分析,新手嘛,先把復(fù)雜的東西簡(jiǎn)單化,模塊化,整理出思路,再一步步的去實(shí)現(xiàn),最后整合。
網(wǎng)頁編碼,編碼沒有處理好會(huì)報(bào)錯(cuò),涉及到一些函數(shù)
編碼轉(zhuǎn)換,read()方法獲取到的非字符串類型,要預(yù)先進(jìn)行處理
方法有很多,正則,字符串截取,等等不一一介紹,適合的才是最好的,我覺得正則是很強(qiáng)大的,但是也是相當(dāng)反人類的
注意win下路徑和linux下路徑寫法不同
寫入的編碼類型需要進(jìn)行處理
重點(diǎn)講一講我遇到的坑
一般來講右鍵查看頁面編碼,如圖所示,因?yàn)樵趪馐欠浅F婀值木幋a
當(dāng)時(shí)我就蒙蔽了,這是什么鬼~
這個(gè)時(shí)候我們需要用到chardet庫來判斷編碼類型,拿百度舉例,自行百度python第三方庫如何安裝,這里不做闡述
import chardet import urllib.request html = urllib.request.urlopen("http://www.baidu.com/").read() print (chardet.detect(html))
得到的結(jié)果如下:
C:pythonpython.exe D:/python/test/2.py {"encoding": "utf-8", "confidence": 0.99, "language": ""} Process finished with exit code 01.取得字符串
import urllib.request import os from bs4 import BeautifulSoup import time def getHtml(url): html = urllib.request.urlopen(url).read() return html #獲取字符串,因?yàn)槲以趪?,路由器low到爆,編碼格式也蛋疼了我很久 html = getHtml("http://192.168.0.254/pub/fbx_info.txt") #將read()獲取的是bytes編碼轉(zhuǎn)化成str html = html.decode("ISO-8859-1")
因?yàn)槭菤W洲網(wǎng)站,獲取的卻是一個(gè) 【ISO-8859-1】的網(wǎng)頁編碼。
由于這里我們用read()方法讀取,獲取到的是bytes類型,此時(shí)需要轉(zhuǎn)換成str類型的,才可以進(jìn)行下一步的處理,如果不處理就會(huì)有下列錯(cuò)誤
TypeError: a bytes-like object is required, not "str"
這里可以使用decode()方法處理一下
html = html.decode("ISO-8859-1")
使用type()方法檢測(cè)下編碼
print(type(html))
反饋,成功
#操作字符串 html = html.split("WAN")[1].split("Ethernet")[0] time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #因?yàn)槭褂糜浭卤荆谟浭卤局袚Q行只認(rèn) str = time+html+" "
這里我使用的是split()方法,使用方法呢,推薦大家學(xué)會(huì)查手冊(cè),這里也不詳細(xì)再解釋了。
我通過split()方法截取到了自己需要的字符串,然后用time()函數(shù)獲取當(dāng)前本地時(shí)間,然后用+連接符把當(dāng)前本地時(shí)間和處理后的字符串連接起來,再在末尾接上換行符rn,因?yàn)閼械街挥糜浭卤荆瑩Q行符這里只算一個(gè)小坑
# 保存文件為txt,win環(huán)境路徑 outfile = open("C:UsersswDesktop oute.txt","a+",encoding="utf-8",newline=" ") outfile.write(str) outfile.close() print("文件已保存到本地")
關(guān)于open函數(shù),每一個(gè)參數(shù),此篇博文講的非常清楚非常詳細(xì),感謝博主的整理,大家可以看看,建議收藏
http://blog.csdn.net/doiido/a...
要強(qiáng)調(diào)的有2個(gè)參數(shù)
encoding和newline,因?yàn)橛玫谋容^少,然后很多文章并不會(huì)提到
有人可能會(huì)說,哇,真的懶
沒錯(cuò),我就是懶,而且再說了,寫了還沒人家寫的好,那我何必誤人子弟。
下面貼上全部代碼
import urllib.request import os from bs4 import BeautifulSoup import time def getHtml(url): html = urllib.request.urlopen(url).read() return html #獲取字符串,因?yàn)槲以趪?,路由器low到爆,編碼格式也蛋疼了我很久 html = getHtml("http://192.168.0.254/pub/fbx_info.txt") #將read()獲取的是bytes編碼轉(zhuǎn)化成str html = html.decode("ISO-8859-1") #再次檢測(cè)編碼 #print(type(html)) #操作字符串 html = html.split("WAN")[1].split("Ethernet")[0] time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #因?yàn)槭褂糜浭卤?,在記事本中換行只認(rèn) str = time+html+" " # 保存文件為txt,注意win環(huán)境路徑寫法 #print(type(str)) outfile = open("C:UsersswDesktop oute.txt","a+",encoding="utf-8",newline=" ") outfile.write(str) outfile.close() print("文件已保存到本地")
本來當(dāng)初的想法是每秒獲取一次流量,寫入txt,再讀txt,通過數(shù)據(jù)來繪圖
但是有事暫時(shí)擱下了,只是win計(jì)劃任務(wù)定時(shí)運(yùn)行,勉強(qiáng)湊活用下日后再學(xué)習(xí)補(bǔ)充
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/41054.html
摘要:簡(jiǎn)介在使用爬取桔子公司信息,用來進(jìn)行分析,了解創(chuàng)業(yè)公司的一切情況,之前使用寫了一個(gè)默認(rèn)線程是的單個(gè)實(shí)例,為了防止被設(shè)置了下載的速度,萬多個(gè)公司信息爬了天多才完成,現(xiàn)在想到使用分布式爬蟲來提高效率。 簡(jiǎn)介 在使用 scrapy 爬取 IT桔子公司信息,用來進(jìn)行分析,了解 IT 創(chuàng)業(yè)公司的一切情況,之前使用 scrapy 寫了一個(gè)默認(rèn)線程是10的單個(gè)實(shí)例,為了防止被 ban IP 設(shè)置了下...
摘要:簡(jiǎn)介在使用爬取桔子公司信息,用來進(jìn)行分析,了解創(chuàng)業(yè)公司的一切情況,之前使用寫了一個(gè)默認(rèn)線程是的單個(gè)實(shí)例,為了防止被設(shè)置了下載的速度,萬多個(gè)公司信息爬了天多才完成,現(xiàn)在想到使用分布式爬蟲來提高效率。 簡(jiǎn)介 在使用 scrapy 爬取 IT桔子公司信息,用來進(jìn)行分析,了解 IT 創(chuàng)業(yè)公司的一切情況,之前使用 scrapy 寫了一個(gè)默認(rèn)線程是10的單個(gè)實(shí)例,為了防止被 ban IP 設(shè)置了下...
摘要:如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。運(yùn)行結(jié)果以上是讀取文件的方法。為了輸出中文,我們還需要指定一個(gè)參數(shù)為,另外規(guī)定文件輸出的編碼。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---30、解析庫的使用:PyQuery下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---32、數(shù)據(jù)存儲(chǔ):關(guān)系型數(shù)據(jù)庫存儲(chǔ):MySQL 我們用解析器解析出數(shù)據(jù)之后,接下來的一步就是對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)了,保存的形式可以...
摘要:上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)請(qǐng)求庫安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)解析庫的安裝的安裝在上一節(jié)我們了解了的配置方法,配置完成之后我們便可以用來驅(qū)動(dòng)瀏覽器來做相應(yīng)網(wǎng)頁的抓取。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)請(qǐng)求庫安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)解析庫的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---1、請(qǐng)求庫安裝:Requests、Selenium、ChromeDriver下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)--...
閱讀 1166·2021-11-24 09:39
閱讀 3668·2021-11-22 13:54
閱讀 2639·2021-10-11 10:59
閱讀 892·2021-09-02 15:40
閱讀 1137·2019-08-30 15:55
閱讀 1108·2019-08-30 13:57
閱讀 2439·2019-08-30 13:17
閱讀 3083·2019-08-29 18:32