爬虫scrapy框架不理解?通俗⼀点告诉你

目录

前言

⼀、爬取网址和内容,谁来定?

⼆、我定好内容了,谁来指挥?

三、settings和piplines

总结


前言

        简单来说scrapy是⼀个爬⾍框架,开发者定义好了内置的⽅法,我们只用修改其中执行的代码,就可以使⽤内置的方法爬取内容。你可以把它想象得像我们安装的模块,我们引⼊模块只管调⽤,知道它干了什么,下面这张图就形象的为我们展示了scrapy的结构:

爬虫scrapy框架不理解?通俗⼀点告诉你_第1张图片


⼀、爬取网址和内容,谁来定?

        spiders(爬⾍),就是放置了爬⾍⽂件的地⽅,我们这⾥设置了爬取的url,爬取的内容,还有将内容扔给引擎,总代码如下:

import scrapy 
import bs4 
from ..items import DoubanItem # 需要引用DoubanItem,它在items里面。因为是items在top250.py的上一级目录,所以要用..items,这是一个固定用法。
class DoubanSpider(scrapy.Spider): 
#定义一个爬虫类DoubanSpider。
    name = 'douban'
    #定义爬虫的名字为douban。 
    allowed_domains = ['book.douban.com']
    #定义爬虫爬取网址的域名。
    start_urls = [] 
    #定义起始网址。
    for x in range(3): 
        url = 'https://book.douban.com/top250?start=' + str(x * 25) 
        start_urls.append(url) 
        #把豆瓣Top250图书的前3页网址添加进start_urls。
    def parse(self, response): 
    #parse是默认处理response的方法。
        bs = bs4.BeautifulSoup(response.text,'html.parser') 
        #用BeautifulSoup解析response。
        datas = bs.find_all('tr',class_="item") 
        #用find_all提取元素,这个元素里含有书籍信息。
        for data in datas:  
        #遍历data。
            item = DoubanItem()
            #实例化DoubanItem这个类。
            item['title'] = data.find_all('a')[1]['title']  
            #提取出书名,并把这个数据放回DoubanItem类的title属性里。
            item['publish'] = data.find('p',class_='pl').text  
            #提取出出版信息,并把这个数据放回DoubanItem类的publish里。
            item['score'] = data.find('span',class_='rating_nums').text 
            #提取出评分,并把这个数据放回DoubanItem类的score属性里。
            print(item['title']) 
            #打印书名。
            yield item 
            #yield item是把获得的item传递给引擎

以下我将代码分开给大家讲解以下

1)import模块

from ..items import DoubanItem
        ..items我们要分为两部分,“..”和“items”
  • 相对路径⼤家都知道,.. 是指返回上⼀层⽂件夹
  • items是模块,也是我们⾃⼰编写的items.py
        所以..items就是我们跳出的spiders⽂件夹,返回上⼀个⽂件夹,在⾥⾯寻找items.py也就是这个⽂件,如下图所示:

爬虫scrapy框架不理解?通俗⼀点告诉你_第2张图片

2)定义的网址的代码
class DoubanSpider(scrapy.Spider): 
#定义一个爬虫类DoubanSpider。
    name = 'douban'
    #定义爬虫的名字为douban。 
    allowed_domains = ['book.douban.com']
    #定义爬虫爬取网址的域名。
    start_urls = [] 
    #定义起始网址。
    for x in range(3): 
        url = 'https://book.douban.com/top250?start=' + str(x * 25) 
        start_urls.append(url) 
        #把豆瓣Top250图书的前3页网址添加进start_urls。
  • allowed_domains:定义了爬取网站的域名,域名是指它的网站最前⾯的内容,这是这个网站的唯⼀标识,我们设置allowed_domains去定义爬取的域名,这样我们也让爬⾍知道自己要爬的是哪个网站的内容;

  • start_urls :定义了要爬取网站的网址,指的是设置我们爬取哪些⽹址,就是在这个域名下,它有哪些网址要爬,我们就定义在里面;

        重要提示:

  • 这⾥的变量是不能改变的!!这是框架固定好的变量;
  • 当我们设置好链接在start_urls之后,框架会⾃动发起请求,不需要我们requests;

3) 爬取的代码

def parse(self, response): 
#parse是默认处理response的方法。
    bs = bs4.BeautifulSoup(response.text,'html.parser') 
    #用BeautifulSoup解析response。
    datas = bs.find_all('tr',class_="item") 
    #用find_all提取元素,这个元素里含有书籍信息。
    for data in datas:  
    #遍历data。
        item = DoubanItem()
        #实例化DoubanItem这个类。
        item['title'] = data.find_all('a')[1]['title']  
        #提取出书名,并把这个数据放回DoubanItem类的title属性里。
        item['publish'] = data.find('p',class_='pl').text  
        #提取出出版信息,并把这个数据放回DoubanItem类的publish里。
        item['score'] = data.find('span',class_='rating_nums').text 
        #提取出评分,并把这个数据放回DoubanItem类的score属性里。
        print(item['title']) 
        #打印书名。
        yield item 
        #yield item是把获得的item传递给引擎
  • 框架自动发送请求后,爬取的内容返回了response,所以我们定义函数的时候要⽤response接收爬取的内容:
def parse(self, response): 
#parse是默认处理response的方法。
提示一下:这是固定的写法噢,parse是⼀定要这样写
  •  scrapy.Field():Field对象的主要目就是在一个地方定义好所有的数据而已,也就是定义好内容在同一个传输管道里。

⼆、我定好内容了,谁来指挥?

         通俗的说,当我们安排好了很多个url去获取数据时,如果没有⼈来安排他们,就会乱成⼀团,这个时候Scheduler调度器的作⽤来了,我们的爬⾍到调度器,经过了⼀些内容,其实就是在把requests请求进⾏配置配置好了之后把请求发给下载器(Downloader)下载;

而在框架中是怎么实现的呢?

scrapy crawl douban

 这⾥的crawl 其实就是 来启动框架配置的调度器的它存在于middlewares.py,这个⽂件是⾃动⽣成的,内容是调度器和下载器的⽅法属性,所以我们仅⽤知道它的过程,不需要修改代码。

爬虫scrapy框架不理解?通俗⼀点告诉你_第3张图片


三、settings和piplines

1)settings中含有多个变量配置,常见的如下:

BOT_NAME = 'douban' 
#Scrapy项目的名字,这将用来构造默认 User-Agent,同时也用来log,当您使用 startproject 命令创建项目时其也被自动赋值。
SPIDER_MODULES = ['douban.spiders'] 
#Scrapy搜索spider的模块列表 默认: [xxx.spiders]
NEWSPIDER_MODULE = 'douban.spiders' 
#使用 genspider 命令创建新spider的模块。默认: 'xxx.spiders'
#爬取的默认User-Agent,除非被覆盖
#USER_AGENT = 'demo1 (+http://www.yourdomain.com)'
#如果启用,Scrapy将会采用 robots.txt策略
ROBOTSTXT_OBEY = True
想知道每个变量的内容可以查看: https://blog.csdn.net/u011781521/article/details/70188171
2)piplines: 简单来说,这是⼀个传输的管道,就是传输的时候数据会返回到这⾥。 当爬⾍爬取的信息返回到了管道,我们就可以在这个piplines写下存储的代码,去获取 资源。

总结

        以上就是今天要讲的内容,本文介绍了爬⾍框架scrapy的一些相关知识。

        欢迎大家留言一起讨论问题~~~

你可能感兴趣的:(python,爬虫,python,爬虫,学习,经验分享)