欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

网络爬虫框架Scrapy详解之Request

程序员文章站 2022-05-12 09:19:08
...

Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。Scrapy可以说是目前Python爬虫框架中最成熟最稳定的框架之一,所以我们使用Scrapy框架来做爬虫开发可以说是好钢用在刀刃上。

###一、Scrapy主要包括了以下组件:

###二、Scrapy 1.Scrapy的五大模块: *引擎(Scrapy):用来处理整个系统的数据流处理, 触发事务(框架核心)

*调度器(Scheduler):调度器接受引擎传来的数据,维护需要爬取的网页URL队列,并通过规定的调度机制将URL创建为下载请求。

*下载器(Downloader):用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)

*管道(Item Pipeline):将爬取到的内容转换为实体对象,并对实体对象做有效性验证、持久化等等自定义的操作。

*爬虫(Spiders):在爬虫中,定义爬取URL的规则和网页信息的提取规则。

2.基本流程

3.创建项目

4.爬取伯乐在线IT标签的所有文章的信息 1、分析 网址:blog.jobbole.com/category/it… 2、在items文件的类中创建所需字段

3、在spiders文件夹中创建一个scrapy.Spider的子类,并重写其中的name、start_urls、parse()

name = "list_spider"
start_urls = ["http://blog.jobbole.com/all-posts/"]
    def parse(self, response):
        result = dict()
        print("++++++"*50)
        container = response.xpath("//div[@class='post floated-thumb']")
        curr_page = int(response.xpath("//span[@class='page-numbers current']/text()").extract_first())
        # print(type(container))
        list_index = 1
        for item in container:
            # print(item)
            result["thumb_url"] = item.xpath("./div[@class='post-thumb']//img/@src").extract_first()
            content_container = item.xpath(".//div[@class='post-meta']")
            result["date"] = ""
            date_b = content_container.xpath("./p/text()").extract()
            match = re.findall("(\d{4}/\d{2}/\d{2})", str(date_b))
            if len(match):
                result["date"] = match[0]
            result["title"] = content_container.xpath("./p/a[@class='archive-title']/text()").extract_first()
            result["tag"] = content_container.xpath("./p/a[@rel]/text()").extract_first()
            result["summary"] = content_container.xpath("./span[@class='excerpt']/p/text()").extract_first()
            result["detail_url"] = content_container.xpath(".//span[@class='read-more']/a/@href").extract_first()
            result["curr_index"] = (curr_page-1) * 20 + list_index
            yield result
            list_index += 1
        next_page = response.xpath("//a[@class='next page-numbers']/@href").extract_first()
        if next_page:
            yield scrapy.Request(url=next_page, callback=self.parse)

复制代码

提取标签信息用的是xpath,可以参考www.w3school.com.cn/xpath/index… 4、这时候所有数据都已经爬取到了,scrapy会将爬取到的数据输出到控制台

将数据存到数据库:
存到csv:
存到Excel:

###三、Request介绍: Request类是一个http请求的类,对于爬虫而言是一个很重要的类。通常在Spider中创建这样的一个请求,在Downloader中执行这样的一个请求。 同时也有一个子类FormRequest继承于它,用于post请求。

####Spring中获取request的几种方法 方法1:Controller中加参数 代码示例:

该方法实现的原理是,在Controller方法开始处理请求时,Spring会将request对象赋值到方法参数中。Controller中获取request对象后,如果要在其他方法中(如service方法、工具类方法等)使用request对象,需要在调用这些方法时将request对象作为参数传入。

方法2:自动注入 代码示例:

方法3:基类中自动注入 与方法2相比,将注入部分代码放入到了基类中。 代码示例: 基类代码:

Controller代码如下;这里列举了BaseController的两个派生类,由于此时测试代码会有所不同,因此服务端测试代码没有省略;客户端也需要进行相应的修改(同时向2个url发送大量并发请求)。

方法4:手动调用 代码示例:

方法5:@ModelAttribute方法 下面这种方法及其变种(变种:将request和bindRequest放在子类中)在网上经常见到: 代码示例:

还有很多包括视频我就不一一截图了,需要这些资料的可以先关注小编,转发评论,私信小编

转载于:https://juejin.im/post/5b6aea6b51882508603d1af7