說(shuō)道爬蟲(chóng)大家或許感覺(jué)非常神秘,其實(shí)它沒(méi)有我們想象的那么神奇(當(dāng)然,google和baidu的爬蟲(chóng)是一場(chǎng)復(fù)雜和強(qiáng)大的,它的強(qiáng)大不是爬蟲(chóng)本身強(qiáng)大,而是后臺(tái)的數(shù)據(jù)處理和數(shù)據(jù)挖掘算法非常強(qiáng)大),今天我們就來(lái)揭開(kāi)它神秘的面紗。呵呵,簡(jiǎn)單兩步就可以實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)天氣爬蟲(chóng)程序。。。
爬蟲(chóng)簡(jiǎn)單說(shuō)來(lái)包括兩個(gè)部分:1.獲得網(wǎng)頁(yè)文本信息。2.數(shù)據(jù)分析,獲取其中我們想要的數(shù)據(jù)。
1、獲得網(wǎng)頁(yè)文本信息。
python在獲取html方面十分方便,有了urllib庫(kù)的幫助,只需要幾行代碼就可以實(shí)現(xiàn)我們需要的功能。
#引入urllib庫(kù)
importurllib
defgetHtml(url):
page=urllib.urlopen(url)
html=page.read()
page.close()
returnhtml
這里返回的就是網(wǎng)頁(yè)的源代碼,也就是html代碼。
那我們?nèi)绾螐闹械玫轿覀兿胍男畔⒛?那就需要用到在網(wǎng)頁(yè)分析里面最最常用的工具-正則表達(dá)式了。
2、根據(jù)正則表達(dá)式等獲得需要的內(nèi)容。
使用正則表達(dá)式時(shí)需要仔細(xì)觀察該網(wǎng)頁(yè)信息的結(jié)構(gòu),并寫(xiě)出正確的正則表達(dá)式。
python正則表達(dá)式的使用也很簡(jiǎn)潔:
#引入正則表達(dá)式庫(kù)
importre
defgetWeather(html):
reg='(.*?).*?(.*?).*?(.*?)'
weatherList=re.compile(reg).findall(html)
returnweatherList
說(shuō)明:
其中reg是正則表達(dá)式,html是第一步獲得的文本。findall的作用是找到html中所有符合正則匹配的字符串并存放到weatherList中。之后再枚舉weatheList中的數(shù)據(jù)輸出即可。
這里的正則表達(dá)式reg有兩個(gè)地方要注意。
一個(gè)是“(.*?)”。只要是()中的內(nèi)容都是我們將要獲得的內(nèi)容,如果有多個(gè)括號(hào),那么findall的每個(gè)結(jié)果就都包含這幾個(gè)括號(hào)中的內(nèi)容。上面有三個(gè)括號(hào),分別對(duì)應(yīng)城市、最低溫和最高溫。
另一個(gè)是“.*?”。python的正則匹配默認(rèn)是貪婪的,即默認(rèn)盡可能多地匹配字符串。如果在末尾加上問(wèn)號(hào),則表示非貪婪模式,即盡可能少地匹配字符串。在這里,由于有多個(gè)城市的信息需要匹配,所以需要使用非貪婪模式,否則匹配結(jié)果只剩下一個(gè),且是不正確的。
以上內(nèi)容為大家介紹了Python簡(jiǎn)單兩步實(shí)現(xiàn)天氣爬蟲(chóng)采集器,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.em-kal.com/