Scrapy之路第一篇
来源:互联网 发布:sportsdt体育大数据 编辑:程序博客网 时间:2024/06/05 08:48
Scrapy之路第一篇(入门案例)
构建自己的数据王国
- 新建项目
- 明确目标
- 制作爬虫
- 保存数据
一、新建项目(scrapy startproject)
- 在爬取前,必须创建一个新的scrapy项目,进入自定义的项目目录中,运行下列命令:
scrapy startproject myspider
- 其中,myspider为项目名称,可以看到将会创建一个myspider文件夹,目录结构大致如下:
这些文件的主要作用列举如下:
- scrapy.cfg:项目的配置文件
- myspider/:项目的python模块,将会从这里引用代码
- myspider/items.py:项目的目标文件
- myspider/pipelines.py:项目的管道文件
- myspider/settings.py:项目的设置文件
- myspider/spiders/:存储爬虫代码目录
二、 明确目标(myspider/items.py)
准备抓取网站http://www.itcast.cn/channel/teacher.shtml网站里的所有讲师的姓名、职称和个人信息。
- Item用来定义结构化数据字段,用以保存爬取到的数据,有点像python中的dict,但是提供了一些额外的保护减少错误。
- 可以在myspider/items.py中创建一个Item类,并且通过在Item类中继续定义多个Field类(该类是继承了dict)来完善该Item类
- 接下来,创建一个ItcastItem类,和构建item模型(model)。
import scrapyclass ItcastItem(scrapy.Item): name = scrapy.Field() level = scrapy.Field() info = scrapy.Field()
三、 制作爬虫(spiders/itcastspider.py)
爬虫功能要分两步:
1、爬数据
- 在当前目录下输入命令,将在myspider/spiders目录下创建一个名为itcast的爬虫,并指定爬取域的范围:
scrapy genspider itcast "itcast.cn"
- 打开myspider/spiders目录里的itcast.py,默认增加了下列代码:
import scrapyclass ItcastSpider(scrapy.Spider): name = 'itcast' allowed_domains = ['itcast.cn'] start_urls = ['http://www.itcast.cn/channel/teacher.shtml'] def parse(self, response): pass
其实也可以由我们自行创建itcast.py并编写上面的代码,只不过使用命令可以免去编写固定代码的麻烦。
要建立一个spider,你必须用scrapy.spider类创建一个子类,并确定了三个强制的属性和一个方法。
- name = ‘itcast’:这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字
- allow_domains=[]:是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略
- start_urls=[]:爬取的URL元祖/列表,爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始,其他子URL将会从这些起始URL中继承性生成。
- parse(self,response):解析的方法,每个初识URL完成下载后将被调用,调用的时候传入从每一个URL传回的Response对象来作为唯一参数主要作用如下:
- 负责解析返回的网页数据(reponse.body),提取结构化数据(生成item)
- 生成需要下一页的URL请求
- 将start_urls的值修改为需要爬取的第一个url
start_urls=['http://www.itcast.cn/channel/teacher.shtml']
- 修改parse()方法
def parse(self, response): filename="teacher.html" with open(filename,'wb') as f: f.write(response.body)
- 然后在myspider/myspider目录下执行
scrapy crawl itcast
- 运行后,打印的日志出现[scrapy.core.engine] INFO: Spider closed (finished),代表执行完成。
2、取数据
- 爬取整个网页源码完毕,接下来是提取过程,首先观察页面源码:
<div class="li_txt"> <h3> xxx </h3> <h4> xxxxx </h4> <p> xxxxxxx </p>
- 之前在myspider/items.py里定义了一个MyspiderItem类,这里引入进来
from myspider.items import MyspiderItem
- 然后将我们得到的数据封装到一个MyspiderItem对象中,可以保存每个老师的属性:
def parse(self, response): # filename="teacher.html" # with open(filename,'wb') as f: # f.write(response.body) items=[] for each in response.xpath("//div[@class='li_txt']"): item=MyspiderItem() name=each.xpath("h3/text()").extract()[0] level=each.xpath("h4/text()").extract()[0] info=each.xpath("p/text()").extract()[0] item['name']=name item['level']=level item['info']=info items.append(item) return items
四、 保存数据
我们暂时先不处理管道。
scrapy保存信息的最简单的方法主要有四中,-o输出指定格式的文件,命令如下:
#json格式,默认为unicode编码scrapy crawl itcast -o teachers.jsonscrapy crawl itcast -o teachers.jsonlscrapy crawl itcast -o teachers.csvscrapy crawl itcast -o teachers.xml
阅读全文
0 0
- Scrapy之路第一篇
- Scrapy安装步骤(第一篇MarkDown博客)
- mysql之路第一篇
- redis之路第一篇
- 第一篇日志--开始程序员之路
- JQuery 的学习之路 第一篇
- 第一篇博客:开启转行之路
- 程序员的修行之路---第一篇
- IT之路博客第一篇
- 总结之第一篇
- Bootstrap之第一篇
- 第1.3章 scrapy之动态UserAgent
- 第1.4章 scrapy之setting
- 第1.5章 scrapy之pipelines
- 第1.6章 scrapy之logger
- 第2.3章 scrapy之selenium
- 第3.2章 scrapy之kafka
- 第4.1章 scrapy之web工程
- 三、Audio 系统声音
- phpstorm使用教程
- 【IO】out.println 和err.println的执行顺序
- Blocks UVA
- 自己总结的在编程中的一些小技巧
- Scrapy之路第一篇
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
- JavaSE集合框架-01-集合框架体系及表数据结构
- effective c++读书笔记(三)
- AUTOCAD学习笔记3:常用电器元件的绘制
- Quora比赛代码学习笔记
- SpringCloud(第 028 篇)ConfigServer 配置管理微服务
- Redis的安装和部署