Scrapy框架

一、Scrapy框架

异步处理框架,可配置和可扩展程度非常高,Python中使用最广泛的爬虫框架

二、框架组成

1、引擎(Engine) :整个框架核心
2、调度器(Scheduler) :接受从引擎发过来的URL,入队列
3、下载器(Downloader):下载网页源码,返回给爬虫程序
4、项目管道(Item Pipeline) :数据处理
5、下载器中间件(Downloader Middlewares)
处理引擎与下载器之间的请求与响应
6、蜘蛛中间件(Spider Middlerwares)
处理爬虫程序输入响应和输出结果以及新的请求
7、Item :定义爬取结果的数据结构,爬取的数据会被赋值为Item对象

三、Scrapy框架的爬取流程

在这里插入图片描述

四、PyCharm创建Scrapy爬虫项目

(一)安装scrapy

pip install scrapy

(二)创建一个python项目

创建ScrapyDemo项目
在这里插入图片描述

(三)创建Scrapy爬虫项目

  1. 终端下执行 scrapy startproject 项目名
    在这里插入图片描述
  2. 生成如下文件即完成
    在这里插入图片描述

(四)Scrapy项目中创建爬虫文件

  1. 终端下进入Scrapy项目文件中
    在这里插入图片描述
  2. 终端下运行scrapy genspider 文件名 域名
    在这里插入图片描述
  3. 查看spiders文件,生成文件则为成功
    在这里插入图片描述

(五)处理数据

1.修改日志级别

为了显示简洁,将日志打印级别设置为ERROR,否则会打印很多INFO级别日志,妨碍查看
在settings.py中添加 LOG_LEVEL = 'ERROR'
在这里插入图片描述

2.处理请求数据

修改爬虫文件sina_news.py

# -*- coding: utf-8 -*-
import scrapy


class SinaNewsSpider(scrapy.Spider):
    name = 'sina_news'
    allowed_domains = ['www.sina.com.cn']
    start_urls = ['http://www.sina.com.cn/']

    def parse(self, response):
        # 打印url
        print(response.url)

        # 打印标题, 使用xpath
        # # extract() 返回列表  extract_first() 返回字符串
        title = response.xpath('/html/head/title/text()').extract_first()
        print(title)

        # 打印html前100个字符
        print(response.body.decode('utf-8')[:100])

在这里插入图片描述

(六)运行爬虫项目

1.终端运行

保证运行路径在Scrapy项目中
在终端下运行scrapy crawl 爬虫文件名
在这里插入图片描述

2.代码文件运行

  1. 在Scrapy项目下创建run.py文件
    在这里插入图片描述
  2. run.py文件中添加
from scrapy import cmdline

if __name__ == '__main__':
    cmdline.execute('scrapy crawl sina_news'.split())
  1. 运行run.py
    在这里插入图片描述

五、scrapy项目文件详解

(一)目录结构

在这里插入图片描述

(二)settings.py配置

# 是否遵守robots协议,该为False
ROBOTSTXT_OBEY = False
# 最大并发量,默认为16个
CONCURRENT_REQUESTS = 32
# 下载延迟时间为3秒
DOWNLOAD_DELAY = 3
# 请求报头
DEFAULT_REQUEST_HEADERS = {
'User-Agent': "Mozilla/5.0",
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
# 蜘蛛中间件
SPIDER_MIDDLEWARES = {
'testspider.middlewares.TestspiderSpiderMiddleware': 543,
}
# 下载器中间件
DOWNLOADER_MIDDLEWARES = {
'testspider.middlewares.TestspiderDownloaderMiddleware': 543,
}
# 管道文件
ITEM_PIPELINES = {
'testspider.pipelines.TestspiderPipeline': 300,
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值