思路:
1、根据city.txt文档来获取不同城市code
2、获取中国天气网7d和15d不同城市url
3、利用requests库请求url获取html内容
4、利用beautifulsoup获取7d和15d指定天气数据
5、将获取的天气数据保存到csv文件中


# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import csv '''
获取不同城市code
''' def get_citycode(city_name):
with open('city.txt', 'r', encoding='UTF-8') as fs:
lines = fs.readlines()#一次读取整个文件内容,且自动分成一行列表,readline()每次只读取一行
for line in lines:
if(city_name in line):
code = line.split('=')[0].strip()#每行去掉头尾空格,且用“=”分隔出code和cityname,返回字符串列表
return code
raise ValueError('invalid city name')#抛出异常 '''
获取不同城市7天url
''' def get_7d_url(city_name):
url = 'http://www.weather.com.cn/weather/'
code = get_citycode(city_name)
return url + code + '.shtml' '''
获取不同城市15天url
''' def get_15d_url(city_name):
url = 'http://www.weather.com.cn/weather15d/'
code = get_citycode(city_name)
return url + code + '.shtml' ''''
获取html内容
''' def get_content(url, data=None):
rep = requests.get(url, timeout=60)
rep.encoding = 'utf-8'
return rep.text '''
获取7天指定数据
''' def get_7d_data(htmltext, city):
content = []
bs = BeautifulSoup(htmltext, "html.parser")
body = bs.body
data = body.find('div', {'id': '7d'})
ul = data.find('ul')
li = ul.find_all('li')
for day in li:
line = [city]
date = day.find('h1').string
p = day.find_all('p')
text = p[0].string
if p[1].find('span') is None:
temperature_H = None
else:
temperature_H = p[1].find('span').string
temperature_L = p[1].find('i').string
wind_force = p[2].find('i').string
line.append(date)
line.append(text)
line.append(temperature_H)
line.append(temperature_L)
line.append(wind_force)
content.append(line)
return content '''
获取15天指定数据
''' def get_15d_data(htmltext, city):
content = []
bs = BeautifulSoup(htmltext, "html.parser")
body = bs.body
data = body.find('div', {'id': '15d'})
ul = data.find('ul')
li = ul.find_all('li')
for day in li:
line = [city]
span = day.find_all('span')
date = span[0].string
text = span[1].string
if span[2].find('em') is None:
temperature_H = None
else:
temperature_H = span[2].find('em').string
temperature_L = span[2].string
wind_direction = span[3].string
wind_force = span[4].string
line.append(date)
line.append(text)
line.append(temperature_H)
line.append(temperature_L)
line.append(wind_direction)
line.append(wind_force)
content.append(line)
return content '''
保存获取到的天气数据
csv文件
''' def save_data(data, filename):
with open(filename, 'a', errors='ignore', newline='') as f: #newline=" "是为了避免写入之后有空行
f_csv = csv.writer(f)
f_csv.writerows(data)#数据整行写入csv文件中 '''
爬取7天天气数据
'''
def _7d(city):
url = get_7d_url(city)
html = get_content(url)
result = get_7d_data(html,city)
save_data(result, 'E:\weather.csv') '''
爬取15天天气数据
'''
def _15d(city):
url = get_15d_url(city)
html = get_content(url)
result = get_15d_data(html,city)
save_data(result, 'E:\weather.csv') if __name__ == '__main__':
cities = input('city name: ').split(' ') # 键盘输入城市,用空格分隔开
for city in cities:
_7d(city)
_15d(city)

  

附:city.txt 获取地址:https://pan.baidu.com/s/1VNW8AJi6_zo7mP_90lTkiA      提取码:red5 

 

python3抓取中国天气网不同城市7天、15天实时数据的更多相关文章

  1. Python爬取中国天气网

    Python爬取中国天气网 基于requests库制作的爬虫. 使用方法:打开终端输入 “python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个 ...

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

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

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

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

  4. 吴裕雄--天生自然python爬虫:使用requests模块的get和post方式抓取中国旅游网站和有道翻译网站翻译内容数据

    import requests url = 'http://www.cntour.cn/' strhtml = requests.get(url) print(strhtml.text) URL='h ...

  5. 中国天气网API接口

    http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/101010100.h ...

  6. 中国天气网-天气预报接口api

    中国天气网地址:http://www.weather.com.cn 请求服务 : 查询实时天气信息 http://www.weather.com.cn/data/sk/101110101.html 在 ...

  7. 爬虫-通过本地IP地址从中国天气网爬取当前城市天气情况

    1.问题描述 ​ 最近在做一个pyqt登录校园网的小项目,想在窗口的状态栏加上当天的天气情况,用爬虫可以很好的解决我的问题. 2.解决思路 ​ 考虑到所处位置的不同,需要先获取本地城市地址,然后作为中 ...

  8. 中国天气网 JSON接口的城市编码解析及结果

    最近在弄一个Android应用,其中一个功能是天气情况展示,准备使用google的天气API服务(http://www.google.com/ig/api?hl=zh-cn&weather=, ...

  9. 第十二、模块二、调用中国天气网和qqOnline及TrainTimeWebService接口来突出Json方法

    一. 浏览网页的时候,发送的请求.服务器反回来的永远是字符串,由于服务器后台使用的语言不通,所以就需要用工具反解,这里用到了json json方法一 json.loads()将字符串转化为python ...

随机推荐

  1. [JZOJ6241]【NOI2019模拟2019.6.29】字符串【数据结构】【字符串】

    Description 给出一个长为n的字符串\(S\)和一个长为n的序列\(a\) 定义一个函数\(f(l,r)\)表示子串\(S[l..r]\)的任意两个后缀的最长公共前缀的最大值. 现在有q组询 ...

  2. AcWing:138. 兔子与兔子(字符串Hash)

    很久很久以前,森林里住着一群兔子. 有一天,兔子们想要研究自己的 DNA 序列. 我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母). 然后我们每 ...

  3. Python3.X Selenium 自动化测试中如何截图并保存成功

    在selenium for python中主要有三个截图方法,我们挑选其中最常用的一种. 挑最常用的:get_screenshot_as_file() 相关代码如下:(下面的代码可直接复制) # co ...

  4. Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)

    Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java   版权声明:本 ...

  5. nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)基于wsgi运行的框架有 ...

  6. 堆里面的分区:Eden,Survivor(from+ to),老年代,各自的特点

    堆里面分为新生代和老生代(java8取消了永久代,采用了Metaspace),新生代包含Eden+Survivor区,survivor区里面分为from和to区,内存回收时,如果用的是复制算法,从fr ...

  7. 循环链表C语言实现

    按照单链表的设计,稍加改动.和单向链表不一样的地方,头节点不指向NULL,而是指向自己head 循环链表的判满 1)判断next是不是头结点,2)判断size /* * CycleLinkList.h ...

  8. mybatis 中的 update 返回值

    摘自:https://www.jianshu.com/p/80270b93082a 如果定义一个如下的update函数,那么这个函数的返回值到底是啥意思呢?是受影响的行数吗? 验证之前我们先看看数据库 ...

  9. jQuery file upload --Multiple File Input Fields in One Form

    The plugin can be applied to a form with multiple file input fields out of the box. The files are se ...

  10. [学习笔记] CNN与RNN方法结合

    CNN与RNN的结合 问题 前几天学习了RNN的推导以及代码,那么问题来了,能不能把CNN和RNN结合起来,我们通过CNN提取的特征,能不能也将其看成一个序列呢?答案是可以的. 但是我觉得一般直接提取 ...