爬虫-7.Scrapy框架初级

scrapy入门

Scrapy工作流程

在这里插入图片描述

名称 作用
Scrapy engine(引擎) 总指挥:负责数据和信号的在不同模块间的传递
Scheduler(调度器) 一个队列,存放引擎发过来的request请求
Downloader(下载器) 下载把引擎发过来的requests请求,并返回给引擎
Spider(爬虫) 处理引擎发来的response,提取数据,提取url,并交给引擎
Item Pipline(管道) 处理引擎传过来的数据,比如存储
Downloader Middlewares(下载中间件) 可以自定义的下载扩展,比如设置代理
Spider Middlewares(中间件) 可以自定义requests请求和进行response过滤

创建Scrapy项目

在开始爬取之前,您必须创建一个新的Scrapy项目:

  1. 在终端输入命令:scrapy startproject mySpider (后面的mySpider是项目名称,可以任意取)
  2. 跟着提示输入
    在这里插入图片描述
    图片里面的第三步中的 gsw 爬虫文件的名字,gushiwen.cn是爬取的范围(域名)。

启动爬虫

第一种方式:在终端进入项目的根目录,执行下列命令启动spider: scrapy crawl xxx
第二种方式:在项目的根目录下面创建一个py文件,在里面输入下面类容,并且在这个文件我们能直接运行。

from scrapy import cmdline

cmdline.execute(['scrapy', 'crawl', 'xxx'])

settings文件

对settings.py 文件的一些配置项进行简单介绍:

  1. 是否遵守robots协议, 一般改为False

    ROBOTSTXT_OBEY = True
    
  2. 并发量,默认为16

    # Configure maximum concurrent requests performed by Scrapy (default: 16)
    # CONCURRENT_REQUESTS = 32
    
  3. 下载延迟

    # DOWNLOAD_DELAY = 3
    
  4. 请求报头

    # Override the default request headers:
    #DEFAULT_REQUEST_HEADERS = {
         
    #   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    #   'Accept-Language': 'en',
    #}
    
  5. 爬虫中间件

    #SPIDER_MIDDLEWARES = {
         
    #    'gu_shi_wen.middlewares.GuShiWenSpiderMiddleware': 543,
    #}
    
  6. 下载中间件

    #DOWNLOADER_MIDDLEWARES = {
         
    #    'gu_shi_wen.middlewares.GuShiWenDownloaderMiddleware': 543,
    #}
    
  7. 管道

    #ITEM_PIPELINES = {
         
    #    'gu_shi_wen.pipelines.GuShiWenPipeline': 300,
    #}
    

我们也可以在settings.py文件里面手动添加一些其它的配置项:

设置日志等级:LOG_LEVEL = 'WARNING'


解析数据

在scrapy的爬虫文件里面,我们可以使用xpath来进行数据解析,它会返回一个Selector对象。如果我们要获取则需要使用下面的方法。

获取一条数据

  • extract_first(),或者get()

获取多条数据

  • extract(),或者getall()

例:

class DbSpider(scrapy.Spider):
    name = 'db'
    allowed_domains = ['douban.com']
    start_urls = ['https://music.douban.com/chart']

    def parse(self, response, **kwargs):
        # print(response.text)
        li_tags = response.xpath('//ul[@class="col5"]/li')
        # print(li_tags, type(li_tags))
        for li_tag in li_tags:
            song_names = li_tag.xpath('./div[@class="intro"]/h3/a/text()').extract_first()
            print(song_names)
            song_name = li_tag.xpath('./div[@class="intro"]/h3/a/text()')
            print(song_name)
            break

运行结果:

City light(original version)
[<Selector xpath='./div[@class="intro"]/h3/a/text()' data='City light(original version)'>]

scrapy.Request

scrapy.Request(url, callback=None, method='GET', headers=None, body=None,cookies=None, meta=None, encoding='utf-8', priority=0,
dont_filter=False, errback=None, flags=None)

常用参数为:
callback:指定传入的URL交给那个解析函数去处理
meta:实现不同的解析函数中传递数据,meta默认会携带部分信息,比如下载延迟,请求深度
dont_filter:让scrapy的去重不会过滤当前URL,scrapy默认有URL去重功能,对需要重复请求的URL有重要用途

翻页处理

在爬虫文件里面我们可能需要爬取很多页,这就需要我们进行翻页处理;
1、找到翻页的url,并找出翻页url的规律
2、使用yield scrapy.Request(),在里面的url参数传你要翻页的url

import scrapy
from gu_shi_wen.items import GuShiWenItem

class 
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值