您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)python爬蟲采集中會遇到哪些問題,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1、需要帶著cookie信息訪問,比如大多數(shù)的社交化軟件,基本上都是需要用戶登錄之后,才能看到有價值的東西,其實很簡單,我們可以使用Python提供的cookielib模塊,實現(xiàn)每次訪問都帶著源網(wǎng)站給的cookie信息去訪問,這樣只要我們成功模擬了登錄,爬蟲處于登錄狀態(tài),那么我們就可以采集到登錄用戶看到的一切信息了。下面是使用cookie對httpRequest()方法的修改:
ckjar = cookielib.MozillaCookieJar() cookies = urllib2.HTTPCookieProcessor(ckjar) #定義cookies對象 def httpRequest(url): ''''' @summary: 網(wǎng)絡(luò)請求 ''' try: ret = None SockFile = None request = urllib2.Request(url) request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)') request.add_header('Pragma', 'no-cache') opener = urllib2.build_opener(cookies) #傳遞cookies對象 SockFile = opener.open(request) ret = SockFile.read() finally: if SockFile: SockFile.close() return ret
2、編碼問題。網(wǎng)站目前最多的兩種編碼:utf-8,或者gbk,當(dāng)我們采集回來源網(wǎng)站編碼和我們數(shù)據(jù)庫存儲的編碼不一致時,比如http://163.com的編碼使用的是gbk,而我們需要存儲的是utf-8編碼的數(shù)據(jù),那么我們可以使用Python中提供的encode()和decode()方法進行轉(zhuǎn)換,比如:
content = content.decode('gbk', 'ignore') #將gbk編碼轉(zhuǎn)為unicode編碼 content = content.encode('utf-8', 'ignore') #將unicode編碼轉(zhuǎn)為utf-8編碼
中間出現(xiàn)了unicode編碼,我們需要轉(zhuǎn)為中間編碼unicode,才能向gbk或者utf-8轉(zhuǎn)換。
3、網(wǎng)頁中標(biāo)簽不完整,比如有些源代碼中出現(xiàn)了起始標(biāo)簽,但沒有結(jié)束標(biāo)簽,HTML標(biāo)簽不完整,就會影響我們抓取結(jié)構(gòu)化數(shù)據(jù),我們可以通過Python的BeautifulSoup模塊,先對源代碼進行清洗,再分析獲取內(nèi)容。
4、某些網(wǎng)站使用JS來生存網(wǎng)頁內(nèi)容。當(dāng)我們直接查看源代碼的時候,發(fā)現(xiàn)是一堆讓人頭疼的JS代碼??梢允褂胢ozilla、webkit等可以解析瀏覽器的工具包解析js、ajax,雖然速度會稍微慢點。
5、圖片是flash形式存在的。當(dāng)圖片中的內(nèi)容是文字或者數(shù)字組成的字符,那這個就比較好辦,我們只要利用ocr技術(shù),就能實現(xiàn)自動識別了,但是如果是flash鏈接,我們將整個URL存儲起來了。
6、一個網(wǎng)頁出現(xiàn)多個網(wǎng)頁結(jié)構(gòu)的情況,這樣我們?nèi)绻皇且惶鬃ト∫?guī)則,那肯定不行,所以需要配置多套模擬進行協(xié)助配合抓取。
7、應(yīng)對源網(wǎng)站的監(jiān)控。抓取別人的東西,畢竟是不太好的事情,所以一般網(wǎng)站都會有針對爬蟲禁止訪問的限制。一個好的采集系統(tǒng),應(yīng)該是,不管我們的目標(biāo)數(shù)據(jù)在何處,只要是用戶能夠看到的,我們都能采集回來。所見即所得的無阻攔式采集,無論是否需要登錄的數(shù)據(jù)都能夠順利采集。大部分有價值的信息,一般都需要登錄才能看到,比如社交網(wǎng)站,為了應(yīng)對登錄的網(wǎng)站要有模擬用戶登錄的爬蟲系統(tǒng),才能正常獲取數(shù)據(jù)。不過社會化網(wǎng)站都希望自己形成一個閉環(huán),不愿意把數(shù)據(jù)放到站外,這種系統(tǒng)也不會像新聞等內(nèi)容那么開放的讓人獲取。這些社會化網(wǎng)站大部分會采取一些限制防止機器人爬蟲系統(tǒng)爬取數(shù)據(jù),一般一個賬號爬取不了多久就會被檢測出來被禁止訪問了。那是不是我們就不能爬取這些網(wǎng)站的數(shù)據(jù)呢?肯定不是這樣的,只要社會化網(wǎng)站不關(guān)閉網(wǎng)頁訪問,正常人能夠訪問的數(shù)據(jù),我們也能訪問。說到底就是模擬人的正常行為操作,專業(yè)一點叫“反監(jiān)控”。
關(guān)于python爬蟲采集中會遇到哪些問題就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。