Python爬取中国天气网

基于requests库制作的爬虫。

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

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

运行效果:

源码:

import sys
import re
import requests
import webbrowser
from PIL import Image
from requests.exceptions import RequestException
import csv
data={}
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 None
headers={'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('<title>(.*?)</title>',html)
aim=re.findall('<input type="hidden" id="hidden_title" value="(.*?)月(.*?)日(.*?)时(.*?) (.*?) (.*?) (.*?)"',html,re.S)
airdata=re.findall('<li class="li6 hot">\n<i></i>\n<span>(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>\n</li>',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('<li class="li1 hot">\n<i></i>\n<span>(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>\n</li>',html,re.S)
colddata=re.findall('<li class="li2 hot">\n(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>',html,re.S)
weardata=re.findall('<li class="li3 hot" id="chuanyi">\n(.*?)<span>(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>',html,re.S)
washdata=re.findall('<li class="li4 hot">\n<i></i>\n<span>(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>\n</li>',html,re.S)
bloodata=re.findall('<li class="li5 hot">\n<i></i>\n<span>(.*?)</span>\n<em>(.*?)</em>\n<p>(.*?)</p>\n</li>',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("数据来源:中央气象台")

Python爬取中国天气网的更多相关文章

  1. 初识python 之 爬虫:爬取中国天气网数据

    用到模块: 获取网页并解析:import requests,html5lib from bs4 import BeautifulSoup 使用pyecharts的Bar可视化工具"绘制图表& ...

  2. scrapy实例:爬取中国天气网

    1.创建项目 在你存放项目的目录下,按shift+鼠标右键打开命令行,输入命令创建项目: PS F:\ScrapyProject> scrapy startproject weather # w ...

  3. Python爬取中国票房网所有电影片名和演员名字,爬取齐鲁网大陆所有电视剧名称

    爬取CBO中国票房网所有电影片名和演员名字 # -*- coding: utf-8 -*- # 爬取CBO中国票房网所有电影片名 import json import requests import ...

  4. python爬取中国天气网站数据并对其进行数据可视化

    网址:http://www.weather.com.cn/textFC/hb.shtml 解析:BeautifulSoup4 爬取所有城市的最低天气   对爬取的数据进行可视化处理 按温度对城市进行排 ...

  5. python爬取中国知网部分论文信息

    爬取指定主题的论文,并以相关度排序. #!/usr/bin/python3 # -*- coding: utf-8 -*- import requests import linecache impor ...

  6. Python爬取中国知网文献、参考文献、引证文献

    前两天老师派了个活,让下载知网上根据高级搜索得到的来源文献的参考文献及引证文献数据,网上找了一些相关博客,感觉都不太合适,因此特此记录,希望对需要的人有帮助. 切入正题,先说这次需求,高级搜索,根据中 ...

  7. python 爬取历史天气

    python 爬取历史天气 官网:http://lishi.tianqi.com/luozhuangqu/201802.html # encoding:utf-8 import requests fr ...

  8. python3抓取中国天气网不同城市7天、15天实时数据

    思路:1.根据city.txt文档来获取不同城市code2.获取中国天气网7d和15d不同城市url3.利用requests库请求url获取html内容4.利用beautifulsoup获取7d和15 ...

  9. python爬取中国大学排名

    教程来自:[Python网络爬虫与信息提取].MOOC. 北京理工大学 目标:爬取最好大学网前50名大学 代码如下: import requests from bs4 import Beautiful ...

随机推荐

  1. mac虚拟机上(centos系统)怎样实现共享本机文件

    首先加载vboxadditions,可以从https://download.virtualbox.org/virtualbox/下载,记得一定要跟virtualBox版本对应 然后打开virtualb ...

  2. sqlalchemy 查询姿势总结

    sqlalchemy查询使用 1.带条件查询 查询是最常用的,对于各种查询我们必须要十分清楚,首先是带条件的查询 #带条件查询 rows = session.query(User).filter_by ...

  3. 一些优秀的SLAM博主

    http://blog.csdn.net/u010566411 http://blog.csdn.net/qq_18661939/article/details/51782376 http://www ...

  4. 斯坦福大学CS231n简要笔记和课后作业

    笔记目录: 1. CS231n--图像分类(KNN实现) 2. 待更新... 3. 4.

  5. Leetcode with Python -> Sort

    349. Intersection of Two Arrays Given two arrays, write a function to compute their intersection. Ex ...

  6. GCC特性之__init修饰解析 - kasalyn的专栏 - 博客频道 - CSDN.NET

    , GCC特性之__init修饰解析 - kasalyn的专栏 - 博客频道 - CSDN.NET.MathJax_Hover_Frame {border-radius: .25em; -webkit ...

  7. android ViewGroup getChildDrawingOrder与 isChildrenDrawingOrderEnabled()

    getChildDrawingOrder与 isChildrenDrawingOrderEnabled()是属于ViewGroup的方法.   getChildDrawingOrder 用于 返回当前 ...

  8. thr [树链剖分+dp]

    题面 思路 首先,可以有一个$dp$的思路 不难发现本题中,三个点如果互相距离相同,那么一定有一个"中心点"到三个点的距离都相同 那么我们可以把本题转化计算以每个点为根的情况下,从 ...

  9. 在Android和iOS中集成flutter

    flutter可能是未来跨平台开发的又一技术框架,那么对于一个app,我们不可能完全用flutter来开发,那么就意味着我们需要在已有的Android和iOS代码中去集成flutter.目前这一技术还 ...

  10. 微信支付:回调地址notify_url不能带参数

    最近在用Yii2写一个微信商城,在调用微信支付接口时遇到了问题. 支付环节是正常的,微信端能收到支付成功的系统提示,然而回调url始终收不到微信服务器的POST,经过手动测试,回调页面的逻辑也没有问题 ...