天氣數(shù)據(jù)抓取
from my wp blog
幫同學(xué)抓取天氣信息
選擇了一個(gè)不錯(cuò)的天氣網(wǎng)
http://lishi.tianqi.com/beijing/index.html
lxml解析html
先找一個(gè)靠譜的html解析工具beautifulsoup
本來這貨用起來還是挺方便的,不過我會(huì)一點(diǎn)xpath
,所以需要一個(gè)更高級(jí)的第三方庫(kù)lxml
import lxml.html
weather_url = 'http://lishi.tianqi.com/beijing/201404.html'
html = lxml.html.parse(weather_url)
ul = html.xpath('//*[@id="tool_site"]/div[2]/ul')
所需的數(shù)據(jù)
2014-04-01 2 29 多云 微風(fēng) 小于3級(jí)
頁(yè)面的ul是抓出來了瓮恭,但是還有一些混雜的內(nèi)容甘耿,要過濾掉沒用的東西
ul的第一個(gè)li中有個(gè)a標(biāo)簽琢岩,a中的內(nèi)容才是需要的辣往,而其他li中直接就是所需的內(nèi)容
def getLi(ul):
info = []
k = 0
for li in ul.itertext():
text = li if 0 != k else li[0]
if(text.strip()):
info.append(text)
k += 1
return info
已經(jīng)知道市栗,第一個(gè)數(shù)據(jù)是個(gè)日期沈贝,如果判斷出第一個(gè)數(shù)據(jù)是日期犬耻,那么整條數(shù)據(jù)都是有效的
import re
date_re = re.compile(r'^\d+-\d+-\d+$')
li = getLi(ul)
if(date_re.match(li[0])):
...(寫入數(shù)據(jù)庫(kù)或者文件)
python2的字符串是這樣的
decode encode
str ---------> unicode --------->str
當(dāng)想在程序中顯示中文的時(shí)候踩晶,要轉(zhuǎn)換成unicode字符
當(dāng)時(shí)想寫入文件或者數(shù)據(jù)庫(kù)的時(shí)候,要對(duì)unicode字符串進(jìn)行編碼
一般來說枕磁,抓取的我國(guó)網(wǎng)頁(yè)用gbk解碼渡蜻,寫入文件使用utf8編碼
import re
date_re = re.compile(r'^\d+-\d+-\d+$')
file = open('data.txt', 'w')
for ul in html.xpath('//*[@id="tool_site"]/div[2]/ul'):
li = getLi(ul)
if(date_re.match(li[0])):
for text in li:
file.write(text.encode('utf8') + ' ')
file.write('\n')
python連接mysql需要下載一個(gè)叫做MySQLdb的庫(kù)
開啟本地的apache和mysql服務(wù),連接和關(guān)閉數(shù)據(jù)庫(kù)
conn = MySQLdb.connect(host=setting.host, user=setting.user, passwd=setting.passwd, db=setting.db, port=setting.port, charset='utf8')
cursor = conn.cursor()
conn.commit()
cursor.close()
conn.close()
為什么有conn.commit()计济,其他的語(yǔ)言里面(至少是php)沒有見過
因?yàn)檫@樣才能真正把數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)中茸苇,完成一個(gè)事務(wù)
- 關(guān)于編碼
- utf-8
- 數(shù)據(jù)庫(kù)utf8-general-ci
- charset='utf8'
- 連接數(shù)據(jù)庫(kù)聲明字符編碼
- 寫入的字符串用utf8編碼
cursor.execute(sql.encode('utf8'))