Scrapy框架
创建项目
- scrapy startproject testspider
- 创建了很多文件和文件夹
- 爬虫文件在spider文件夹下
通信原理
-
爬虫程序发请求给引擎
-
url从引擎到调度器,进入队列,处理url
-
把url给下载器,下载器进入网站发请求,得到html源码
-
html源码交给爬虫程序做解析
-
数据交给管道文件做数据处理,并存入数据库
-
如果做多重爬虫,可以再次提交url,即数据发给管道文件,url由爬虫程序处理
组件
- 引擎Engine:中间环节,所有的操作都是通过引擎传递完成的
- 调度器Scheduler:接收从引擎发来的url,入队列
- 下载器Downloader:下载网页源码,返回(通过引擎)给爬虫程序
- 项目管道Item Pipeline:做数据处理
- 下载器中间件Downloader Middlewaeres:在引擎和下载器之间,传输数据
- 蜘蛛中间件Spider Middlerwares:在爬虫程序和引擎之间,传输数据
- Item:定义爬取结果的数据结构,爬取的数据会被赋值为iterm对象。
爬取流程(可能会有循环嵌套)
- 爬虫发url给引擎,引擎给调度器
- 调度器,入队列
- 从队列中拿出url,交给引擎
- 引擎把url给下载器
- 返回response
- 爬虫程序处理response
- 数据交给管道文件,管道文件处理
开启爬虫步骤
- 新建项目
scrapy startproject testspider
- 明确目标(items.py中明确要爬什么)
- 写爬虫程序
- 处理数据
- 配置setting.py
项目配置
- 修改ROBOTSTXT_OBEY一般修改为False
- CONCURRENT_REQUESTS最大并发量,默认是16个
- DEFAULT_REQUEST_HEADERS 可以设置请求头,如User-Agent等的设置
- DOWNLOAD_DELAY设置下载延迟时间
- 修改蜘蛛?中间件和下载器中间件
DEMO
scrapy startproject baidu
- 修改item.py
- 创建爬虫文件
scrapy genspider baiduspider baidu.com
,把这个放到spider目录下才可以 - 编辑baiduspider.py
# -*- coding: utf-8 -*-
import scrapy
class BaiduspiderSpider(scrapy.Spider):
name = 'baiduspider'
allowed_domains = ['baidu.com']
# 第一个爬取的url,下载器第一个下载这个页面
start_urls = ['http://baidu.com/']
def parse(self, response):
print(response.text)
- 修改robots协议和headers
- 记住上面代码的name的值,cd到spider目录下
scraty crawl baiduspider