Scrapy爬虫爬取天气数据存储为txt和json等多种格式

原创 2017年09月02日 15:16:55

一、创建Scrrapy项目

scrapy startproject weather
  

   二、 创建爬虫文件

scrapy genspider wuhanSpider wuhan.tianqi.com
 

   三、SCrapy项目各个文件

   (1) items.py

import scrapy


class WeatherItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    cityDate = scrapy.Field()
    week = scrapy.Field()
    img = scrapy.Field()
    temperature = scrapy.Field()
    weather = scrapy.Field()
    wind = scrapy.Field()
  

 (2)wuhanSpider.py

# -*- coding: utf-8 -*-
import scrapy
from weather.items import WeatherItem

class WuhanspiderSpider(scrapy.Spider):
    name = "wuHanSpider"
    allowed_domains = ["tianqi.com"]
    citys = ['wuhan','shanghai']
    start_urls = []
    for city in citys:
        start_urls.append('http://' + city + '.tianqi.com/')

    def parse(self, response):
        subSelector = response.xpath('//div[@class="tqshow1"]')
        items = []
        for sub in subSelector:
            item = WeatherItem()
            cityDates = ''
            for cityDate in sub.xpath('./h3//text()').extract():
                cityDates += cityDate
            item['cityDate'] = cityDates
            item['week'] = sub.xpath('./p//text()').extract()[0]
            item['img'] = sub.xpath('./ul/li[1]/img/@src').extract()[0]
            temps = ''
            for temp in sub.xpath('./ul/li[2]//text()').extract():
                temps += temp
            item['temperature'] = temps
            item['weather'] = sub.xpath('./ul/li[3]//text()').extract()[0]
            item['wind'] = sub.xpath('./ul/li[4]//text()').extract()[0]
            items.append(item)
        return items
  (3)pipelines.py,处理spider的结果

import time
import os.path
import urllib2
#将获得的数据存储到txt文件
class WeatherPipeline(object):
    def process_item(self, item, spider):
		today = time.strftime('%Y%m%d', time.localtime())
		fileName = today + '.txt'
		with open(fileName,'a') as fp:
			fp.write(item['cityDate'].encode('utf8') + '\t')
			fp.write(item['week'].encode('utf8') + '\t')
			imgName = os.path.basename(item['img'])
			fp.write(imgName + '\t')
			if os.path.exists(imgName):
				pass
			else:
				with open(imgName, 'wb') as fp:
					response = urllib2.urlopen(item['img'])
					fp.write(response.read())	
			fp.write(item['temperature'].encode('utf8') + '\t')
			fp.write(item['weather'].encode('utf8') + '\t')
			fp.write(item['wind'].encode('utf8') + '\n\n')
			time.sleep(1)
		return item

import time
import json
import codecs
#将获得的数据存储到json文件
class WeatherPipeline(object):
    def process_item(self, item, spider):
		today = time.strftime('%Y%m%d', time.localtime())
		fileName = today + '.json'
		with codecs.open(fileName, 'a', encoding='utf8') as fp:
			line = json.dumps(dict(item), ensure_ascii=False) + '\n'
			fp.write(line)
		return item
import MySQLdb
import os.path
#将获得的数据存储到mysql数据库
class WeatherPipeline(object):
    def process_item(self, item, spider):
		cityDate = item['cityDate'].encode('utf8')
		week = item['week'].encode('utf8') 
		img = os.path.basename(item['img'])
		temperature = item['temperature'].encode('utf8')
		weather = item['weather'].encode('utf8')
		wind = item['wind'].encode('utf8')

		conn = MySQLdb.connect(
				host='localhost',
				port=3306,
				user='crawlUSER',
				passwd='crawl123',
				db='scrapyDB',
				charset = 'utf8')
		cur = conn.cursor()
		cur.execute("INSERT INTO weather(cityDate,week,img,temperature,weather,wind) values(%s,%s,%s,%s,%s,%s)", (cityDate,week,img,temperature,weather,wind))
		cur.close()
		conn.commit()
		conn.close()

		return item

  (4)settings.py,决定 由哪个文件来处理获取的数据

