爬取的链接: http://www.imooc.com/course/list
爬取的内容: 课程链接, 课程的图片url, 课程的名称, 学习人数, 课程描述
1.安装scrapy模块

pip install scrapy

2.新建项目

scrapy startproject mySpider(项目名)
cd mySpider
tree # 可以看到文件中的树状图
├── mySpider
│   ├── __init__.py
│   ├── items.py            # 提取的数据信息
│   ├── middlewares.py      # 中间键
│   ├── pipelines.py        # 管道, 如何存储数据
│   ├── __pycache__
│   ├── settings.py         # 设置信息
│   └── spiders             # 爬虫(解析页面的信息)
│       ├── __init__.py
│       └── __pycache__
└── scrapy.cfg

3.定义爬取的items内容(编写items.py)

class CourseItem(scrapy.Item):# 课程标题title = scrapy.Field()# 课程的url地址url = scrapy.Field()# 课程图片url地址image_url = scrapy.Field()# 课程的描述introduction = scrapy.Field()# 学习人数student = scrapy.Field()

4.创建一个爬虫,编写代码进行解析

scrapy  genspider  mooc(文件名,可自取) "www.imooc.com"(允许爬取的域名)
cd mySpider/spiders/
编写mooc.py文件# 从items.py 导入Courseltem类
from mySpider.items import CourseItemclass MoocSpider(scrapy.Spider):# name: 用于区别爬虫, 必须是唯一的;name = 'mooc'# 允许爬取的域名;其他网站的页面直接跳过;allowed_domains = ['www.imooc.com']# 爬虫开启时第一个放入调度器的url地址;start_urls = ['http://www.imooc.com/course/list'] # 这里放入我们所需要的页面信息的url地址# 被调用时, 每个初始url完成下载后, 返回一个响应对象(response),# 负责将响应的数据分析, 提取需要的数据items以及生成下一步需要处理的url地址请求;def parse(self, response):# 1). 实例化对象, CourseItemcourse = CourseItem()# 分析响应的内容# scrapy分析页面使用的是xpath语法# 2). 获取每个课程的信息: <div class="course-card-container">courseDetails = response.xpath('//div[@class="course-card-container"]')for courseDetail in courseDetails:# 课程的名称:# "htmlxxxx"course['title'] = courseDetail.xpath('.//h3[@class="course-card-name"]/text()').extract()[0]# 学习人数course['student'] = courseDetail.xpath('.//span/text()').extract()[1]# 课程描述:course['introduction'] = courseDetail.xpath(".//p[@class='course-card-desc']/text()").extract()[0]# 课程链接, h获取/learn/9 ====》 http://www.imooc.com/learn/9course['url'] = "http://www.imooc.com" + courseDetail.xpath('.//a/@href').extract()[0]# 课程的图片url:course['image_url'] = 'http:' + courseDetail.xpath('.//img/@src').extract()[0]yield  course# 爬取新的网站, Scrapy里面进行调试(parse命令logging)# url跟进, 获取下一页是否有链接;hrefurl  = response.xpath('.//a[contains(text(), "下一页")]/@href')[0].extract()if url:# 构建新的urlpage = "http://www.imooc.com" + urlyield scrapy.Request(page, callback=self.parse)

5.存储爬虫(编写pipelines.py文件和settings.py文件)
1.编写pipelines.py文件
1).将爬取的信息保存为Json格式

class MyspiderPipeline(object):"""将爬取的信息保存为Json格式"""def __init__(self):self.f = open('mooc.txt', 'w')def process_item(self, item, spider):# 默认传过来的item是json格式import json# 读取item中的数据, 并转成json格式;line = json.dumps(dict(item), ensure_ascii=False, indent=4)self.f.write(line + '\n')# 一定要加, 返回给调度器;return itemdef open_spider(self, spider):"""开启爬虫时执行的函数"""passdef close_spider(self, spider):"""当爬虫全部爬取结束的时候执行的函数"""self.f.close()

2).将爬取的信息保存为csv数据格式

