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

26个数据分析案例——第五站:基于的架构的数据采集 案例环境数据说明资料包
链接:
提取码:5u6s
实验步骤 第一步:页面分析
在爬取某个网页中的数据之前,首先要学会如何去分析其页面的结构,我们想要的数据都在那个标签中,只有充分了解页面的整体结构才能够有效且快速的爬取数据 。,本次实战案例将爬取慕课往的页面数据 。
1、首先打开浏览器输入网址
进入慕课网
2、在该页面任意空白区域,单击右键显示工具菜单,效果为:
3、单击“查看网页源代码(V)”查看网页源代码中的数据结构,并分析结构
从图中可以清晰的看出,
第二步 编写代码采集数据
1、打开命令窗口,创建一个名为“”的爬虫项目,命令如下所示 。
scrapy startproject InternetWorm
结果为:
2、项目创建完成后进入项目的根目录,代码如下所示 。
cd InternetWormscrapy genspider MySpider www.imooc.com/course/list
结果如图 。
打开根目录中 的.py,并编写以下代码 。
# -*- coding: utf-8 -*-import scrapyclass 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 ,在改文件中创建名为“”的类,并定义好要爬取数据的相关字段 。
# -*- coding: utf-8 -*-# Define here the models for your scraped items## See documentation in:# https://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass ScrapyprojectItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()passclass CourseItem(scrapy.Item):# 课程标题title=scrapy.Field();# 标题图片地址image_url=scrapy.Field();# 课程性质properties=scrapy.Field();# 课程阶段stage=scrapy.Field();# 课程报名人数enrollment=scrapy.Field();

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

文章插图
4、打开.py文件,修改(域名列表设置为),之后导入并解析对象并使用XPath方式选取所有列表内容,代码如下所示 。
# -*- coding: utf-8 -*-import scrapy# 导入选择器from scrapy.selector import Selectorclass 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="7492-0e9d-cfc3-5621 item free "]')print(sels)pass
5、运行爬虫
scrapy crawl MySpider
6、程序能够正常运行说明上述步骤配置正确,打开.py文件,将items.py中的自定义类导入并实例化一个新的信息保存容器,最后通过遍历的方式获取内容并赋值给这个容器,
# -*- coding: utf-8 -*-import scrapy# 导入选择器from scrapy.selector import Selector# 导入items.py文件中定义的类from InternetWorm.items import CourseItemclass 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="5621-1f0d-e77c-a8b4 item free "]')# 实例一个容器保存爬取的信息item = CourseItem()# 遍历所有列表for box in sels:# 获取课程标题item['title'] = box.xpath('.//p[@class="a8b4-5936-2421-ec7b title ellipsis2"]/text()').extract()[0].strip()print("课程标题:",item['title'])# 获取标题图片地址item['image_url'] = box.xpath('.//div[@class="5621-1f0d-e77c-a8b4 img"]/@style').extract()[0].strip()[23:-2]print("标题图片地址:","http:"+item['image_url'])# 获取课程性质item['properties'] = box.xpath('.//span[@class="2421-ec7b-e925-7046 l"]/text()').extract()[0].strip()print("课程性质:",item['properties'])# 获取课程阶段item['stage'] = box.xpath('.//p[@class="e77c-a8b4-5936-2421 one"]/text()').extract()[0].strip().split(" · ")[0]print("课程阶段:",item['stage'])# 获取课程报名人数item['enrollment'] = box.xpath('.//p[@class="ec7b-e925-7046-7cf1 one"]/text()').extract()[0].strip().split(" · ")[1][:-3]print("报名人数:",item['enrollment'])pass