喜歡用linux的TUI來打代碼,但是突然想起來要上課去了,想看天氣怎麼辦,切換GUI?太慢了吧,直接把天氣信息爬取下來以文本形式展現就好了。
使用方式要簡單,直接在bash輸入tianqi hangzhou
就要可以獲取到杭州的天氣情況,要獲取參數輸入,需要用到sys
模塊。
請求網站用request
模塊,解析用HTMLParser
。
選擇了 天氣網
從域名格式可以看到,杭州的天氣網址由“www.tianqi.com/”加“hangzhou”組成
也就是說只要把傳入的參數1加到“www.tianqi.com/”後面就好了。這就是我們要的請求網址,目前這個網站沒有反爬蟲,畢竟天氣網站都是要利民的嘛。
標籤什麼也很容易處理,就直接貼代碼了,可以作爲自己的天氣查詢命令。希望瞭解的小白請前往廖雪峯老師的python3教程
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from html.parser import HTMLParser
from urllib import request
import sys
class MyHTMLParser(HTMLParser):
flag=0
bflag=0
res=[]
is_get_data=0
def handle_starttag(self,tag,attrs):
if tag == 'div':
for attr in attrs:
if attr[1] == 'left':
if self.flag == 0 :
self.flag = 1
if ( tag == 'h2' or tag == 'h5' or tag == 'h6' ) and self.flag == 1:
self.is_get_data += 1
if tag == 'dd' and self.flag == 1:
for attr in attrs:
if attr[1] == 'week':
self.is_get_data += 1
elif attr[1] == 'shidu':
self.bflag = 1
if tag == 'span' and self.flag == 1:
self.bflag = 1
self.is_get_data += 1
if ( tag == 'b' or tag == 'br' ) and self.bflag == 1 and self.flag == 1:
self.is_get_data += 1
def handle_endtag(self,tag):
if tag == 'div' and self.flag == 1:
self.flag = -1
self.is_get_data = 0
if ( tag == 'span' or tag == 'dd' ) and self.flag == 1:
self.bflag = 0
def handle_data(self,data):
if self.is_get_data > 0 and self.flag == 1:
print(data)
self.is_get_data -= 1
weather_url='http://www.tianqi.com/'
if len(sys.argv) < 2 :
weather_url += 'hangzhou/'
else :
weather_url += sys.argv[1] + '/'
with request.urlopen(weather_url) as f:
data = f.read().decode('utf-8')
parser=MyHTMLParser()
parser.feed(data)
for item in MyHTMLParser.res:
print(item)
hhh,開學快樂。