IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 26个数据分析案例——第五站:基于Scrapy的架构的数据采集 -> 正文阅读

[Python知识库]26个数据分析案例——第五站:基于Scrapy的架构的数据采集

26个数据分析案例——第五站:基于Scrapy的架构的数据采集

案例环境

  • Python: Python 3.x;

数据说明

  • title:课程标题
  • image_url:标题图片地址。
  • properties:课程性质。
  • stage:课程阶段。
  • enrollment:课程报名人数。

资料包

链接:https://pan.baidu.com/s/1-DUUUAOfpC4Gs5DAaHcgUg
提取码:5u6s

实验步骤

第一步:页面分析

在爬取某个网页中的数据之前,首先要学会如何去分析其页面的结构,我们想要的数据都在那个标签中,只有充分了解页面的整体结构才能够有效且快速的爬取数据。,本次实战案例将爬取慕课往的页面数据。
1、首先打开浏览器输入网址http://www.imooc.com/course/list
进入慕课网
在这里插入图片描述
2、在该页面任意空白区域,单击右键显示工具菜单,效果为:
在这里插入图片描述
3、单击“查看网页源代码(V)”查看网页源代码中的数据结构,并分析结构
在这里插入图片描述
从图中可以清晰的看出,

  • 每门课程的详细信息都包含在一个class名为“item free”的a标签中,
  • 课程标题包含在class为title ellipsis2的p标签中;
  • 课程正处于的阶段和报名的总人数包含在class为one的p标签中;
  • 课程性质被包含在class为“1”的span标签中;
  • 标题图片地址为class为“img”div标签的style属性值中。
    至此我们已经对页面中的数据结构有了一定的了解,下面我们就开始进行数据的采集。

第二步 编写代码采集数据

1、打开命令窗口,创建一个名为“InternetWorm”的Scrapy爬虫项目,命令如下所示。

scrapy startproject InternetWorm

结果为:
在这里插入图片描述
2、项目创建完成后进入InternetWorm项目的根目录,代码如下所示。

cd InternetWorm
scrapy genspider MySpider www.imooc.com/course/list

结果如图。
在这里插入图片描述
打开根目录中 的MySpider.py,并编写以下代码。

# -*- coding: utf-8 -*-
import scrapy
class MyspiderSpider(scrapy.Spider):
    name = 'MySpider'
    allowed_domains = ['imooc.com']
    start_urls = ['http://www.imooc.com/course/list/']
    def parse(self, response):
        pass

3、打开items.py ,在改文件中创建名为“CourseItem”的类,并定义好要爬取数据的相关字段。

# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class ScrapyprojectItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass
class CourseItem(scrapy.Item):
    # 课程标题
    title=scrapy.Field();
    # 标题图片地址
    image_url=scrapy.Field();
    # 课程性质
    properties=scrapy.Field();
    # 课程阶段
    stage=scrapy.Field();
    # 课程报名人数
    enrollment=scrapy.Field();

4、打开MySpider.py文件,修改allowed_domains(域名列表设置为imooc.com),之后导入Selector并解析Response对象并使用XPath方式选取所有列表内容,代码如下所示。

# -*- coding: utf-8 -*-
import scrapy
# 导入选择器
from scrapy.selector import Selector
class MyspiderSpider(scrapy.Spider):
    name = 'MySpider'
    allowed_domains = ['imooc.com']
    start_urls = ['http://www.imooc.com/course/list/']
    def parse(self, response):
        sel = Selector(response)
        # 使用xpath的方式选取所有列表内容
        sels = sel.xpath('//a[@class="item free "]')
        print(sels)
        pass

5、运行爬虫

scrapy crawl MySpider

在这里插入图片描述
6、程序能够正常运行说明上述步骤配置正确,打开MySpider.py文件,将items.py中的自定义类导入并实例化一个新的信息保存容器,最后通过遍历的方式获取内容并赋值给这个容器,

# -*- coding: utf-8 -*-
import scrapy
# 导入选择器
from scrapy.selector import Selector
# 导入items.py文件中定义的类
from InternetWorm.items import CourseItem
class MyspiderSpider(scrapy.Spider):
    name = 'MySpider'
    allowed_domains = ['imooc.com']
    start_urls = ['http://www.imooc.com/course/list/']
    def parse(self, response):
        sel = Selector(response)
        # 使用xpath的方式选取所有列表内容
        sels = sel.xpath('//a[@class="item free "]')
        # 实例一个容器保存爬取的信息
        item = CourseItem()
        # 遍历所有列表
        for box in sels:
            # 获取课程标题
            item['title'] = box.xpath('.//p[@class="title ellipsis2"]/text()').extract()[0].strip()
            print("课程标题:",item['title'])
            # 获取标题图片地址
            item['image_url'] = box.xpath('.//div[@class="img"]/@style').extract()[0].strip()[23:-2]
            print("标题图片地址:","http:"+item['image_url'])
            # 获取课程性质
            item['properties'] = box.xpath('.//span[@class="l"]/text()').extract()[0].strip()
            print("课程性质:",item['properties'])
            # 获取课程阶段
            item['stage'] = box.xpath('.//p[@class="one"]/text()').extract()[0].strip().split(" · ")[0]
            print("课程阶段:",item['stage'])
            # 获取课程报名人数
            item['enrollment'] = box.xpath('.//p[@class="one"]/text()').extract()[0].strip().split(" · ")[1][:-3]
            print("报名人数:",item['enrollment'])
        pass


