為什么說(shuō)python適合寫爬蟲(chóng)
抓取網(wǎng)頁(yè)本身的接口
相比與其他靜態(tài)編程語(yǔ)言,如java,c#,C++,python抓取網(wǎng)頁(yè)文檔的接口更簡(jiǎn)潔;相比其他動(dòng)態(tài)腳本語(yǔ)言,如perl,shell,python的urllib2包提供了較為完整的訪問(wèn)網(wǎng)頁(yè)文檔的API。(當(dāng)然ruby也是很好的選擇)
此外,抓取網(wǎng)頁(yè)有時(shí)候需要模擬瀏覽器的行為,很多網(wǎng)站對(duì)于生硬的爬蟲(chóng)抓取都是封殺的。這是我們需要模擬user agent的行為構(gòu)造合適的請(qǐng)求,譬如模擬用戶登陸、模擬session/cookie的存儲(chǔ)和設(shè)置。在python里都有非常優(yōu)秀的第三方包幫你搞定,如Requests,mechanize
網(wǎng)頁(yè)抓取后的處理
抓取的網(wǎng)頁(yè)通常需要處理,比如過(guò)濾html標(biāo)簽,提取文本等。python的beautifulsoap提供了簡(jiǎn)潔的文檔處理功能,能用極短的代碼完成大部分文檔的處理。
其實(shí)以上功能很多語(yǔ)言和工具都能做,但是用python能夠干得最快,最干凈。Life is short, u need python.
沖最后一句‘Lifeisshort,uneedpython',立馬在當(dāng)當(dāng)上買了本python的書!以前就膜拜過(guò)python大牛,一直想學(xué)都扯于各種借口遲遲沒(méi)有開(kāi)始。。
py用在linux上很強(qiáng)大,語(yǔ)言挺簡(jiǎn)單的。
- NO.1 快速開(kāi)發(fā)(唯一能和python比開(kāi)發(fā)效率的語(yǔ)言只有rudy)語(yǔ)言簡(jiǎn)潔,沒(méi)那么多技巧,所以讀起來(lái)很清楚容易。
- NO.2跨平臺(tái)(由于python的開(kāi)源,他比java更能體現(xiàn)"一次編寫到處運(yùn)行"
- NO.3解釋性( 無(wú)須編譯,直接運(yùn)行/調(diào)試代碼)
- NO.4構(gòu)架選擇太多(GUI構(gòu)架方面 主要的就有 wxPython, tkInter, PyGtk, PyQt 。
知識(shí)點(diǎn)擴(kuò)展:
用python寫爬蟲(chóng)相關(guān)的實(shí)例:
# coding:utf-8
import urllib
domain = 'http://www.liaoxuefeng.com' #廖雪峰的域名
path = r'C:\Users\cyhhao2013\Desktop\temp\\' #html要保存的路徑
# 一個(gè)html的頭文件
input = open(r'C:\Users\cyhhao2013\Desktop\0.html', 'r')
head = input.read()
# 打開(kāi)python教程主界面
f = urllib.urlopen("http://www.需要爬取的網(wǎng)址.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000")
home = f.read()
f.close()
# 替換所有空格回車(這樣容易好獲取url)
geturl = home.replace("\n", "")
geturl = geturl.replace(" ", "")
# 得到包含url的字符串
list = geturl.split(r'em;"><ahref="')[1:]
# 強(qiáng)迫癥犯了,一定要把第一個(gè)頁(yè)面也加進(jìn)去才完美
list.insert(0, '/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000">')
# 開(kāi)始遍歷url List
for li in list:
url = li.split(r'">')[0]
url = domain + url #拼湊url
print url
f = urllib.urlopen(url)
html = f.read()
# 獲得title為了寫文件名
title = html.split("<title>")[1]
title = title.split(" - 廖雪峰的官方網(wǎng)站</title>")[0]
# 要轉(zhuǎn)一下碼,不然加到路徑里就悲劇了
title = title.decode('utf-8').replace("/", " ")
# 截取正文
html = html.split(r'<!-- block main -->')[1]
html = html.split(r'<h4>您的支持是作者寫作最大的動(dòng)力!</h4>')[0]
html = html.replace(r'src="', 'src="' + domain)
# 加上頭和尾組成完整的html
html = head + html+"</body></html>"
# 輸出文件
output = open(path + "%d" % list.index(li) + title + '.html', 'w')
output.write(html)
output.close()
到此這篇關(guān)于為什么說(shuō)python適合寫爬蟲(chóng)的文章就介紹到這了,更多相關(guān)為什么用python寫爬蟲(chóng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django實(shí)現(xiàn)基于類的分頁(yè)功能
這篇文章主要為大家詳細(xì)介紹了Django實(shí)現(xiàn)基于類的分頁(yè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
Python+Pandas實(shí)現(xiàn)數(shù)據(jù)透視表
對(duì)于數(shù)據(jù)透視表,相信對(duì)于Excel比較熟悉的小伙伴都知道如何使用它。本文將利用Python Pandas實(shí)現(xiàn)數(shù)據(jù)透視表功能,感興趣的可以學(xué)習(xí)一下2022-06-06
Python 實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)-循環(huán)隊(duì)列的操作方法
這篇文章主要介紹了Python 實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)-循環(huán)隊(duì)列的操作方法,需要的朋友可以參考下2019-07-07
詳解Python如何實(shí)現(xiàn)查看WiFi密碼
這篇文章主要為大家詳細(xì)介紹了如何使用python來(lái)試試看看能不能讀取到已連接過(guò)WIFI的密碼,文中的示例代碼講解詳細(xì),?感興趣的小伙伴可以了解下2023-11-11
Python計(jì)算機(jī)視覺(jué)SIFT尺度不變的圖像特征變換
這篇文章主要為大家介紹了Python計(jì)算機(jī)視覺(jué)SIFT尺度不變的圖像特征變換,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
pycharm 在windows上編輯代碼用linux執(zhí)行配置的方法
今天小編就為大家分享一篇pycharm 在windows上編輯代碼用linux執(zhí)行配置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10

