在使用Scrapy框架过程中,每一条命令前均要写scrapy.
创建项目
scrapy startproject myproject
# startproject:表示创建项目
# myproject:表示我创建的项目名
创建的scrapy项目有如下文件结构:
———— myproject
|
|———— myproject/ #项目的Python模块,将会从这里引用代码
| |
| |———— __init__.py
| |———— items.py #项目的目标文件
| |———— pipelines.py #项目的管道文件,其中可创建多个管道类
| |———— settings.py #项目的设置文件
| |———— spiders/ #存储爬虫文件的目录
| |
| |———— __init__.py
| |———— myspider.py #爬虫,建项目时不建爬虫文件文件,需自己创建
| |———— ...
|
|———— scrapy.cfg #项目配置文件,无需修改
创建爬虫
scrapy genspider myspider "lab.scrapyd.cn"
# genspider:表示创建一个爬虫,默认为scrapy.Spider类
# myspider:表示爬虫名,与爬虫代码里的name参数一致
# "lab.scrapyd.cn":表示允许爬虫爬取的域范围
打开创建好的爬虫 myspider.py,默认内容如下:
# -*- coding: utf-8 -*-
import scrapy
class MyspiderSpider(scrapy.Spider):#定义爬虫类
name = 'myspider'#爬虫名
allowed_domains = ['lab.scrapyd.cn']#允许爬虫爬取的域名范围
start_urls = (
'http://lab.scrapyd.cn/',
)#爬虫要爬取的网页地址列表
def parse(self, response):#定义parse函数
pass
下面对其进行修改,使其爬取并打印http://lab.scrapyd.cn/page/1/页面的所有信息,如下:
# -*- coding: utf-8 -*-
import scrapy
class MyspiderSpider(scrapy.Spider):
name = 'myspider'
allowed_domains = ['lab.scrapyd.cn']
start_urls = ['http://lab.scrapyd.cn/page/1/']
def parse(self, response):
page = response.url.split('/')[-2]#取文件名
filename = 'wj-%s.html'%page
with open(filename,'wb') as f :
f.write(response.body)#写文件
#open('filename','wb').write(response.body)#写文件
self.log('保存文件: %s' % filename)# 打印日志
执行爬虫
scrapy crawl myspider
# crawl:表示启动一个scrapy爬虫
# myspider:表示爬虫名
可以看到项目列表中会出现一个存放着http://lab.scrapyd.cn/page/1/ 页面内容的html文件,如下
<!DOCTYPE HTML>
<html class="no-js">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="renderer" content="w