Python爬蟲實例扒取2345天氣預(yù)報
寒假里學(xué)習(xí)了一下Python爬蟲,使用最簡單的方法扒取需要的天氣數(shù)據(jù),對,沒聽錯,最簡單的方法。甚至沒有一個函數(shù)封裝。。
網(wǎng)址:http://tianqi.2345.com/wea_history/53892.htm
火狐中右鍵查看網(wǎng)頁源代碼,沒有發(fā)現(xiàn)天氣數(shù)據(jù),因此推斷網(wǎng)頁采用的json格式數(shù)據(jù)。
右擊->查看元素->網(wǎng)絡(luò)->JS,找到了位置

用Python爬蟲下載為json格式數(shù)據(jù)存儲下來,代碼如下:
#-*- coding:utf-8 -*-
import urllib2
import json
months = [1,2,3,4,5,6,7,8,9,10,11,12]
years = [2011,2012,2013,2014,2015,2016]
city = [53892] #邯鄲代碼53892
for y in years:
for m in months:
for c in city:
url = "http://tianqi.2345.com/t/wea_history/js/"+str(c)+"_"+str(y)+str(m)+".js?qq-pf-to=pcqq.c2c"
print url
html = urllib2.urlopen(url)
srcData = html.read()
#JsonData = json.loads(srcData)
file = open("d:/json/"+str(c)+"handan/weather"+str(c)+"_"+str(y)+str(m)+".json","w")
file.write(srcData)
file.close()
扒取存到本地:因為是剛學(xué),學(xué)一點就動手實踐了一下,還沒有學(xué)到j(luò)son的轉(zhuǎn)換,直接使用的正則匹配,提取json中的數(shù)據(jù),直接打印
提取轉(zhuǎn)換json文件中的數(shù)據(jù)Python代碼:
#-*- coding:utf-8 -*-
import json
import re
import time
Year = [2014]
Month = [1]
for y in Year:
for m in Month:
"""
2016年2月15日終于改成功。
是因為正則匹配后的編碼問題,導(dǎo)致輸出時無法顯示。
在每個正則匹配的元組后添加 .decode('gbk').encode('utf-8'),成功輸出
"""
content = fRead.read()
pattern = re.compile('{ymd:\'(.*?)\',bWendu:\'(.*?)\',yWendu:\'(.*?)\',tianqi:\'(.*?)\',fengxiang:\'(.*?)\',fengli:\'(.*?)\'},',re.S)
items = re.findall(pattern,content)
for item in items:
print item[0].decode('gbk').encode('utf-8'),","+item[1].decode('gbk').encode('utf-8'),","+item[2].decode('gbk').encode('utf-8'),","+item[3].decode('gbk').encode('utf-8'),","+item[4].decode('gbk').encode('utf-8'),","+item[5].decode('gbk').encode('utf-8')
time.sleep(0.1)
fRead.close()
使用Sublime Text 3運行
使用正則處理的一大問題就是,格式不整齊,總會漏掉一些數(shù)據(jù)。可能是由于匹配的速度過快導(dǎo)致部分數(shù)據(jù)缺失,但是通過time.sleep() 睡眠依舊不能解決問題。
由此可以看出正則匹配時的缺陷,待以后使用Python中專門用于處理json數(shù)據(jù)的包以后,再重新試一下
相關(guān)文章
python使用Psutil模塊實現(xiàn)獲取計算機相關(guān)信息
psutil 是一個跨平臺的庫,用于獲取進程和系統(tǒng)運行狀態(tài)的信息,這篇文章主要為大家詳細介紹了python如何調(diào)用psutil模塊實現(xiàn)獲取計算機相關(guān)信息,有需要的小伙伴可以了解下2023-11-11
python神經(jīng)網(wǎng)絡(luò)使用tensorflow構(gòu)建長短時記憶LSTM
這篇文章主要為大家介紹了python機器學(xué)習(xí)tensorflow構(gòu)建長短時記憶網(wǎng)絡(luò)LSTM,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
python web自制框架之接受url傳遞過來的參數(shù)實例
今天小編就為大家分享一篇python web自制框架之接受url傳遞過來的參數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
pytorch: Parameter 的數(shù)據(jù)結(jié)構(gòu)實例
今天小編就為大家分享一篇pytorch: Parameter 的數(shù)據(jù)結(jié)構(gòu)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
簡單快捷:NumPy入門教程的環(huán)境設(shè)置
NumPy是Python語言的一個擴展程序庫,支持高階大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學(xué)函數(shù)庫,本教程是為那些想了解NumPy的基礎(chǔ)知識和各種功能的人準備的,它對算法開發(fā)人員特別有用,需要的朋友可以參考下2023-10-10
Python+Redis從零打造分布式鎖實戰(zhàn)示例
Redis作為一款高性能的內(nèi)存鍵值數(shù)據(jù)庫,憑借其支持原子操作、高并發(fā)和數(shù)據(jù)持久化等特性,非常適合用來實現(xiàn)分布式鎖,本文將詳細探討如何使用Python結(jié)合Redis從簡單到復(fù)雜地實現(xiàn)分布式鎖,并提供相應(yīng)的示例代碼2024-01-01

