Scrapy 框架 安装 五大核心组件 settings 配置 管道存储
scrapy 框架的使用
博客: https://www.cnblogs.com/bobo-zhang/p/10561617.html
安装:
- pip install wheel 
- 下载 - Twisted-18.9.0-cp36-cp36m-win_amd64.whl
 下载地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/
- 安装 twisted - pip install Twisted-18.9.0-cp36-cp36m-win_amd64.whl
- pip install pywin32 
- pip install scrapy 
基础使用:
- 创建项目:
- scrapy startproject 项目名称
- cd 到项目目录中
 
- 创建爬虫文件
- scrapy genspider 文件名称 www.xxx.com
- 课创建多个爬虫文件
 
Settings参数:
ROBOTSTXT_OBEY = True  #----------- 是否遵守robots.txt
CONCURRENT_REQUESTS = 16  ## ----------- 开启线程数量,默认16
AUTOTHROTTLE_START_DELAY = 3  # ----------- 开始下载时限速并延迟时间
AUTOTHROTTLE_MAX_DELAY = 60  # ----------- 高并发请求时最大延迟时间
# 最底下的几个:是否启用在本地缓存,如果开启会优先读取本地缓存,从而加快爬取速度,视情况而定
HTTPCACHE_ENABLED = True
HTTPCACHE_EXPIRATION_SECS = 0
HTTPCACHE_DIR = 'httpcache'
HTTPCACHE_IGNORE_HTTP_CODES = []
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
# 以上几个可以视项目需要开启,但是有两个参数最好每次都开启,而每次都是项目文件手动开启不免有些麻烦,最好是项目创建后就自动开启
# DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
# 这个是浏览器请求头,很多网站都会检查客户端的headers,比如豆瓣就是每一个请求都检查headers的user_agent,否则只会返回403,可以开启
#USER_AGENT = 'Chirco (+http://www.yourdomain.com)'
# 这个是至关重要的,大部分服务器在请求快了会首先检查User_Agent,而scrapy默认的浏览器头是scrapy1.1 我们需要开启并且修改成浏览器头,如:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1
# 解开注释
ITEM_PIPELINES = {
    #  300 表示权重 越小优先级越高
    'DemoPro.pipelines.DemoproPipeline': 300,
}
# 只打印 错误信息
LOG_LEVEL = 'ERROR'
LOG_FILE = 'log.txt'
五大核心组件:
- 引擎 ** (Scrapy)
 用来处理整个系统的数据流处理(分发), *触发事务(框架核心*)*
- 调度器 (Scheduler)
 用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回.可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列,* *由它来决定下一个要抓取的网址是什么,* 同时去除重复的网址
- 下载器 (Downloader)
 用于下载网页内容,* 并将网页内容返回给蜘蛛(Scrapy)下载器是建立在twisted这个高效的异步模型上的)
- 爬虫  ** (Spiders)
 爬虫是主要干活的,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让* *Scrapy继续抓取下一个页面**, 产生url 解析数据
- 管道 ** (Pipeline)
 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据**。
请求流程:
spider -> 引擎 -> 调度器(去重,调度器) -> 引擎 -> 下载器 -> 网络 -> 下载器 -> 引擎 -> spider ->管道
爬虫文件:
class DemoSpider(scrapy.Spider):
    name = 'demo'  # 爬蟲文件的名称
    # 允许的域名
    # allowed_domains = ['www.xxx.com']
	# 起始的 url 列表
    start_urls = ['https://www.qiushibaike.com/text/']
    # 请求成功的 回调函数  实现数据解析
    def parse(self, response):
        response.body # 获取二进制数据  同  requests 中的 content
        response.text  # 获取响应的 数据
        response.xpath()  # 直接使用 xpath 函数
        # 只能取出一个 元素
        author = div.xpath('./div/a[2]/h2/text()').extract_first()
        # 返回的列表元素时一个 selector 对象
        content = div.xpath('./a[1]//text()').extract()
基于终端指令的的 存储   scrapy crawl demo -o qiubai.csv
基于管道的永久存储
- 进行数据解析(author content)
- 在item类中定义相关的属性
- 在parse方法中实例化一个item类型的对象
- 将解析到的数据存储到item类型的对象中
- 使用yiled item将item对象提交给管道
- 在管道文件的process_item方法中接收item且对item中存储数据进行持久化存储
- 在settings配置文件中开启管道
- settings 配置 - USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36' # Obey robots.txt rules
 ROBOTSTXT_OBEY = False # 解开注释
 ITEM_PIPELINES = {
 # 300 表示权重 越小优先级越高
 'DemoPro.pipelines.DemoproPipeline': 300,
 }
 # 只打印 错误信息
 LOG_LEVEL = 'ERROR'
 
- 在items.py 文件中 - class DemoproItem(scrapy.Item):
 # define the fields for your item here like:
 # name = scrapy.Field()
 # 对应要存储的 元素
 author = scrapy.Field()
 content = scrapy.Field()
 pass
 
