python3.6 小爬蟲爬取當日天氣情況

喜歡用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,開學快樂。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章