python中scrapy处理项目数据的实例分析

针对“python中scrapy处理项目数据的实例分析”的完整攻略,我将分别从以下几个方面进行讲解:

  1. scrapy项目数据的处理流程
  2. scrapy数据抓取的实现方式
  3. scrapy数据处理的实例说明

1. scrapy项目数据的处理流程

scrapy的数据处理流程主要包括:数据抓取、数据解析、数据存储。下面分别对这三个步骤进行说明:

  1. 数据抓取:通过HTTP请求爬取目标网站上的数据。
  2. 数据解析:对抓取到的数据进行解析,将需要的信息抽取出来。
  3. 数据存储:将解析后的数据进行持久化存储。

2. scrapy数据抓取的实现方式

scrapy的数据抓取主要通过spiders实现。使用scrapy创建一个spider,需要继承scrapy.Spider类,并指定name、allowed_domains、start_urls这三个属性。其中,name为spider的唯一标识,allowed_domains为允许爬取的域名,start_urls为spider要抓取的起始页URL。

scrapy中常用的两种数据抓取方式为:

  1. 使用scrapy自带的response对象进行数据抓取。
  2. 使用第三方数据抓取库进行数据抓取,例如:requests、urllib等。

3. scrapy数据处理的实例说明

下面以抓取豆瓣电影Top250为例,对scrapy数据处理进行说明。其中,需要用到的库有:scrapy、requests、re。

具体步骤如下:

  1. 创建一个scrapy项目,使用命令scrapy startproject douban_movie即可创建一个名为douban_movie的scrapy项目。
  2. 创建一个名为douban_spider的spider,在douban_movie/spiders目录下创建douban_spider.py文件,并添加如下代码:
import scrapy
from douban_movie.items import DoubanMovieItem


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

    def parse(self, response):
        # 解析数据
        item = DoubanMovieItem()
        for info in response.xpath('//div[@class="info"]'):
            title = info.xpath('div[@class="hd"]/a/span[1]/text()').extract_first().strip()
            info_str = info.xpath('div[@class="bd"]/p[1]/text()').extract_first().strip().split('\n')
            director = info_str[0].split(':')[-1].strip()
            actors = info_str[1].strip()
            year = info_str[2].split(':')[-1].strip()
            country = info_str[3].split(':')[-1].strip()
            category = info_str[4].split(':')[-1].strip()
            score = info.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract_first().strip()
            comment_num = re.search('\d+', info.xpath('div[@class="bd"]/div[@class="star"]/span[last()]/text()').extract_first()).group()
            quote = info.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract_first()
            item['title'] = title
            item['director'] = director
            item['actors'] = actors
            item['year'] = year
            item['country'] = country
            item['category'] = category
            item['score'] = score
            item['comment_num'] = comment_num
            item['quote'] = quote
            yield item

        # 翻页处理
        next_page = response.xpath('//span[@class="next"]/a/@href')
        if next_page:
            next_url = response.urljoin(next_page[0].extract())
            yield scrapy.Request(next_url, callback=self.parse)

在这个示例中,我们使用了response对象的xpath方法进行数据解析,获取到需要的数据,并使用item进行持久化存储。

  1. 创建一个DoubanMovieItem,用于存储豆瓣电影Top250的电影信息,在douban_movie/items.py文件中添加如下代码:
import scrapy


class DoubanMovieItem(scrapy.Item):
    title = scrapy.Field()
    director = scrapy.Field()
    actors = scrapy.Field()
    year = scrapy.Field()
    country = scrapy.Field()
    category = scrapy.Field()
    score = scrapy.Field()
    comment_num = scrapy.Field()
    quote = scrapy.Field()
  1. 运行spider,使用scrapy crawl douban -o movie.csv命令即可将数据存储到名为movie.csv的文件中。

除了抓取豆瓣电影Top250之外,我们再来看一个抓取拉钩网招聘信息的实例:

  1. 创建一个名为lagou_spider的spider,在douban_movie/spiders目录下创建lagou_spider.py文件,并添加如下代码:
import scrapy
import json
from urllib.parse import urlencode
from douban_movie.items import LagouJobItem


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

    def parse(self, response):
        # 获取反爬取cookies
        cookies_str = ''
        for cookie in response.headers.getlist('Set-Cookie'):
            cookies_str += str(cookie, encoding='utf-8')
        anti_spider_cookies = {}
        for cookie in cookies_str.split(';'):
            values = cookie.split('=')
            anti_spider_cookies[values[0]] = values[1]

        # 发起招聘信息搜索请求
        data = {
            'first': True,
            'pn': 1,
            'kd': 'python'
        }
        search_url = 'https://www.lagou.com/jobs/positionAjax.json?' + urlencode(data)
        headers = {
            'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
            'Cookie': cookies_str,
        }
        yield scrapy.Request(search_url, callback=self.parse_job_list, headers=headers, cookies=anti_spider_cookies)

    def parse_job_list(self, response):
        # 解析招聘信息列表
        result = json.loads(response.text)
        job_list = result['content']['positionResult']['result']
        for job in job_list:
            item = LagouJobItem()
            item['company_name'] = job['companyFullName']
            item['job_name'] = job['positionName']
            item['salary'] = job['salary']
            item['work_city'] = job['city']
            item['work_years'] = job['workYear']
            item['education'] = job['education']
            item['job_description'] = job['positionAdvantage']
            yield item

        # 翻页处理
        total_page_num = result['content']['positionResult']['totalCount'] // 15
        for page in range(1, total_page_num + 1):
            data = {
                'first': False,
                'pn': page,
                'kd': 'python'
            }
            search_url = 'https://www.lagou.com/jobs/positionAjax.json?' + urlencode(data)
            headers = {
                'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
                'Cookie': response.request.headers['Cookie'],
            }
            yield scrapy.Request(search_url, callback=self.parse_job_list, headers=headers, cookies=response.request.cookies)

