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