- 实现 爬虫文件中 - import scrapy
 from DemoPro.items import DemoproItem class DemoSpider(scrapy.Spider): def parse(self, response):
 div_list = response.xpath('//div[@id="content-left"]/div') for div in div_list:
 author = div.xpath('./div/a[2]/h2/text()').extract_first()
 content = div.xpath('./a[1]/div/span[1]//text()').extract()
 content = ' '.join([i.strip() for i in content])
 print(author, content)
 item = DemoproItem()
 # 并且将解析到的数据封装存储到了item类型的对象当中了
 item['author'] = author
 item['content'] = content # 向管道提交item类型的对象
 yield item- 在管道文件中进行 存储- pipeline.py
 - class DemoproPipeline(object):
 fp = None # 这个方法只执行一次
 def open_spider(self, spider):
 """ 父类的方法 开启文件句柄 """
 self.fp = open('qiubai.txt', 'w', encoding='utf-8') def process_item(self, item, spider):
 author = item['author']
 content = item['content']
 self.fp.write(author + '\n' + content + '\n')
 return item # 返回给了下一个即将被执行的管道类 def close_spider(self, spider):
 self.fp.close()
 
使用mysql 存储
settings 配置
ITEM_PIPELINES = {
    'DemoPro.pipelines.DemoproPipeline': 300,
    'DemoPro.pipelines.MySqlPipeline': 301,
    'DemoPro.pipelines.RedisPipeline': 302,
    # ... 注册其他的管道 类  300 为权重  权重小的 先执行
    # 可注册使用 mysql redis mongodb .. 数据库
}
class MySqlPipeline(object):
    conn = None
    cursor = None
    def open_spider(self, spider):
        self.conn = pymysql.Connect(host='127.0.0.1', port=3306, user='root', passwd='', db='spider')
    def process_item(self, item, spider):
        self.cursor = self.conn.cursor()
        try:
            self.cursor.execute('insert into data(author, content) values(%s,%s)' % (item["author"], item["content"]))
            self.conn.commit()
            print(item['author'])
        except Exception as e:
            print(e, 11111111)
            self.conn.rollback()
        return item
    def close_spider(self, spider):
        self.cursor.close()
        self.conn.close()
使用redis 存储
class RedisPipeline(object):
    conn = None
    def open(self, spider):
        self.conn = redis.Redis(host='127.0.0.1', port=6379)
    def process_item(self, item, spider):
        data = {
            'author': item['author'],
            'content': item['content']
        }
        self.conn.lpush('qiubaiData', data)
Scrapy 框架 安装 五大核心组件 settings 配置 管道存储的更多相关文章
- python 全栈开发,Day138(scrapy框架的下载中间件,settings配置)
		昨日内容拾遗 打开昨天写的DianShang项目,查看items.py class AmazonItem(scrapy.Item): name = scrapy.Field() # 商品名 price ... 
- Python爬虫进阶三之Scrapy框架安装配置
		初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ... 
- Python爬虫进阶之Scrapy框架安装配置
		Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此 ... 
- scrapy框架安装配置
		scrapy框架 scrapy安装(win) 1.pip insatll wheel 2.下载合适的版本的twisted:http://www.lfd.uci.edu/~gohlke/pythonli ... 
- 芝麻HTTP:Python爬虫进阶之Scrapy框架安装配置
		初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ... 
- Scrapy框架安装配置小结
		Windows 平台: 系统是 Win7 Python 2.7.7版本 官网文档:http://doc.scrapy.org/en/latest/intro/install.html 1.安装Pyt ... 
- python爬虫框架(3)--Scrapy框架安装配置
		1.安装python并将scripts配置进环境变量中 2.安装pywin32 在windows下,必须安装pywin32,安装地址:http://sourceforge.net/projects/p ... 
- Scrapy 框架 安装
		Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ... 
- scrapy框架安装及使用
		一.Windows安装 Twisted下载及安装 在https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应的Twisted的版本文件 在命令行进入到Twist ... 
随机推荐
- c# 怎么读取web.config中的配置项
			ConfigurationManager.AppSettings["templateId"] 
- T-SQL基础(六)之可编程对象
			变量 -- 声明变量 DECLARE @variable_name [AS] variable_type; -- 变量赋值 SET @variable_name = variable_value; 示 ... 
- [android] 采用服务执行长期后台的操作
			服务:在后台长期运行的没有界面的组件 新建一个类PhoneService类,继承系统的Service类 清单文件中 进行配置 新建一个节点<service>,设置名称android:nam ... 
- 解决org.hibernate.HibernateException: identifier of an instance of com.ahd.entity.Order was altered from2 to 0
			错误信息 严重: Servlet.service() for servlet [springmvc] in context with path [/order] threw exception [Re ... 
- 去除input[type=number]的默认样式
			input[type=number] { -moz-appearance: textfield; } input[type=number]::-webkit-inner-spin-button, in ... 
- TS学习随笔(一)->安装和基本数据类型
			去年学过一段时间的TS,但由于在工作中不常用.就生疏了,最近项目要求用TS,那我就再回去搞搞TS,写一篇记录一下自己学习TS的进度以及TS知识点 首先,关于TS的定义我就不在这描述了,想看百度一下你就 ... 
- 【读书笔记】iOS-库
			一,OS X和iOS自带一些标准的C程序库和操作系统相关的特殊性.在MAC和iOS的世界里,静态库采用.a扩展名(静态对象代码库存档),动态加载库采用.dylib扩展名.如果开发人员来自于Linux世 ... 
- 【代码笔记】Web-Javascript-Javascript函数
			一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ... 
- 使用git将Android源码上传到github
			下面举Android的Browser源码通过git保存到github上 首先在github.com官网new repository一个仓库 在Repository name哪里填入Browser然后创 ... 
- win10 出现0x80072efd错误
			0x80072efd 0x80072efd 是网络问题,windows更新或windows应用商店出现0x80072efd问题,请检查本机代理,是否开着小飞机(Shadowsocks)之类的代理工具. ... 