重新运行项目。

scrapy crawl MySpider

在这里插入图片描述

7、如果您得到了和我一样的结果,恭喜你已经成功的爬取到了网页中的数据。但是只能够读取到一页的数据,下面我们将继续修改代码,实现自动翻页,这里使用xpath判断当页码标签中是否存在包含下一页的标签,如果存在就获取该标签内容,之后组合成下一页的网页地址并通过scrapy.Request()方法返回parse()函数继续爬取该页面的课程信息,直到页码标签中不存在下一页标签后停止,修改MySpider.py文件

# -*- coding: utf-8 -*-
import scrapy
# 导入选择器
from scrapy.selector import Selector
# 导入items.py文件中定义的类
from InternetWorm.items import CourseItem
pageIndex = 0
class MyspiderSpider(scrapy.Spider):
    name = 'MySpider'
    allowed_domains = ['imooc.com']
    start_urls = ['http://www.imooc.com/course/list']
    def parse(self, response):
        sel = Selector(response)
        # 使用xpath的方式选取所有列表内容
        sels = sel.xpath('//a[@class="item free "]')
        # 实例一个容器保存爬取的信息
        item = CourseItem()
        index = 0
        global pageIndex
        pageIndex += 1
        print('第' + str(pageIndex) + '页 ')
        print('----------------------------------------------')
        # 遍历所有列表
        for box in sels:
            # 获取课程标题
            item['title'] = box.xpath('.//p[@class="title ellipsis2"]/text()').extract()[0].strip()
            # 获取标题图片地址
            item['image_url'] = "http:"+box.xpath('.//div[@class="img"]/@style').extract()[0].strip()[23:-2]
            # 获取课程性质
            item['properties'] = box.xpath('.//span[@class="l"]/text()').extract()[0].strip()
            # 获取课程阶段
            item['stage'] = box.xpath('.//p[@class="one"]/text()').extract()[0].strip().split(" · ")[0]
            # 获取课程报名人数
            item['enrollment'] = box.xpath('.//p[@class="one"]/text()').extract()[0].strip().split(" · ")[1][:-3]
            index += 1
            # 迭代处理item,返回一个生成器
            yield item
        next = u'下一页'
        url = response.xpath("//a[contains(text(),'" + next + "')]/@href").extract()
        if url:
            # 将信息组合成下一页的url
            page = 'http://www.imooc.com' + url[0]
            # 返回url
            yield scrapy.Request(page, callback=self.parse)
        pass

重新执行项目。

scrapy crawl MySpider

在这里插入图片描述
最后还能够将爬取到的数据保存到文件中。

scrapy crawl MySpider -o data.csv

在这里插入图片描述
在这里插入图片描述

后续案例持续更新

01 基于Python的HBase冠字号查询系统
02基于Hive的民航客户价值分析
03 基于python的药店销售数据分析
04基于Flume与Kafka的web服务器日志数据采集
05 基于Scrapy的架构的数据采集
06 Linux操作系统实时日志采集并处理
07 医疗行业案例-中医病症辩证关联规则分析
08教育行业案例-高校学生生活数据分析
10 娱乐行业案例-广告收益回归预测模型
11网络行业案例-网站访问行为分析
12零售行业案例-店铺热门商品实时统计
13 营业额数据可视化
14金融行业案例-基于上市公司股票信息及其衍生变量的金融数据分析
15银行信用卡风险数据可视化
16 滴滴出行城市运营分析
17 幸福指数可视化
18 员工主动离职预警模型
19 歌手推荐模型
20 2020新冠肺炎疫情数据分析
21 淘宝购物狂欢节数据分析
22 共享单车数据分析
23人脸检测系统
24服装分拣系统
25口罩佩戴识别系统
26 imdb电影数据分析
20 2020新冠肺炎疫情数据分析
21 淘宝购物狂欢节数据分析
22 共享单车数据分析
23人脸检测系统
24服装分拣系统
25口罩佩戴识别系统
26 imdb电影数据分析

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:18:43  更:2021-08-11 12:23:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 20:03:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码