2017.08.04 Python网络爬虫之Scrapy爬虫实战二 天气预报

1.项目准备:网站地址:http://quanzhou.tianqi.com/

2.创建编辑Scrapy爬虫:

scrapy startproject weather

scrapy genspider HQUSpider quanzhou.tianqi.com

项目文件结构如图:

3.修改Items.py:

4.修改Spider文件HQUSpider.py:

(1)先使用命令:scrapy shell http://quanzhou.tianqi.com/   测试和获取选择器:

(2)试验选择器:打开chrome浏览器,查看网页源代码:

(3)执行命令查看response结果:

(4)编写HQUSpider.py文件:

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

class HquspiderSpider(scrapy.Spider):    name = ‘HQUSpider‘    allowed_domains = [‘tianqi.com‘]    citys=[‘quanzhou‘,‘datong‘]    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
(5)修改pipelines.py我,处理Spider的结果:
# -*- coding: utf-8 -*-

# Define your item pipelines here## Don‘t forget to add your pipeline to the ITEM_PIPELINES setting# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport timeimport os.pathimport urllib2import sysreload(sys)sys.setdefaultencoding(‘utf8‘)

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(‘utf-8‘)+‘\t‘)            fp.write(item[‘week‘].encode(‘utf-8‘)+‘\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(‘utf-8‘)+‘\t‘)            fp.write(item[‘weather‘].encode(‘utf-8‘)+‘\t‘)            fp.write(item[‘wind‘].encode(‘utf-8‘)+‘\n\n‘)            time.sleep(1)        return item

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

(7)执行命令:scrapy crawl HQUSpider

到此为止,一个完整的Scrapy爬虫就完成了。



时间: 2024-10-21 04:19:59

2017.08.04 Python网络爬虫之Scrapy爬虫实战二 天气预报的相关文章

2017.08.04 Python网络爬虫之Scrapy爬虫实战二 天气预报的数据存储问题

1.数据存储到JSon:程序阅读一般都是使用更方便的Json或者cvs等待格式,继续讲解Scrapy爬虫的保存方式,也就是继续对pipelines.py文件动手脚 (1)创建pipelines2json.py文件: import timeimport jsonimport codecs class WeatherPipeline(object): def process_item(self, item, spider): today=time.strftime('%Y%m%d',time.loc

2017.08.05 Python网络爬虫实战之获取代理

1.项目准备:爬取网站:http://www.proxy360.cn/Region/China,http://www.xicidaili.com/ 2.创建编辑Scrapy爬虫: scrapy startproject getProxy scrapy genspider proxy360Spider proxy360.cn 项目目录结构: 3.修改items.py: 4.修改Spider.py文件 proxy360Spider.py: (1)先使用scrapy shell命令查看一下连接网络返回

2017.08.11 Python网络爬虫实战之Beautiful Soup爬虫

1.与Scrapy不同的是Beautiful Soup并不是一个框架,而是一个模块:与Scrapy相比,bs4中间多了一道解析的过程(Scrapy是URL返回什么数据,程序就接受什么数据进行过滤),bs4则在接收数据和进行过滤之间多了一个解析的过程,根据解析器的不同,最终处理的数据也有所不同,加上这一步骤的优点是可以根据输入数据的不同进行针对性的解析:同一选择lxml解析器: 2.安装Beautiful Soup环境:pip install beautifulsoup4 3.Beautiful

爬虫学习 04.Python网络爬虫之requests模块(1)

爬虫学习 04.Python网络爬虫之requests模块(1) 引入 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. 警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症.冗余代码症.重新发明轮子症.啃文档症.抑郁.头疼.甚至死亡. 今日概要 基于requests的get请求 基于requests模块的post请求 基于requests模块ajax的get请求 基于requests模块ajax的post请求 综合项目练习:爬取国家药品监

2017.07.28 Python网络爬虫之爬虫实战 今日影视2 获取JS加载的数据

1.动态网页指几种可能: 1)需要用户交互,如常见的登录操作: 2)网页通过js / AJAX动态生成,如一个html里有<div id="test"></div>,通过JS生成<divid="test"><span>aaa</span></div>: 3)点击输入关键字后进行查询,而浏览器url地址不变 2.想用Python获取网站中JavaScript返回的数据,目前有两种方法: 第一种方法

2017.08.10 Python爬虫实战之爬虫攻防篇

1.封锁user-agent破解: user-agent是浏览器的身份标识,网站就是通过user-agent来确定浏览器类型的.有很多网站会拒绝不符合一定标准的user-agent请求网页,如果网站将频繁访问网站的user-agent作为爬虫的标志,然后加入黑名单该怎么办? (1)首先在meiju项目下,settings.py的同级目录创建middlewares目录,进入middlewares目录,创建__init__.py,将middlewares目录变成一个Python模块 (2)创建资源文

2017.08.10 Python爬虫实战之爬虫攻防

1.创建一般的爬虫:一般来说,小于100次访问的爬虫都无须为此担心 (1)以爬取美剧天堂为例,来源网页:http://www.meijutt.com/new100.html,项目准备: scrapy startproject meiju100 F:\Python\PythonWebScraping\PythonScrapyProject>cd meiju100 F:\Python\PythonWebScraping\PythonScrapyProject\meiju100>scrapy gen

python爬虫—使用scrapy爬虫框架

问题1.使用scrapy框架,使用命令提示符pip命令下载scrapy后,却无法使用scrapy命令,出现scrapy不是内部或外部命令.也不是可运行的程序 解决:一开始,我是把python安装在D:\python,安装了scrapy后他默认都会装在此路径下,然后scrapy在路径D:\python\Scripts路径下,而创建工程也只能在此目录下. 如果想让他在dos下想要命令运行成功的话,就的需要知道他在那里,那么这又得学习到环境变量path的作用.所以这就得在path上添加scrapy的地

2017.07.26 Python网络爬虫之Scrapy爬虫框架

1.windows下安装scrapy:cmd命令行下:cd到python的scripts目录,然后运行pip install 命令 然后pycharmIDE下就有了Scrapy: 在cmd下运行scrapy命令,出错!!!: 解决方法: 在Python的Lib\site-packages文件夹下新建一个sitecustomize.py: import sys sys.setdefaultencoding('gb2312') 再次在cmd下运行scrapy,成功: 2.Scrapy选择器和XPat