浅谈Scrapy网络爬虫框架的工作原理和数据采集

浅谈Scrapy网络爬虫框架的工作原理和数据采集

Scrapy框架概述

Scrapy是一个基于Python的高级网络爬虫框架,它的设计初衷是为了提高网络爬取效率和性能。同时,Scrapy支持多种数据提取和存储方式,包括JSON、XML和CSV等数据格式以及MySQL、MongoDB等多种数据存储方式。

Scrapy框架的工作原理

Scrapy的工作原理和其他网络爬虫框架类似,通常包括以下步骤:

  1. 发送HTTP请求:Scrapy通过发送HTTP请求来获取目标网站上的数据。

  2. 解析HTML响应:Scrapy通过解析目标网站的HTML响应来获取数据。

  3. 数据处理:Scrapy通过多种方式对获取的数据进行处理,例如数据清洗、数据筛选。

  4. 数据存储:Scrapy支持多种数据存储方式,将获取到的数据存储在指定的存储介质中。

简单来说,Scrapy框架通过向目标网站发送HTTP请求获取HTML响应,再通过解析HTML响应来获取需要采集的数据。之后对获取的数据进行清洗和处理,最后将其存储在指定的数据存储介质中。

Scrapy框架的数据采集示例

下面我们通过两个示例来介绍Scrapy框架的数据采集过程。

示例1:爬取豆瓣电影TOP250

首先,我们需要创建一个Scrapy项目,并定义数据模型(Item)和数据提取规则。下面是一个数据模型示例:

class MovieItem(Item):
    title = scrapy.Field()
    link = scrapy.Field()
    rating = scrapy.Field()
    cover = scrapy.Field()
    category = scrapy.Field()
    country = scrapy.Field()
    language = scrapy.Field()
    director = scrapy.Field()
    actor = scrapy.Field()
    introduction = scrapy.Field()

然后,在Scrapy的spider中定义数据提取规则,具体规则如下:

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    start_urls = ['https://movie.douban.com/top250']

    def parse(self, response):
        items = []
        movies = response.css('.item')
        for movie in movies:
            item = MovieItem()
            item['title'] = movie.css('.title::text').extract_first()
            item['link'] = movie.css('.hd a::attr(href)').extract_first()
            item['rating'] = movie.css('.rating_num::text').extract_first()
            item['cover'] = movie.css('.pic img::attr(src)').extract_first()
            item['category'] = movie.css('.bd p:nth-child(1)::text').extract_first().strip().split('/')[0]
            item['country'] = movie.css('.bd p:nth-child(1)::text').extract_first().strip().split('/')[1]
            item['language'] = movie.css('.bd p:nth-child(1)::text').extract_first().strip().split('/')[2]
            item['director'] = movie.css('.bd p:nth-child(2)::text').extract_first().strip().split(':')[1]
            item['actor'] = movie.css('.bd p:nth-child(3)::text').extract_first().strip()
            item['introduction'] = movie.css('.bd p:nth-child(2).quote::text').extract_first().strip()
            items.append(item)
        return items

最后,在Scrapy项目目录下执行以下命令启动爬虫即可:

scrapy crawl douban -o douban.csv

示例2:爬取拉勾网招聘信息

首先,我们需要创建一个Scrapy项目,并定义数据模型(Item)和数据提取规则。下面是一个数据模型示例:

class JobItem(Item):
    title = scrapy.Field()
    company = scrapy.Field()
    salary = scrapy.Field()
    location = scrapy.Field()
    experience = scrapy.Field()
    education = scrapy.Field()
    category = scrapy.Field()
    tags = scrapy.Field()
    link = scrapy.Field()
    time = scrapy.Field()

然后,在Scrapy的spider中定义数据提取规则,具体规则如下:

class LagouSpider(scrapy.Spider):
    name = 'lagou'
    allowed_domains = ['lagou.com']
    start_urls = ['https://www.lagou.com/']

    def start_requests(self):
        for keyword in self.settings.get('KEYWORDS'):
            url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
            headers = {
                'Referer': 'https://www.lagou.com/',
                'User-Agent': self.settings.get('USER_AGENT'),
                'X-Requested-With': 'XMLHttpRequest'
            }
            formdata = {
                'first': 'true',
                'pn': '1',
                'kd': keyword
            }
            yield scrapy.FormRequest(url=url, headers=headers, formdata=formdata, callback=self.parse)

    def parse(self, response):
        items = []
        data = json.loads(response.text)
        for job in data['content']['positionResult']['result']:
            item = JobItem()
            item['title'] = job['positionName']
            item['company'] = job['companyFullName']
            item['salary'] = job['salary']
            item['location'] = job['city']
            item['experience'] = job['workYear']
            item['education'] = job['education']
            item['category'] = job['firstType']
            item['tags'] = ','.join(job['positionLables'])
            item['link'] = 'https://www.lagou.com/jobs/' + str(job['positionId']) + '.html'
            item['time'] = job['createTime']
            items.append(item)
        return items

