谈到爬虫,必出利器Scrapy。若是说以前的爬虫借助于我的知识的野蛮生长,那么Scrapy的诞生无疑下降了万众爬虫的门槛。数据库
什么是Scrapy?一言以蔽之:它是一个基于Python语言开发的网络数据抓取的框架,任何人均可以根据需求方便的修改。Scrapy由下面几个部分组成json
(上图来源于网络,侵删)cookie
spiders:爬虫的主模块,主要内容包括网页的解析和内容的结构化网络
items:定义咱们须要的结构化数据,使用方法相似于字典dict框架
pipelines:管道模块,处理spider模块分析好的结构化数据,如存入数据库或者jason文件scrapy
setting:设置,对整个爬虫过程当中的相关参数进行设置,如头文件head,cookie等。ide
middlewares:中间件(暂时不用修改)spa
下面,以网上比较常见的58同城网上的租房信息为例,介绍Scrapy爬取数据的基本过程。日志
一、新建Scrapy项目中间件
Windows系统下,先利用Win+R进入cmd界面,然后进入想要建立项目的目录。然后输入下面的命令:
scrapy startproject zufang58
二、Scrapy项目文件
生成的项目结构如图所示:Scrapy项目文件
(1)spiders:爬虫的主模块
(2)items:须要的结构化数据
import scrapy
class Zufang58Item(scrapy.Item):
# 标题
title = scrapy.Field()
# 房间
room = scrapy.Field()
# 区域
zone = scrapy.Field()
# 地址
address = scrapy.Field()
# 价格
money = scrapy.Field()
#类型(几室几厅)
type = scrapy.Field()
(3)pipelines:管道模块(暂时不须要修改)
class Zufang58Pipeline(object):
def process_item(self, item, spider):
return item
(4)setting:设置(主要设置ROBOTSTXT_OBEY = False)
#在某些状况下咱们想要获取的内容偏偏是被robots.txt所禁止访问的。因此,咱们就将此配置项设置为False,拒绝遵照Robot协议!
ROBOTSTXT_OBEY = False #不遵照开始运行
三、开始运行
运行方式有两种:
(1)在cmd窗口下输入
scrapy crawl zufang58
(2)在scrapy.cfg创建一个主文件main.py
from scrapy.cmdline import execute
if __name__ == "__main__":
execute("scrapy crawl zufang58".split())
四、修改piplines存储到json文件
历经千辛万苦,把数据爬下来了,总感受只经过Console窗口看看不过瘾,为此,咱们决定将其存入json文件。
那问题来了,什么是json文件呢?
json文件格式实质是一种dict字典类型,存储的数据描述了一个实物的相关信息。例如能够存入一我的的年龄,职务,身高,体重等等,同时能够很方便地经过文本文件查看。
为此须要修改piplines文件,将结构化的items传出到json文件中。
import json
import logging
class Zufang58Pipeline(object):
def __init__(self):
self.file = open('zufang58.json', mode='w', encoding='utf-8')
def process_item(self, item, spider):
jsondata = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.file.write(jsondata)
except Exception as error:
# 出现错误时打印错误日志
logging.error(error)
return item
def close_spider(self, spider):
self.file.close()小结
五、小结
最终生成的json文件如图所示:
总的来讲,借助Scrapy框架,大大提升了爬虫的效率,激发了看见什么爬什么的决心。
国庆感言:
闲着就是无聊,动起来就有活力!
——后记