作者: 杭州-冬
地址:https://github.com/small99/deeptest/tree/master/第一期/杭州-冬 聲明:本文已獲作者授權(quán)轉(zhuǎn)載,,著作權(quán)歸作者所有,。 編輯:苦葉子 作者為開(kāi)源優(yōu)測(cè)-積微速成計(jì)劃第一期參與者,,每天都堅(jiān)持學(xué)習(xí),練習(xí)每日的代碼任務(wù)
這是一個(gè)免費(fèi)的組團(tuán)成長(zhǎng)計(jì)劃 如何參與到開(kāi)源優(yōu)測(cè)-積微速成計(jì)劃任務(wù)
記練習(xí)爬蟲(chóng)基礎(chǔ)遭遇的坑 一,、過(guò)程中的坑 爬百度首頁(yè)時(shí),獲取不了html,只顯示幾行 from urllib import request import ssl
if name == "main": resp=request.Request('https://www.baidu.com')
#有時(shí)這里會(huì)出現(xiàn)decodeerrror,根據(jù)情況修改字符參數(shù)或者加個(gè)ignore #默認(rèn)第二個(gè)參數(shù)為strict--有時(shí)會(huì)造成錯(cuò)誤
data=resp.read().decode('UTF-8')
data=resp.read()
print(data) 執(zhí)行后只是出現(xiàn)了下面幾行簡(jiǎn)單的結(jié)果: <script> location.replace(location.href.replace("https://","http://")); </script> 啥都沒(méi)有 百度首頁(yè)源代碼那么多 只顯示了這幾行 而且似乎和百度首頁(yè)的html沒(méi)什么關(guān)系 查了下 一種說(shuō)法是 那個(gè)noscript的東東起到了反爬的效果,所以我看不到html內(nèi)容
后來(lái)我看別人的教程都可以,仔細(xì)對(duì)比后 我把https 改成 http 然后那個(gè)無(wú)比激動(dòng)的看到了百度首頁(yè)的html 了解到 訪(fǎng)問(wèn)https的網(wǎng)站時(shí) 大概是ssl這個(gè)東西作怪 該類(lèi)型的網(wǎng)站都要經(jīng)過(guò)安全認(rèn)證 其實(shí)執(zhí)行結(jié)果仔細(xì)看的話(huà) 也可以看出些問(wèn)題 上面說(shuō)了是http 而不是 https.
所以仔細(xì)分析提示很重要,不要提示都沒(méi)搞清楚就各種搞 根據(jù)提示搞清原因很重要--能讓你快速定位問(wèn)題所在 快速解決問(wèn)題 --看提示 仔細(xì)分析 定位問(wèn)題 --各種可能都試一下,大膽推翻自己的的理解 第一個(gè)也是這幾個(gè)月心得之一,,今天再次讓我心服口服,。 剛開(kāi)始提示啥的哪會(huì)看,,后來(lái)犯錯(cuò)多了,發(fā)現(xiàn)提示的都是那幾個(gè)東西,, 想起以前怎么改的一路下去就正確了
其實(shí)這個(gè)提示我也看了,不過(guò)沒(méi)太仔細(xì)而且理解錯(cuò)誤, 我以為這是正常html的一部分 告訴讀者會(huì)把輸入的http 換成htts, 我一想也對(duì),瀏覽器上面也是https。結(jié)果正好相反 二,、編碼問(wèn)題 在爬一些網(wǎng)站有這個(gè)報(bào)錯(cuò) File "crawler_eg.py", line 10, in data=resp.read().decode('UTF-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 126: invalid start byte
根據(jù)提示 解碼錯(cuò)誤 2個(gè)方法 --選擇解碼字符集錯(cuò)誤 把utf-8換成其它字符集 或--字符集正確,但不屬于字符集解碼內(nèi)容的部分?jǐn)?shù)據(jù)轉(zhuǎn)化出錯(cuò) decode('utf-8','ignore')--默認(rèn)第二個(gè)參數(shù)為strict,改為ignore后直接忽視不能轉(zhuǎn)換的數(shù)據(jù) 三,、常見(jiàn)的一些錯(cuò)誤提示 req=request.Request(http://www.) ^ SyntaxError: invalid syntax
--代碼中有無(wú)效字符(非法或不符合規(guī)范),通常錯(cuò)誤都在標(biāo)注的 ^ 附近(也不一定哦) IndentationError:unexpected indent
--這類(lèi)通常你的代碼縮進(jìn)出現(xiàn)錯(cuò)誤,找個(gè)好的編輯器,它會(huì)用整齊劃一的線(xiàn)條給你一個(gè)標(biāo)記。照著線(xiàn)條調(diào)整就好 [總計(jì)175篇]2017年測(cè)試技術(shù)精選大集合
分享軟件測(cè)試開(kāi)源技術(shù),、經(jīng)驗(yàn),、方案的首發(fā)平臺(tái)
|