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='https://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,开学快乐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值