scrapy框架–基础加实例
- 为了提取网站数据,提取结构型数据而编写的应用框架,使用twisted高效异步网络框架来处理网络通信。
- Twisted 是用python实现的 基于事件驱动的网络引擎框架
诞生于2000年初,网络游戏开发者发现无论用什么语言都有 可兼容 扩展性 及 跨平台 的网络库,支持常见的传输和应用层协议,兼容这些协议Ssl /tls、tcp udp http imap…… - 和Python一样 具有内置电池,所支持的协议都带有客户端和服务器端实现(client-sever)
目录
一、结构
1.结构组成
1.engine(引擎):负责控制数据流在系统中所有组件中的流动,
触发其他几个中间件,相当于整个爬虫调度中心。
2.scheduler(调度器):接收引擎发来的requests请求,并加入队列,初始爬取url和网页中的待爬取url放入调度器等待被爬取,它会自动去重。
3.downloader(下载器):负责接受调度器的url,向服务器发送请求得到响应后将下载的网页内容提供给引擎 和spider(爬虫)。
4spider(爬虫) :分析response详细解析。
5.管道 :项负责数据的清洗、验证、过滤、去重和存储等后期处理,可同时连接十多个数据库,处理爬虫爬取出的item(封装过后的数据)。
下载中间件:引擎和下载器中间 l类似钩子函数 ,在特定情况下触发中间件,不能随意定义中间件,可以修改
爬虫中间件:引擎和下爬虫中间
2.爬取过程
Scrapy引擎发送请求,调度器把初始URL交给下载器,下载器向服务器发送服务请求,得到响应后将下载的网页内容交与蜘蛛来处理,蜘蛛会对网页进行详细的解析。蜘蛛分析的结果有两种:一种是得到新的URL,之后再次请求调度器,开始进行新一轮的爬取,另一种是得到所需的数据,之后会转交给项目管道继续处理。最后由Pipeline输出到文件中,或者存入数据库等。
二、创建项目
1.下载依赖
pip install wheel
二进制安装包
pip install scrapy
2.基本命令
scrapy startproject 项目名字 (创建项目)
cd 项目名字 (进入项目)
scrapy genspider 爬虫名 网址 (创建爬虫)
list 查看多少爬虫
进入指定爬虫进行爬虫
Cd spider路径 Vim 爬虫文件
scrapy crawl 爬虫名字 (分布式多线程) 如加名字:通用、 聚焦协程行爬虫
3.基本配置更改
1)关闭遵循机器人”君子协定“
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
2)配置随机请求头
修改下载中间件类:
import random
import time
from time import sleep
from scrapy.http import HtmlResponse
'''
这个类主要用于产生随机UserAgent
'''
#创建一个随机请求头
class RandomUserAgent(object):
#实例化一个USER_AGENTS
def __init__(self,agents):
self.agents = agents
@classmethod
def from_crawler(cls,crawler):
return cls(crawler.settings.getlist('USER_AGENTS'))
#添加随机请求头
def process_request(self,request,spider):
request.headers['User-Agent'] = random.choice(self.agents)
setting.py配置文件中定义多个请求头,并修改中间件类名(改成自己刚刚定义的随机请求头类):
DOWNLOADER_MIDDLEWARES = {
'boss.middlewares.RandomUserAgent': 543,
}
#定义多个请求头
USER_AGENTS = {
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)","Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"