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

yizhihongxing

针对“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日

相关文章

  • Python数据分析 Numpy 的使用方法

    Python数据分析 Numpy 的使用方法 Numpy 是 Python 中优秀的科学计算库,提供了高效的数组处理与计算功能。在数据分析领域,Numpy 有着极其广泛的应用,本文将详细讲解 Numpy 的使用方法,包括: Numpy 数组的创建与常见操作 Numpy 的数组索引与切片 Numpy 的数组运算 Numpy 的广播机制 Numpy 的常用函数 …

    云计算 2023年5月18日
    00
  • 【视频】k8s套娃开发调试dapr应用 – 在6月11日【开源云原生开发者日】上的演示

    这篇博客是在2022年6月11日的【开源云原生】大会上的演讲中的演示部分。k8s集群套娃(嵌套)是指在一个k8s的pod中运行另外一个k8s集群,这想法看上去很疯狂,实际上非常实用。 这篇博客是在2022年6月11日的【开源云原生】大会上的演讲中的演示部分。k8s集群套娃(嵌套)是指在一个k8s的pod中运行另外一个k8s集群,这想法看上去很疯狂,实际上非常…

    2023年4月9日
    00
  • “虚拟化 ”和“云计算”计算机技术新概念

    序二 “虚拟化 ”和“云计算”,这两个当下很时新,同时也的确是标志着计算机技术发展进入一个新阶段的概念,在本书中被具体地联系起来了。    我想,希望能搞清楚这两个概念及它们之间关系的人不会少,例如,我在 2008年底教育信息存储暨校园下一代数据中心建设与应用大会上试着以“云计算、虚拟化、海量单增信息系统 ”为题讲过,2009年1月在北京大学深圳研究生院试着…

    云计算 2023年4月12日
    00
  • C#控制台下测试多线程的方法

    下面是关于“C#控制台下测试多线程的方法”的完整攻略,包含两个示例说明。 简介 在C#中,我们可以使用多线程来实现并发执行任务。多线程可以提高程序的性能和响应能力。在控制台应用程序中,我们可以使用Thread类或Task类来创建和管理线程。 实现步骤 以下是在C#控制台下测试多线程的步骤: 创建控制台应用程序: 我们可以使用Visual Studio或命令行…

    云计算 2023年5月16日
    00
  • Selenium元素的常用操作方法分析

    Selenium元素的常用操作方法分析 介绍 Selenium是一个功能强大的自动化测试工具,可以用于模拟用户在浏览器内的操作以及对浏览器进行自动化测试。Selenium既可以用于Web应用程序的功能测试,还可以用于Web应用程序的性能测试。 在Selenium中,一些基本的操作方法用于与网页的元素进行交互,如点击、输入、选择等。掌握这些操作方法对自动化测试…

    云计算 2023年5月18日
    00
  • python中get和post有什么区别

    在Python中,GET和POST请求是两种常见的HTTP请求方式,主要的区别在于数据传输的方式和数据包大小的限制。 GET请求 GET请求是一种在URL中传输数据的请求方式。当使用GET请求时,数据会以一种可见的形式展现在URL中,因此GET请求比较适用于请求数据量比较少的情况。一般而言,GET请求的使用场景包括: 从服务器请求某个资源; 通过URL中的数…

    云计算 2023年5月18日
    00
  • 上云之前,CEO必须想明白的三个安全问题

    下面我将为您详细讲解“上云之前,CEO必须想明白的三个安全问题”的完整攻略。 一、数据隐私与合规性 CEO在考虑上云时,必须考虑数据隐私和合规性问题。随着不断提高的合规性要求,CEOs必须确保他们没有放弃对数据的控制权并且可以随时保护自己的数据。在上云之前,CEOs必须想明白以下问题: 在云上存储数据和应用程序是否符合数据安全法规? cloud vendor…

    云计算 2023年5月17日
    00
  • asp.net 自定义控件实现无刷新上传图片,立即显示缩略图,保存图片缩略图

    下面是关于“asp.net 自定义控件实现无刷新上传图片,立即显示缩略图,保存图片缩略图”的完整攻略,包含两个示例说明。 简介 在ASP.NET中,我们可以使用自定义控件来实现无刷新上传图片,并立即显示缩略图。我们可以使用FileUpload控件来上传图片,并使用Image控件来显示缩略图。在上传图片后,我们可以使用System.Drawing命名空间中的类…

    云计算 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部