class CsvPipeline(object):#保存为csv数据格式def __init__(self):self.f  = open('mooc.csv','w')def process_item(self, item, spider):#默认传过来的item为json数据item =  dict(item)self.f.write("{0}:{1}:{2}:{3}:{4}\n".format(item['title'],item['student'],item['introduction'],item['url'],item['image_url']))return itemdef open_spider(self, spider):"""开启爬虫时执行的函数"""passdef close_spider(self, spider):"""当爬虫全部爬取结束的时候执行的函数"""self.f.close()

3).将爬取的信息存储到mysql数据库中

###创建Mooc数据库,并指定编码格式为utf-8
create database Mooc DEFAULT CHARACTER SET utf8import pymysqlclass MysqlPipeline(object):"""将爬取的信息保存到数据库中"""def __init__(self):super(MysqlPipeline, self).__init__()self.conn = pymysql.connect(host='localhost',user='root',password='redhat',db='Mooc',charset='utf8',)self.cursor = self.conn.cursor()def process_item(self, item, spider):# xxxx:xxxxx:xxxx# item时一个对象,item = dict(item)info = (item['title'], item['url'], item['image_url'], item['introduction'], item['student'])insert_sqli = "insert into moocinfo values('%s', '%s', '%s', '%s', '%s'); " %(info)# open('mooc.log', 'w').write(insert_sqli)# # 用来检测代码是否达到指定位置, 并用来调试并解析页面信息;self.cursor.execute(insert_sqli)self.conn.commit()return itemdef open_spider(self, spider):"""开启爬虫时执行的函数"""create_sqli = "create table if not exists  moocinfo (title varchar(50), url varchar(200), image_url varchar(200), introduction varchar(500), student int)"self.cursor.execute(create_sqli)def close_spider(self, spider):"""当爬虫全部爬取结束的时候执行的函数"""self.cursor.close()self.conn.close()

4).下载爬取信息中的图片

import  scrapy
from  scrapy.pipelines.images import ImagesPipeline# scrapy框架里面,
class ImagePipeline(ImagesPipeline):def get_media_requests(self, item, info):# 返回一个request请求, 包含图片的url地址yield  scrapy.Request(item['image_url'])# 当下载请求完成后执行的函数/方法def item_completed(self, results, item, info):# open('mooc.log', 'w').write(results)#  获取下载的地址image_path = [x['path'] for ok,x in results if ok]if not image_path:raise  Exception("不包含图片")else:return  item

2.编写settings.py文件

