开启你的第一个scrapy项目
1. 新建scrapy项目
scrapy startproject projectname
2. 新建spider(需要进入 创建后产生的spider文件夹)
scrapy genspider spider_name spider_domain
其余相关操作
scrapy genspider -l
查看其他可用模板 新建spiderscrapy genspider -t crawl spider_name spider_domain
选择其他模板新建spider 新建spiderscrapy shell url
用交互窗口直接抓取页面, 返回response对象 和spider中的parse方法中的 response参数相同,用来进行页面解析实验,避免多次访问scrapy shell -s USER_AGENT="Mozilla/5.0" url
添加请求头访问
3. 启动爬虫
scrapy crawl spider_name
其余启动爬虫命令
scrapy parse --spider==spider_name url
需要在 spider的parse模块中添加log方法 才会在终端中显示 例如
class BasicSpider(scrapy.Spider):
name = 'basic'
allowed_domains = ['xxx']
start_urls = ['https://xxx']
def parse(self, response):
price = response.xpath('//*[@class="h3-responsive"]/text()').re('\d+')
self.log(price) # 打印在终端
title = response.css('.adStd.threeLine>div>a>span').xpath('.//text()').extract()
self.log(title)
desc = response.css('.adStd.threeLine>span>span').xpath('.//text()').extract()
self.log(desc)
url = response.css('.adStd.threeLine>a>span').xpath('.//text()').extract()
self.log(url)
image_urls = response.css('.adStd.threeLine').xpath('./a/@href').extract()
self.log(image_urls)
4. 填充Item --为之后的存储做准备
以之前的代码为例:
spider_name.py
class BasicSpider(scrapy.Spider):
name = 'basic'
allowed_domains = ['xxx']
start_urls = ['https://xxx']
def parse(self, response):
item = BasicItem() # 从items.py中导入
item['price'] = response.xpath('//*[@class="h3-responsive"]/text()').re('\d+') # 改写为字典形式
item['title'] = response.css('.adStd.threeLine>div>a>span').xpath('.//text()').extract()
itme['desc'] = response.css('.adStd.threeLine>span>span').xpath('.//text()').extract()
item['url'] = response.css('.adStd.threeLine>a>span').xpath('.//text()').extract()
item['image_urls'] = response.css('.adStd.threeLine').xpath('./a/@href').extract()
return item
** 写入item之后 运行**
scrapy crawl spider_name
会在终端中打印出item中的东西
item的代码如下
class BasicItem(scrapy.Item):
# primary field
title = Field() # 标题
price = Field() # 价格
description = Field() # 描述
url = Field() # 地址
image_urls = Field() # 图片地址
5. 将item存入文件
scrapy crawl spider_name -o items.json
json格式,网络数据通信常用scrapy crawl spider_name -o items.jl
json行格式, 在大文件 比如1GB中, json需要加载1gb的内存, 而json行格式不用,类似迭代器的读取scrapy crawl spider_name -o items.csv
excel 常用scrapy crawl spider_name -o items.xml
xml 文档型存入其他位置 如 FTP 或 S3 存储桶
scrapy crawl spider_name -o "ftp://user:pwd@ftp.scrapybooj.com/items.json"
scrapy crawl spider_name -o "s3://aws_key:aws_secret@scrapybook/items.json"
现在进行
scrapy parse --spider=spider_name url
会显示已经抓取的item
存入数据库需要用Pipeline 中间件, 在之后的笔记中会记录