Python爬取全国历史天气数据

1、通过爬取历史首页,来获取城市地址和历史时间,构建链接;

‘‘‘
获取全国的城市名称和链接
‘‘‘

import requests
from lxml import etree
import random
import pymongo
from time_list import get_time

client = pymongo.MongoClient(‘localhost‘,27017)
tianqi_data = client[‘tianqi_data‘]
time_url_table = tianqi_data[‘time_url_table‘]

headers_data = [
    ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393‘,
    ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0‘,
]
headers = {
    ‘User-Agent‘:random.choice(headers_data)
}

def get_cityname(url):     #爬取城市名称,并保存到数据到列表中
    city_name_list  = []
    city_response = requests.get(url,headers = headers)
    city_response.encoding = city_response.apparent_encoding
    city_names = etree.HTML(city_response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li/a/text()‘)
    city_links = etree.HTML(city_response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li/a/@href‘)
    for city_name,city_link in zip(city_names,city_links):
        if len(city_name) == 1:
            pass
        else:
            city_data = {
                ‘city_name‘:str(city_name),
                ‘city_link‘:str(city_link),
            }
            city_name_list.append(city_data)
    return city_name_list
    #print(city_name_list)
    print(‘获取城市名称和链接结束...‘)

url = ‘http://lishi.tianqi.com/‘
for link in get_cityname(url):      #构建每个城市的历史日期链接,并保存到数据库中
    url = link[‘city_link‘]
    for time_link in get_time():
        time = time_link.split(‘/‘)[-1].split(‘.‘)[0]
        time_url = url.replace(‘index‘,str(time))
        data = {
            ‘time_url‘:time_url,
            ‘city‘:link[‘city_name‘],
        }
        print(data)
        time_url_table.insert(data)
print(‘导入数据库存完成‘)

import requests
from lxml import etree

‘‘‘
通过对比城市的链接和历史时间的链接发现,就是在把城市链接里面的index换成了相对应的时间,
所以只要把index换成了历史月份就可以了
‘‘‘

def get_time():
    url = ‘http://lishi.tianqi.com/acheng/index.html‘
    response = requests.get(url)
    time_lists = etree.HTML(response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li/a/@href‘)
    return time_lists

2、从数据库中读取数据,爬取每个城市的历史天气数据;

import requests
from lxml import etree
import random
import pymongo

client = pymongo.MongoClient(‘localhost‘,27017)
tianqi_data = client[‘tianqi_data‘]
time_url_table = tianqi_data[‘time_url_table‘]
tianqi_data_table = tianqi_data[‘tianqi_data_table‘]

headers_data = [
    ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393‘,
    ‘Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0‘,
]
headers = {
    ‘User-Agent‘:random.choice(headers_data)
}

def get_tianqi_data():
    for link in time_url_table.find():
        url = link[‘time_url‘]
        print(url)
        response = requests.get(url,headers=headers)
        dates = etree.HTML(response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li/a/text()‘)
        max_temps = etree.HTML(response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li[2]/text()‘)[1:-1]
        low_temps = etree.HTML(response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li[3]/text()‘)[1:-1]
        weathers = etree.HTML(response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li[4]/text()‘)[1:-1]
        fengxiangs = etree.HTML(response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li[5]/text()‘)[1:-1]
        fenglis = etree.HTML(response.text).xpath(‘//*[@id="tool_site"]/div[2]/ul/li[6]/text()‘)[1:-1]
        for date,max_temp,low_temp,weather,fengxiang,fengli in zip(dates,max_temps,low_temps,weathers,fengxiangs,fenglis):
            data = {
                ‘日期‘:date,
                ‘最高温度‘:max_temp,
                ‘最低温度‘:low_temp,
                ‘天气‘:weather,
                ‘风向‘:fengxiang,
                ‘风力‘:fengli,
            }
            tianqi_data_table.insert(data)
            print(data)
    print(‘爬取数据成功‘)

时间: 2024-10-29 02:50:02

Python爬取全国历史天气数据的相关文章

爬虫爬取全国历史天气数据

一段很简单的爬虫程序,爬取的网站为http://www.tianqihoubao.com,可以自己修改爬取城市以及爬取的月份,这里爬取的是1到7月的数据 from bs4 import BeautifulSoup import requests import pymysql import warnings # import pinyin # from pinyin import PinYin from pypinyin import pinyin, lazy_pinyin import pypi

Python爬取链家二手房数据——重庆地区

最近在学习数据分析的相关知识,打算找一份数据做训练,于是就打算用Python爬取链家在重庆地区的二手房数据. 链家的页面如下: 爬取代码如下: import requests, json, time from bs4 import BeautifulSoup import re, csv def parse_one_page(url): headers={ 'user-agent':'Mozilla/5.0' } r = requests.get(url, headers=headers) so

告诉你那里最受欢迎,python爬取全国13个城市旅游数据

前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 抓取数据 通过请求https://piao.qunar.com/ticket/list.htm?keyword=北京,获取北京地区热门景区信息,再通过BeautifulSoup去分析提取出我们需要的信息. 这里爬取了前4页的景点信息,每页有15个景点.因为去哪儿并没

利用python爬取58同城简历数据

最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但是在制作的时候,发现内容不能被存储在本地变量 response 中.当我通过shell载入网页后,虽然内容能被储存在response中,用xpath对我需要的数据进行获取时,返回的都是空值.考虑到数据都在源码中,于是我使用python里的beautifulSoup通过下载源码的方式去获取数据,然后插入到数据库. 需要的python包ur

Python爬取猫眼top100排行榜数据【含多线程】

# -*- coding: utf-8 -*- import requests from multiprocessing import Pool from requests.exceptions import RequestException import re import json def get_one_page(url): """ 爬取每个页面 :param url: 爬取url地址 :return: 返回网页内容 """ try: re

Python爬取百度贴吧数据

本渣除了工作外,在生活上还是有些爱好,有些东西,一旦染上,就无法自拔,无法上岸,从此走上一条不归路.花鸟鱼虫便是我坚持了数十年的爱好. 本渣还是需要上班,才能支持我的业余爱好.上班时间还是尽量访问外网,少做一些和工作不太相关的事.有段时间,像是中毒一样,经常想关注百度贴吧中牡丹鹦鹉,及玄凤鹦鹉的交易图. 于是就写出一下代码: import requests from lxml import etree url = r"http://tieba.baidu.com/p/5197963751&quo

Python爬取天气网历史天气数据

我的第一篇博客,哈哈哈,记录一下我的Python进阶之路! 今天写了一个简单的爬虫. 使用python的requests 和BeautifulSoup模块,Python 2.7.12可在命令行中直接使用pip进行模块安装.爬虫的核心是利用BeautifulSoup的select语句获取需要的信息. pip install requests pip install bs4 以武汉市2017年5~7月的历史为例爬取天气网中武汉市的历史天气数据. 7月对应的网址为http://lishi.tianqi

python爬取B站千万级数据,发现了这些热门UP主的秘密!

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句. Python支持命令式程序设计.面向对象程序设计.函数式编程.面向切面编程.泛型编程多种编程范式.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收

Python爬取中国天气网天气

Python爬取中国天气网天气 基于requests库制作的爬虫. 使用方法:打开终端输入 "python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个"data.csv"文件,内容请参考链接:https://www.cnblogs.com/Rhythm-/p/9255190.html 运行效果: 源码: import sys import re import requests import webbrowser from