最后,在Scrapy项目目录下执行以下命令启动爬虫即可:

scrapy crawl lagou -o lagou.csv

总结

本文介绍了Scrapy网络爬虫框架的工作原理和数据采集过程,并通过两个示例详细讲解了Scrapy框架的使用。使用Scrapy框架可以轻松快速地实现网络爬虫,并对采集到的数据进行多种方式的处理和存储。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈Scrapy网络爬虫框架的工作原理和数据采集 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python中defaultdict的用法详解

    下面是“Python中defaultdict的用法详解”的完整攻略。 什么是defaultdict 在Python中,defaultdict是一个字典子类,它覆盖了一些基本字典的方法,允许我们为字典中缺少的键提供默认值。 当我们使用一个没有被收录到字典中的键的时候,defaultdict会自动为这个键创建一个默认值。 默认值可以是int, list, dic…

    python 2023年6月3日
    00
  • 详解Python3 基本数据类型

    详解Python3基本数据类型 Python3中的数据类型主要分为以下几类: 数字类型(Number) 字符串类型(String) 列表类型(List) 元组类型(Tuple) 字典类型(Dictionary) 集合类型(Set) 接下来,我们分别详解每种数据类型。 数字类型(Number) Python3支持三种不同的数字类型:整型(int)、浮点型(fl…

    python 2023年5月14日
    00
  • 深入理解Python爬虫代理池服务

    Python爬虫代理池服务是爬虫开发中常用的技术,可以帮助我们解决IP被封锁、访问速度慢等问题。本文将详细讲解Python爬虫代理池服务的实现过程,包括如何获取代理IP、如何测试代理IP、如何使用代理IP等。 获取代理IP 要获取代理IP,我们可以使用一些免费或付费的代理IP服务。以下是一个示例,演示如何使用免费的代理IP服务获取代理IP: import r…

    python 2023年5月15日
    00
  • Python Splinter单击表条件中的链接

    【问题标题】:Python Splinter Click Link in Table ConditionalPython Splinter单击表条件中的链接 【发布时间】:2023-04-06 15:21:01 【问题描述】: 鉴于此(“睡眠”方法是为了让您可以看到我在看什么): from splinter import Browser import tim…

    Python开发 2023年4月7日
    00
  • Python映射类型之dict详解

    Python映射类型之dict详解 简介 dict是Python内置的一种映射类型,也叫字典,是一个键值对的无序集合。这里的“键”必须是唯一的。 定义和初始化 定义一个空的字典: d = {} 初始化一个字典: d = {‘name’: ‘张三’, ‘age’: 20} 也可以使用dict()函数初始化: d = dict(name=’张三’, age=20…

    python 2023年5月13日
    00
  • python批量赋值操作实例

    下面我来详细讲解”python批量赋值操作实例”的完整流程。首先,我们需要了解什么是批量赋值操作。 批量赋值操作指的是一次性为多个变量赋值,可以简洁高效地写出代码。在Python中,我们可以通过元组、列表、字典等多种方式实现批量赋值操作。 元组方式实现批量赋值 a, b = 1, 2 print(a) # 输出1 print(b) # 输出2 以上代码中,采…

    python 2023年6月6日
    00
  • python的keyword模块用法实例分析

    Python是一种强大、易于学习和高效的编程语言,具有广泛的应用领域。在Python中,有许多内置的模块,这些模块可以帮助我们更方便、更高效地完成一些任务。其中一个非常有用的模块是keyword模块,它可以让我们查看Python中的保留关键字。 一、什么是keyword模块 keyword模块是Python内置模块之一,它提供了一个列表,其中包含Python…

    python 2023年6月5日
    00
  • 一文掌握Python爬虫XPath语法

    一文掌握Python爬虫XPath语法攻略 什么是XPath XPath是一种用于在XML和HTML文档中进行导航和查找信息的语言。XPath的语法相对简洁明了,可以将多个条件组合起来进行查询,是爬虫中常用的解析技术之一。 XPath语法结构 XPath通过路径表达式来选取XML或HTML文档中的节点或元素。 选取节点 在XPath中,节点可以通过路径表达式…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部