爬虫系列2:scrapy项目入门案例分析
来源:互联网 发布:长虹网络电视价格 编辑:程序博客网 时间:2024/04/30 06:01
本文从一个基础案例入手,较为详细的分析了scrapy项目的建设过程(在官方文档的基础上做了调整)。主要内容如下:
0、准备工作
1、scrapy项目结构
2、编写spider
3、编写item.py
4、编写pipelines.py
5、设置Settings.py
6、运行spider
0、准备工作
安装scrapy,在cmd中输入命令(windows)即可完成:pipinstall scrapy
1、scrapy项目结构
建立scrapy项目,在cmd中输入命令(windows):scrapystart project tutorial。项目的目录结构如下。
tutorial/
scrapy.cfg
tutorial/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
myspider.py
一般来说,要完成一个能用的scrapy爬虫,需要编写或者配置的文件包括myspider.py、settings.py、item.py和pipeline.py。其中myspider.py在spider目录下,是核心的爬虫文件;settings.py用来配置爬取时间间隔等参数;item.py用来定义数据提取的项目;pipeline.py和item.py配合使用,用来辅助完成爬取数据的格式化输出。
2、编写spider.py
spider文件可以自行命名,此处的爬虫文件名为dmoz_spider.py。该文件定义了爬虫名称、目标网址、执行函数等。以下是spider代码示例,它定义了爬虫名称name,允许运行域allowed_domain,起始爬取页面网址start_urls,parse(self, response)是spider必须实现的接口,负责提取页面中title、href和desc等属性,详细内容可参考以下代码注释。
# -*- coding:utf-8 -*-import scrapyfrom tutorial.itemsimport DmozItem classDmozSpider(scrapy.Spider): name = 'dmoz' #爬虫名,供命令scrapycrawl domz使用 allowed_domain = 'dmoz.org' #允许爬虫运行的域 start_urls =['http://www.dmoz.org/Computers/Programming/Languages/Python/Books/', 'http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/']#爬取url def parse(self, response): #页面解析函数,这里必须为parse() for sel in response.xpath('//ul/li'): item = DmozItem() #在items.py中定义的需解析项目 item['title'] =sel.xpath('a/text()').extract() #使用xpath提取特定属性 item['href'] =sel.xpath('a/@href').extract() item['desc'] =sel.xpath('text()').extract() yield item
3、编写item.py
应该引起注意的是:item.py和dmoz_spider.py是相互关联的;Item.py中定义的title、link和desc,在dmoz_spider.py中将会用到。
# -*- coding:utf-8 -*-# 定义爬取对象属性import scrapyclassDmozItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field()pass
4、编写pipelines.py
pipelines是scrapy提供的数据导出手段之一,通过pipelines可以进行复杂的数据导出操作,包括将数据导出到json文件或者数据库。pipelines.py中必须实现process_item(self, item, spider)接口,用于处理需要保存的item数据,其中spider为所定义的爬虫dmoz。
pipelines.py代码见下文,其中技术要点有:
1)使用codecs.open()以给定的模式mode和编码encoding打开文件,文件不存在时则新建。
2)使用json.dumps()将dict转化为json格式的字符串,如果ensure_ascii设为False,则返回值将会是Unicode格式。
import jsonimport codecs#写pipeline时需要注意编码问题的处理class dmozPipeline(object): def __init__(self): self.file = codecs.open('dmoz.json', mode='wb',encoding='utf-8') def process_item(self, item, spider): line = json.dumps(dict(item), ensure_ascii=False)+'\n'# ensure_ascii=False很重要 self.file.write(line) return item def close_spider(self,spider): self.file.close()
补充:另一种替代的数据导出方式是:在cmd中运行scrapycrawl dmoz –o abc.json,其中abc.json为导出文件。采用该方式无需配置pipeline,因为程序执行过程中不会用到。
5、设置Settings.py
通过settings告知spider将启用pipeline,其余用默认设置就好了。
ITEM_PIPELINES = { 'tutorial.pipelines.dmozPipeline': 300,}
6、运行spider项目
在cmd中运行scrapycrawl dmoz,可以将爬取的所有结果以json格式导出到名为dmoz.json的文件中,文件名可以在pipeline.py中修改。
至此,一个完整的scrapy爬虫项目就算完成了。
- 爬虫系列2:scrapy项目入门案例分析
- Scrapy爬虫入门系列2 示例教程
- Scrapy 爬虫框架入门案例详解
- Scrapy爬虫入门系列1 安装
- [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
- 【Scrapy爬虫系列2】性能调优
- scrapy爬虫学习系列四:portia的学习入门
- Scrapy爬虫入门系列4抓取豆瓣Top250电影数据
- Scrapy爬虫入门
- Scrapy爬虫框架入门
- 网页爬虫--scrapy入门
- 网页爬虫--scrapy入门
- Python Scrapy爬虫入门
- scrapy 爬虫入门
- scrapy爬虫入门
- scrapy爬虫的几个案例
- scrapy创建爬虫项目
- Scrapy创建爬虫项目
- 定义、声明、初始化、赋值 小记(C++)
- 数据库事务处理机制
- CentO S 7 开放端口
- HTTP状态码大全
- 网络原理,以及对VMware Workstation虚拟网络VMnet0、VMnet1、VMnet8的图解
- 爬虫系列2:scrapy项目入门案例分析
- 21. Merge Two Sorted Lists
- Android之JNI NDK错误 c/c++ indexer has encountered a problem, An internal error occurred during xx
- MYSQL 解锁与锁表
- Jquery局部刷新--多用于评论回复等
- 基于ZooKeeper的Dubbo注册中心
- 收藏
- JS去除特殊字符
- git学习