scrapy (手把手)创建项目 从零开始做第一个爬虫 实战
2018-04-08 本文已影响0人
朱允见
从零开始做第一个scrapy 框架爬虫
- 首先确保自己的电脑已经安装好scrapy,如果还没有安装好请自行百度一下,很简单。
1.项目创建
-
创建项目 :scrapy startproject Demo
创建项目结果 .png -
创建 spider,首先进入Demo文件夹
-
scrapy genspider demo 'www.itcast.cn'
创建 spider.png
-
项目创建完成后的结构目录是这样的
项目文件结构.png
2.编写scrapy 爬虫项目
2.1 编写items.py
- 这里是我们想要采集的数据字段
import scrapy
class DemoItem(scrapy.Item):
# define the fields for your item here like:
name = scrapy.Field()
grade = scrapy.Field()
info = scrapy.Field()
img = scrapy.Field()
2.2 spiders下的 demo.py 文件
- 这里是我们写爬虫的主要实现逻辑
# -*- coding: utf-8 -*-
import scrapy
import re
from Demo.items import DemoItem
class ItcastSpider(scrapy.Spider):
name = 'demo'
#允许域,可以是多个
allowed_domains = ['http://www.itcast.cn']
#scrapy 开始发起请求的地址
start_urls = ['http://www.itcast.cn/channel/teacher.shtml']
def parse(self, response):
html = response.text
reg =r'<img data-original="(.*?)">.*?<div class="li_txt">.*?<h3>(.*?)</h3>.*?<h4>(.*?)</h4>.*?<p>(.*?)</p>'
infos = re.findall(reg,html,re.S)
for img,name,grade,talk in infos:
item = DemoItem()
item['name'] = name
item['grade'] = grade
item['info'] = talk
item['img'] = self.allowed_domains[0] + img
#这里是用的yield 而不是return
yield item
2.3 编写pipelines.py文件
- 这里是管道文件,就是我们采集到的数据通过yield信号,传递到这里,进行后续操作,比如存入数据库,写文件...
import json
class DemoPipeline(object):
#初始化的操作,这里我们做本地化直接写成文件,所以初始化文件对象
def __init__(self):
print('实例化DemoPipeline')
self.f = open('itcast_pipeline.json','w',encoding='utf-8')
def process_item(self, item, spider):
content = json.dumps(dict(item))
self.f.write(content)
print(content)
return item
#结束后做的操作,在这里我们要关闭文件
def close_spider(self,spider):
print('结束')
self.f.close()
2.4 打开settings.py 文件更改配置
-
启用管道文件
settings.py 文件配置.png
3.运行项目
-
到这里,恭喜你已经写完了第一个scrapy 分布式爬虫的项目,是不是so easy !
-
scrapy crawl demo 执行程序
这里的demo 是 下图中的
image.png
结束
- 总结一下scrapy 项目没什么,记住四步走
第一步:编写items.py
第二步:编写spiders下的 demo.py 文件
第三步:编写pipelines.py文件
第四步:打开settings.py 文件更改配置