博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬取中国天气网
阅读量:2069 次
发布时间:2019-04-29

本文共 2601 字,大约阅读时间需要 8 分钟。

基于requests库制作的爬虫。

使用方法:打开终端输入 “python3 weather.py 北京(或你所在的城市)"

程序正常运行需要在同文件夹下加入一个“data.csv”文件,内容请参考链接: 

运行效果:

源码:

'''想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载!'''import sysimport reimport requestsimport webbrowserfrom PIL import Imagefrom requests.exceptions import RequestExceptionimport csvdata={}with open("data.csv",'r') as f:    rawinfos=list(csv.reader(f))    for i in rawinfos:        data[i[0]]=i[1]def get_one_page(url,headers):    try:        response=requests.get(url,headers=headers)        if response.status_code==200:            response.encoding='utf-8'            return response.text        return None    except RequestException:        return Noneheaders={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7'}try:    address=data[sys.argv[1]]except:    sys.exit("\033[31m无该城市!\033[0m")html=get_one_page('http://www.weather.com.cn/weather1d/'+address+'.shtml',headers)if not html:    print("城市代码有误!")    exit(1)ADDRESS=re.findall('(.*?)',html)aim=re.findall('\n\n(.*?)\n(.*?)\n

(.*?)

\n',html,re.S)print(ADDRESS[0][1:5])print("当前日期:%s月%s日,%s"%(aim[0][0],aim[0][1],aim[0][4]))print("更新时间:%s:00"%aim[0][2])print("当前天气:%s"%aim[0][5])print("今日温度:%s"%aim[0][6])print("空气质量:"+airdata[0][0]+","+airdata[0][2])ask_ok=input("是否深入查看(Y/N):")if ask_ok=='Y' or ask_ok=='y': lightdata=re.findall('
  • \n\n(.*?)\n(.*?)\n

    (.*?)

    \n
  • ',html,re.S) colddata=re.findall('
  • \n(.*?)\n(.*?)\n

    (.*?)

    ',html,re.S) weardata=re.findall('
  • \n(.*?)(.*?)\n(.*?)\n

    (.*?)

    ',html,re.S) washdata=re.findall('
  • \n\n(.*?)\n(.*?)\n

    (.*?)

    \n
  • ',html,re.S) bloodata=re.findall('
  • \n\n(.*?)\n(.*?)\n

    (.*?)

    \n
  • ',html,re.S) detail = re.findall('hour3data={"1d":(.*?),"23d"', html, re.S) detail = re.findall('"(.*?)"', detail[0], re.S) print("--"*40) print('详细数据:') print("%-10s\t%-10s\t%-10s\t%-10s\t%-10s"%("时间","状态","温度","风向","风力")) for each in detail: each=each.split(',') print("%-10s\t%-10s\t%-10s\t%-10s\t%-10s"%(each[0],each[2],each[3],each[4],each[5])) print("--"*40) print("%s:\t%s\t%s"%(lightdata[0][1],lightdata[0][0],lightdata[0][2])) print("%s:\t%s"%(colddata[0][1],colddata[0][2])) print("%s:\t%s\t%s"%(washdata[0][1],washdata[0][0],washdata[0][2])) print("血糖指数:\t%s,%s"%(bloodata[0][0],bloodata[0][2])) print("%s:\t%s\t%s"%(weardata[0][2],weardata[0][1],weardata[0][3])) print("--"*40) flag=input("是否查看详细穿衣建议(Y/N):") if flag=='Y' or flag=='y': webbrowser.open("http://www.weather.com.cn/forecast/ct.shtml?areaid="+address)print("数据来源:中央气象台")

     

    转载地址:http://einmf.baihongyu.com/

    你可能感兴趣的文章
    如何在 Linux 上自动设置 JAVA_HOME 环境变量
    查看>>
    MSSQL复习笔记
    查看>>
    Spring基础知识汇总
    查看>>
    Chrome扩展插件
    查看>>
    log4j.xml 日志文件配置
    查看>>
    如何删除MySql服务
    查看>>
    BAT Java和Rti环境变量设置
    查看>>
    NodeJs npm install 国内镜像
    查看>>
    python3.5.2 mysql Exccel
    查看>>
    mysqlDump 导出多表,其中部分表有限制数据内容
    查看>>
    vi 替换方法
    查看>>
    BAT 相关
    查看>>
    ANT集成SVNANT访问SVN(Subversion)
    查看>>
    高可用架构-- MySQL主从复制的配置
    查看>>
    jvm调优-从eclipse开始
    查看>>
    构建微服务:Spring boot 入门篇
    查看>>
    jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
    查看>>
    Spring boot Myibatis
    查看>>
    spring boot(七):springboot+mybatis多数据源最简解决方案
    查看>>
    Spring Boot 笔记
    查看>>