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日

相关文章

  • 开源:云寻觅中文分词 (Yunxunmi Chinese Word Segmentation) ,词汇440万,10万字文章分词并计算频率不超过1秒

    开源:云寻觅中文分词 (Yunxunmi Chinese Word Segmentation) ,词汇440万,10万字文章分词并计算频率不超过1秒 云寻觅中文分词 (Yunxunmi Chinese Word Segmentation) 指的是将一个汉字序列切成一个一个单独的词。云寻觅中文分词就是将连续的字序列按照一定的规范重新组合成词序列的 过程。中文分…

    2023年4月10日
    00
  • Python Ajax爬虫案例分享

    Python Ajax爬虫案例分享 前言 在 Web 开发中,Ajax 技术已经非常普遍,接下来我将分享如何使用 Python 编写爬取 Ajax 技术的网站数据的爬虫。 爬虫的基础知识 在开始编写爬虫之前,你需要了解以下基础知识: requests 库:一个用于发送 HTTP/1.1 请求的 Python 库,可以让我们访问 Web 站点的内容。 Beau…

    云计算 2023年5月18日
    00
  • .net core并发下线程安全问题详解

    .NET Core并发下线程安全问题详解 在.NET Core应用程序中,线程安全是一个非常重要的问题。在多线程环境下,如果没有正确处理线程安全问题,可能会导致数据竞争、死锁等问题。本文将详细讲解.NET Core并发下线程安全问题,包括线程安全的概念、线程安全的实现方式、线程安全的示例说明等内容。 线程安全的概念 线程安全是指在多线程环境下,程序能够正确地…

    云计算 2023年5月16日
    00
  • Python+FuzzyWuzzy实现模糊匹配的示例详解

    接下来我将详细讲解“Python+FuzzyWuzzy实现模糊匹配的示例详解”的完整攻略。 标题 1. 简介 在实际应用中,我们经常需要对字符串进行模糊匹配。例如,我们可以根据用户输入的关键词,匹配出数据库中的所有包含该关键词的数据。这时,FuzzyWuzzy这个库就可以派上用场了。FuzzyWuzzy库是一个基于Levenshtein距离算法的模糊匹配工具…

    云计算 2023年5月18日
    00
  • 腾讯推出国内首个云原生成本优化开源项目 Crane

    关于我们 更多关于云原生的案例和知识,可关注同名【腾讯云原生】公众号~ 福利: ①公众号后台回复【手册】,可获得《腾讯云原生路线图手册》&《腾讯云原生最佳实践》~ ②公众号后台回复【系列】,可获得《15个系列100+篇超实用云原生原创干货合集》,包含Kubernetes 降本增效、K8s 性能优化实践、最佳实践等系列。 ③公众号后台回复【白皮书】,可…

    云计算 2023年4月11日
    00
  • 创新工场李开复:三领域将有几十倍增长空间(移动互联网,电子商务,云计算)

    李开复特别看好移动互联网的发展。     本去年从Google中国区总裁位置离职后,李开复创办了创新工场,至今创新工场还未有推出一个项目。在昨天的IT领袖峰会上,李开复表示,自己最看好三个领域,分别是移动互联网、电子商务、云计算,这些领域将有几十倍增长空间。他还透露,目前创新工场约有70名技术人员正研究新的移动互联网及电子商务的机遇,“我们的第一个项目肯定会…

    云计算 2023年4月13日
    00
  • 阿里巴巴云计算面试

    c++基础: 虚函数 自己实现一个栈,push pop getMin 时间复杂度 O(1) 方式:用另外一个栈 minStack来维护当前元素对应的最小值 push 插入元素的时候 直接插入 dataStack 如果 newNum < minStack.top , minStack.push(newNum) 否则 minStack.push(minSt…

    云计算 2023年4月9日
    00
  • 云计算基础——Linux系统部署之通过VMware部署CentOS 7系统

    云计算基础——Linux系统部署之通过VMware部署CentOS 7系统 1.安装并打开VMware-workstation(使用管理员身份运行); 2.在VMware-workstation中点击创建新的虚拟机;             3.点击“自定义”,点击“下一步” 4.默认,点击“下一步”; 5.选择“稍后安装操作系统”,点击“下一步”; 6.选…

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