打开项目名字和爬虫模块说明,引擎根据这个信息找到爬虫
BOT_NAME = 'mySpider'SPIDER_MODULES = ['mySpider.spiders']
NEWSPIDER_MODULE = 'mySpider.spiders'ITEM_PIPELINES = {# 管道的位置: 优先级, 0~1000, 数字越小, 优先级越高;'mySpider.pipelines.MyspiderPipeline': 300,'mySpider.pipelines.CsvPipeline': 400,'mySpider.pipelines.MysqlPipeline': 500,'mySpider.pipelines.ImagePipeline': 200,}#图片存储的路径
IMAGES_STORE =  '/root/PycharmProjects/day29/mySpider/img'

6.运行爬虫

scrapy crawl mooc

结果:

mooc.txt

mooc.csv

使用scrapy爬虫框架爬取慕课网全部课程信息相关推荐

  1. 小白scrapy试炼-爬取慕课网免费课程

    本文参考博客: scrapy爬虫-爬取慕课网全部课程 scrapy爬虫框架入门实例 准备工作: anaconda(为了简单安装scrapy) 安装scrapy的方法有好多种,原来在pip上花了挺多时间 ...

  2. Python Scrapy爬虫框架爬取51job职位信息并保存至数据库

    Python Scrapy爬虫框架爬取51job职位信息并保存至数据库 -------------------------------- 版权声明:本文为CSDN博主「杠精运动员」的原创文章,遵循CC ...

  3. Python Scrapy 爬虫框架爬取推特信息及数据持久化!整理了我三天!

    最近要做一个国内外新冠疫情的热点信息的收集系统,所以,需要爬取推特上的一些数据,然后做数据分类及情绪分析.作为一名合格的程序员,我们要有「拿来主义精神」,借助别人的轮子来实现自己的项目,而不是从头搭建 ...

  4. Scrapy爬虫之爬取当当网图书畅销榜

      本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下:   我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...

  5. python爬取链家_python+scrapy爬虫(爬取链家的二手房信息)

    之前用过selenium和request爬取数据,但是感觉速度慢,然后看了下scrapy教程,准备用这个框架爬取试一下. 1.目的:通过爬取成都链家的二手房信息,主要包含小区名,小区周边环境,小区楼层 ...

  6. Python 采用Scrapy爬虫框架爬取豆瓣电影top250

    scrapy 简介 在此,默认已经安装好Scrapy,如果没有安装可以到scrapy 官网下载安装. 注意: 在安装Scrapy之前首先需要安装一下python第三方库:(安装方法并不在本文讲解范围, ...

  7. 用Scrapy爬虫框架爬取食品论坛数据并存入数据库

    这篇文章主要给大家介绍了食品网站的数据采集和存储过程,详解了如何分析网页结构.爬虫策略.网站类型.层级关系.爬虫方法和数据存储过程,最终实现将帖子的每条评论爬取到数据库中,并且做到可以更新数据,防止重 ...

  8. Python使用Scrapy爬虫框架爬取天涯社区小说“大宗师”全文

    大宗师是著名网络小说作家蛇从革的系列作品"宜昌鬼事"之一,在天涯论坛具有超级高的访问量.这个长篇小说于2015年3月17日开篇,并于2016年12月29日大结局,期间每天有7万多读 ...

  9. 简单python爬虫案例(爬取慕课网全部实战课程信息)

    技术选型 下载器是Requests 解析使用的是正则表达式 效果图: 准备好各个包 # -*- coding: utf-8 -*- import requests #第三方下载器 import re ...

最新文章

  1. 获取 Andriod keystore签名证书文件,用于打包APP应用
  2. Cesium学习笔记(九):导入3D模型(obj转gltf)
  3. Unet项目解析(5): 数据封装、数据加载、数据显示
  4. 保姆式参赛教程全公开,居然还送10万奖金?
  5. 吉林白山:“五脏俱全”的智能WiFi路灯点亮智慧城市
  6. java中select的用法_mybaties中select用法,以及常用增删改查
  7. [有限元] 面积坐标的幂函数在三角形单元,三角形环单元上的积分公式和体积坐标的幂函数在常应变四面体单元上的积分公式
  8. Keras-Sequential模型(2)
  9. JavaScript语言精粹:对象——读书笔记
  10. centos 并发请求数_jmeter 实战分析并发、RPS、RT 公式换算
  11. Jenkins整合Sonar
  12. 代码安全 | 什么是OWASP?OWASP十大漏洞解析
  13. MT4MT5跟单EA系统跨平台
  14. SPSS数据分析流程
  15. QT5.1标准对话框按钮显示英文问题解决办法
  16. “Internet来宾帐户”的设置的问题
  17. HTML5中引入字体样式的常用方法-Iconfont(阿里巴巴矢量图库)和IcoMoon-APP
  18. 七巧板复原算法之四——边沿贴合和空腔查找
  19. NOIP 2012 普及组 复赛 culture 文化之旅
  20. 2022-09-15 mysql列存储引擎-语法树转换

热门文章

  1. css 光影掠过文字显现动画
  2. 工作5年左右的程序员如何在职业瓶颈期内快速提升自己的身价?提升后如何有效变现自己的高质量技能?
  3. 积累20180604
  4. 如何构建用户评分体系
  5. Arduino基础入门篇16—数码管库的使用
  6. 基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料)
  7. css预处理器sass/scss入门
  8. eclipse将程序打包放到linux运行
  9. WebGL入门之基于WebGL的3D可视化引擎介绍
  10. Dynamic Slimmable Network