正文
parse
Parse URL (using its spider) and print the results
runspider
Run a self-contained spider (without creating a project)
settings
Get settings values
shell
Interactive scraping console
startproject
Create new project
version
Print Scrapy version
view
Open URL in browser, as seen by Scrapy
Scrapy开发
项目编写流程
-
创建项目
使用 scrapy startproject proname 创建一个scrapy项目
scrapy startproject
[project_dir]
-
编写item
在items.py中编写Item类,明确从response中提取的item
-
编写爬虫
编写spiders/proname_spider.py,即爬取网站的spider并提取出item
-
编写item pipeline
item的处理,可以存储
1 创建项目
1.1 豆瓣书评爬取
标签为“编程”,第一页、第二页链接:
https://book.douban.com/tag/%E7%BC%96%E7%A8%8B?start=0&type=T
https://book.douban.com/tag/%E7%BC%96%E7%A8%8B?start=20&type=T
随便找一个目录来创建项目,执行下面命令
$ scrapy startproject first .
会产生如下目录和文件
first
├─ scrapy.cfg
└─ first
├─ items.py
├─ middlewares.py
├─ pipelines.py
├─ settings.py
├─ __init__.py
└─ spiders
└─ __init__.py
-
first:
外部的first目录是整个项目目录,内部的first目录是整个项目的全局目录
-
scrapy.cfg:
必须有的重要的项目的配置文件
-
first 项目目录
-
__init__.py 必须有,包文件
-
items.py 定义Item类,从scrapy.Item继承,里面定义scrapy.Field类实例
-
pipelines.py 重要的是process_item()方法,处理item
-
settings.py:
-
BOT_NAME 爬虫名
-
ROBOTSTXT_OBEY = True 是否遵从robots协议
-
USER_AGENT = '' 指定爬取时使用
-
CONCURRENT_REQEUST = 16 默认16个并行
-
DOWNLOAD_DELAY = 3 下载延时,一般要设置,不宜过快发起连续请求
-
COOKIES_ENABLED = False 缺省是启用,一般需要登录时才需要开启cookie
-
SPIDER_MIDDLEWARES 爬虫中间件
-
DOWNLOADER_MIDDLEWARES 下载中间件
-
ITEM_PIPELINES 管道配置
-
spiders目录
__init__.py 必须有,可以在这里写爬虫类,也可以写爬虫子模块
BOT_NAME = 'first'
SPIDER_MODULES = ['first.spiders']
NEWSPIDER_MODULE = 'first.spiders'
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 3
COOKIES_ENABLED = False
注意一定要更改User-Agent,否则访问 https://book.douban.com/ 会返回403
2 编写Item
在items.py中编写
import scrapy
class BookItem(scrapy.Item):
title = scrapy.Field()
rate = scrapy.Field()
3 编写爬虫
为爬取豆瓣书
评编写爬虫类,在spiders目录下:
class Spider():
def parse(self, response):
raise NotImplementedError
爬取读书频道,tag为“编程”的书名和评分:
https://book.douban.com/tag/%E7%BC%96%E7%A8%8B?start=20&type=T
使用模板创建spider, $ scrapy genspider -t basic book douban.com
import scrapy
class BookSpider(scrapy.Spider):
name = 'doubanbook'
allowed_domains = ['douban.com'