在这个示例中,我们使用了反爬取Cookie进行反爬取处理,并使用json解析了拉钩网的招聘信息JSON格式数据。

  1. 创建一个LagouJobItem,用于存储拉钩网招聘信息,在douban_movie/items.py文件中添加如下代码:
import scrapy


class LagouJobItem(scrapy.Item):
    company_name = scrapy.Field()
    job_name = scrapy.Field()
    salary = scrapy.Field()
    work_city = scrapy.Field()
    work_years = scrapy.Field()
    education = scrapy.Field()
    job_description = scrapy.Field()
  1. 运行spider,使用scrapy crawl lagou -o lagou_job.csv命令即可将数据存储到名为lagou_job.csv的文件中。

以上就是关于“python中scrapy处理项目数据的实例分析”的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中scrapy处理项目数据的实例分析 - Python技术站

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

相关文章

  • WebApi+Bootstrap+KnockoutJs打造单页面程序

    下面是关于“WebApi+Bootstrap+KnockoutJs打造单页面程序”的完整攻略,包含两个示例说明。 简介 在本攻略中,我们将使用WebApi、Bootstrap和KnockoutJs来打造一个单页面程序。我们将使用WebApi来提供数据服务,使用Bootstrap来构建UI界面,使用KnockoutJs来实现数据绑定和交互。 步骤1:创建Web…

    云计算 2023年5月16日
    00
  • Python爬取科目四考试题库的方法实现

    下面是Python爬取科目四考试题库的方法实现的攻略。 1. 前置知识 在实现爬虫之前,我们需要掌握以下知识: HTML基础知识,包括HTML标签、DOM结构、CSS样式等 Python编程基础,包括基本数据类型、流程控制、函数、模块等 requests库的基本使用方法 BeautifulSoup库的基本使用方法 2. 爬虫实现步骤 2.1 获取网页源代码 …

    云计算 2023年5月18日
    00
  • asp.net core实现文件上传功能

    下面我将详细讲解如何使用ASP.NET Core实现文件上传功能的完整攻略。 一、创建ASP.NET Core项目 首先,我们需要创建一个ASP.NET Core项目作为我们的示例,我们可以使用Visual Studio或者是VS Code等开发工具创建一个新的ASP.NET Core Web应用程序。 二、实现文件上传功能 接下来,我们需要在ASP.NET…

    云计算 2023年5月17日
    00
  • 详解数据库中跨库数据表的运算

    数据库中跨库数据表的运算是指在不同的数据库之间进行表格之间的操作。如果想要进行跨库操作需要用到数据库模式或链接操作符号。以下是详细的攻略解释。 1. 链接两个库中的表 想要在两个不同库中的表格进行操作,首先需要我们将这两个库连接起来。连接两个库可以使用联合查询和UNION操作符。 1.1 联合查询 联合查询是通过SQL语句使用UNION操作符将两个独立的SE…

    云计算 2023年5月18日
    00
  • 中国云计算市场,现状如何?

    当下,全球云计算市场已逐渐形成较为稳定的格局,但是增速仍然迅猛,尤其是今年突如其来的疫情极大的刺激了云服务特别是公有云服务市场的投资。 根据IDC调研的数据,一季度受疫情影响,很多企业云计算策略都发生了一定的变化,有48%的企业计划将他们云战略部分向公有云服务转移。28%的企业计划全部向公有云服务战略转移。 企业二季度在云计算基础设施投资方面,公有云服务的基…

    云计算 2023年4月13日
    00
  • SpringBoot整合EasyExcel的完整过程记录

    下面就是“SpringBoot整合EasyExcel的完整过程记录”的攻略: 一、前置知识 在开始整合EasyExcel之前,需要掌握一些基本的知识: SpringBoot的基本使用:包括依赖管理、配置文件、注解等基本用法。 Maven的基本使用:包括依赖管理、项目构建等基本用法。 EasyExcel的基本使用:包括读写excel文件、常用API等基本用法。…

    云计算 2023年5月18日
    00
  • Intel和NVIDIA加速卡买哪个好?Intel Xeon Phi与NVIDIA Tesla P100对比评测

    Intel和NVIDIA加速卡买哪个好? 本文将介绍Intel和NVIDIA加速卡买哪个好以及Intel Xeon Phi与NVIDIA Tesla P100对比评测的完整攻略,包括加速卡的选择、对比评测、示例说明等。 1. 加速卡的选择 在选择加速卡时,需要考虑以下几个方面: 应用场景:不同的应用场景需要不同的加速卡,例如深度学习、科学计算、图形渲染等; …

    云计算 2023年5月16日
    00
  • 云计算 读paper笔记

    paper title : Above the Clouds: A berkeley View of Cloud Computing   1、云计算对IT业带来的改变 ① making software even more attractive as a service ② shaping the way IT hardware is design and …

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