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

yizhihongxing

浅谈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遍历文件夹和读写文件的实现代码

    让我来给你详细讲解“Python遍历文件夹和读写文件的实现代码”的完整攻略。 1. 遍历文件夹 1.1 获取文件夹下的所有文件 Python中使用os模块可以遍历指定目录下的所有文件和文件夹。os模块中提供了os.walk()方法,该方法返回一个三元组,分别是当前文件夹名称,当前文件夹内所有子文件夹的名称列表,当前文件夹内的所有文件的名称列表。可以使用for…

    python 2023年5月20日
    00
  • Python中pip安装非PyPI官网第三方库的方法

    当我们需要使用 Python 项目中没有包含的第三方库时,通常可以使用 pip 工具进行安装。但是,如果第三方库不在 PyPI 官网上,该如何安装呢?下面是一些安装非 PyPI 官网第三方库的方法。 1. 使用其他包管理工具 有些第三方库可能在其他包管理工具中提供,例如我们可以使用 conda 安装一些非 PyPI 第三方库。例如: conda instal…

    python 2023年5月14日
    00
  • Python文本特征抽取与向量化算法学习

    Python文本特征抽取与向量化算法学习 1. 什么是文本特征抽取和向量化? 在文本处理中,我们通常需要将文本转换为计算机可处理的形式,即向量化。文本向量化的过程分为两个步骤,即文本特征抽取和向量化。 文本特征抽取是指从文本中提取有用的特征,常见的有词袋特征、N-gram特征、TF-IDF特征等。其中,词袋特征是将文本中出现的所有单词视为一个集合,然后用每个…

    python 2023年6月5日
    00
  • Python实现一个简单的MySQL类

    下面是Python实现一个简单的MySQL类的详细攻略: 主要步骤 安装MySQLdb模块 在Python中操作MySQL需要使用MySQL官方提供的MySQLdb模块,因此首先需要安装MySQLdb模块。可使用以下命令进行安装: pip install MySQLdb 编写MySQL类 MySQL类是本次实现的重点,在该类中需要完成与MySQL数据库的连接…

    python 2023年5月19日
    00
  • Python print函数:如何将对象打印输出

    Python的内置函数print()是用于将文本或其他对象输出到屏幕的方法。在Python中,print()函数有多种用法,可以用于输出字符串、数字、对象等,并可以通过一些参数进行格式化输出。 以下是使用print函数将对象打印输出的完整攻略: 标准格式 在Python中,使用print函数输出最基本的方式就是直接在括号中输入要输出的内容。 示例: prin…

    python 2023年6月3日
    00
  • python线程、进程和协程详解

    Python 线程、进程和协程详解 在 Python 中,程序运行的实体可以分为线程、进程和协程。它们各自有着不同的特点和适用范围。 线程 什么是线程? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中真正执行的实体。 Python 的线程是操作系统的原生线程,由操作系统调度。Python 使用 threading 模块来创建线程。 如…

    python 2023年5月19日
    00
  • Python3 加密(hashlib和hmac)模块的实现

    Python3 加密模块实现攻略 在Python3中,我们可以使用hashlib和hmac模块来进行加密操作。在本文中,我们将详细讲解如何使用这两个模块来实现加密操作。 hashlib模块 hashlib模块提供了一种简单的方法来使用各种加密算法,包括MD5和SHA1等常用的算法。下面是使用hashlib模块进行加密的步骤: 1. 导入hashlib模块 i…

    python 2023年6月2日
    00
  • 小白scrapy爬虫简单例子之爬取农业银行分支结构信息

    *.准备工作:爬取的网站地址:http://www.abchina.com/cn/AboutABC/nonghzx/fzjg/jnbranch_org/         爬取的内容:下图中每个省份(或者城市)对应的弹框里的支行信息 1.打开终端,进入到要存放scrapy项目的文件夹下,并创建一个scrapy项目:  2.自动创建的目录结构(各个文件及文件夹的…

    爬虫 2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部