BOT_NAME = 'weather'

SPIDER_MODULES = ['weather.spiders']
NEWSPIDER_MODULE = 'weather.spiders'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'weather (+http://www.yourdomain.com)'

#### user add
ITEM_PIPELINES = {
'weather.pipelines.WeatherPipeline':1,
'weather.pipelines2json.WeatherPipeline':2,
'weather.pipelines2mysql.WeatherPipeline':3
}


  (5)爬取命令

scrapy crawl wuHanSpider

  (6)结果显示

  1.txt数据

 
   2.json数据

 

  3. 存储到mysql数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。

Scrapy教程——搭建环境、创建项目、爬取内容、保存文件(txt)

前言                    对于一个python新手,要使用scrapy进行爬虫,简直是抓狂,不过一点一点的啃下来,慢慢的发现也挺有意思的,通过好几天的白天去公司实习,晚上熬夜到凌晨写...
  • BuptZhengChaoJie
  • BuptZhengChaoJie
  • 2015年11月21日 10:27
  • 9086

如何使用scrapy爬取资源,你懂得

前言:有没有看点视频感觉到处都是广告,有没有觉得它的播放速度很慢,有没有找不到小徐.avi时候的痛苦,看完这篇文章你就是老司机了 1.安装scrapy sudo apt-get install pyt...
  • current_person
  • current_person
  • 2016年09月15日 21:07
  • 2966

Scrapy简明教程(三)——爬取CSDN博文并写入文件

本篇博文将介绍 Scrapy 爬取 CSDN 博文详情页并写入文件,这里以 http://blog.csdn.net/oscer2016/article/details/78007472 这篇博文为例...
  • Oscer2016
  • Oscer2016
  • 2017年09月17日 20:27
  • 1307

Scrapy抓取天气数据和显示

一、item编写   import scrapy class GzweatherItem(scrapy.Item): # define the fields for your item h...
  • u012017783
  • u012017783
  • 2017年08月07日 16:35
  • 260

python爬取历史天气数据

环境说明扒取的网站:天气网,http://lishi.tianqi.com/ python版本:2.7 操作系统:windows 7 所依赖的包(如若没有请安装) 包名 说明 官方地...
  • huanbia
  • huanbia
  • 2017年01月04日 15:37
  • 4076

Python3爬虫小程序——爬取各类天气信息

本来是想从网上找找有没有现成的爬取空气质量状况和天气情况的爬虫程序,结果找了一会儿感觉还是自己写一个吧。 主要是爬取北京包括北京周边省会城市的空气质量数据和天气数据。 过程中出现了一个错误:Unico...
  • u013063099
  • u013063099
  • 2017年06月02日 16:01
  • 3266

R语言rvest包3步爬取中国天气网国内所有城市(县)7天实时天气预报数据

接上一篇用R语言爬取中国天气网单个城市的7天实时天气数据,这篇文章综合一下,使用R语言rvest包3步爬取中国天气网国内所有城市(县)7天实时天气数据,这里的步数跨度可能有点长,但思路确实是3步哦,建...
  • gtxing
  • gtxing
  • 2016年10月03日 17:35
  • 2547

Python爬取中国天气网天气数据

利用Python的Beanutiful Soup库对中国天气网进行爬虫分析,获取相关气象数据。
  • Seanlinsea
  • Seanlinsea
  • 2017年10月30日 11:56
  • 468

爬虫 爬取不到数据原因总结

javascript:void(0);
  • weixin_39492016
  • weixin_39492016
  • 2017年11月10日 11:20
  • 311

爬虫Scrapy学习指南之抓取新浪天气

scrapy有一个简单的入门文档,大家可以参考一下,我感觉官方文档是最靠谱的,也是最真实的。 首先我们先创建一个scrapy的项目 scrapy startproject weather ...
  • djd1234567
  • djd1234567
  • 2015年05月11日 11:47
  • 2507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Scrapy爬虫爬取天气数据存储为txt和json等多种格式
举报原因:
原因补充:

(最多只允许输入30个字)