小白scrapy试炼-爬取慕课网免费课程
本文参考博客:
scrapy爬虫-爬取慕课网全部课程
scrapy爬虫框架入门实例
准备工作:
anaconda(为了简单安装scrapy)
- 安装scrapy的方法有好多种,原来在pip上花了挺多时间并且还没安装成功,
- 后来下载了anaconda只用几行指令就成功了,HTTPERROR时可以尝试换镜像或者重启。
- (如果懒得动手配置环境变量的话安装时把上面的选项打钩)
scrapy(根据框架编写爬虫)
- 在cmd中使用 scrapy startproject projectname(自定义项目名) 即可创建框架
- 启动则在项目根路径中 scrapy crawl spiderName(spider类中的name属性)
- 在cmd中清屏为cls,换路径为cd
可能遇到的坑:
- 启动时没用到类中字段name对应的名字。
- item类继承scrapy.item,spiderl类继承的是scrapy.Spider,不要打错了
- 解析时报错:list index out of range时可能是没获取到字段,应该检查XPaths是否有效
流程
- 编写流程:item->spider->pipelines
- 思路流程:获取URL->获取页面->解析页面->存储数据
①创建框架
打开cmd,scrapy startproject name(自定义)
②item类
根据自己想爬取的内容设置字段
name = scrapy.Field()
import scrapyclass CourseItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()#标题title= scrapy.Field()#页面路径url= scrapy.Field()#图片路径image_url= scrapy.Field()#课程描述introduction= scrapy.Field()#观看量student= scrapy.Field()
②Spider类
- url跟进可在完成单页爬取后再加入。
- 为了更好的匹配字段需要掌握XPath,当然用其他方式也行。
- 在进行url跟进时,用“下一页”为标记进行URL寻找比较方便。
name:spider名,启动时需要对应该字段,scrapy crawl name
allowed_domains:允许域名
start_urls:爬取的网址
parse:爬取方法
import scrapy
from imooc_spider.CourseItems import CourseItemclass MySpider (scrapy.Spider):#spider启动名name="imoocspider"#允许访问的域allowed_domains=["imooc.com"]#爬取地址start_urls=["http://www.imooc.com/course/list"]#改写parse爬取方法def parse(self,response):#实力一个容器保存爬取信息item=CourseItem()#爬取部分,使用xpath方式选择信息,具体方法根据网页结构#先获每个课程的divfor box in response.xpath('//div[@class="course-card-container"]/a[@target="_blank"]'):#获取每个div中的课程路径item['url'] = 'http://www.imooc.com' + box.xpath('.//@href').extract()[0]#获取div中的课程标题item['title'] = box.xpath('.//h3/text()').extract()[0].strip()#获取div中的标题图片地址item['image_url'] = box.xpath('.//@data-original').extract()[0]#获取div中的学生人数item['student'] = box.xpath('.//span/text()').extract()[1].strip()#获取div中的课程简介item['introduction'] = box.xpath('.//p/text()').extract()[0].strip()#返回信息yield item#url跟进开始(爬取完整的信息)url=response.xpath('//a[contains(text(),"下一页")]/@href').extract()if url:#将信息组合成下一页的urlpage='http://www.imooc.com' + url[0]#返回urlyield scrapy.Request(page,callback=self.parse)#url跟进结束
③pipelines类
pipelines用于存储数据,本案例将item存储为json格式
应该是我这理问题,依照参考博们的代码使用__int__方法后
报错指向文件生成这行:self.file.write(line)
from scrapy.exceptions import DropItem
import jsonclass MyPipeline(object):#def __int__(self):# 也可以将读取文件置入__int__方法中# self.file = open('data.json', 'w', encoding='utf-8')#该方法用于处理数据 def process_item(self,item,spider):#读取item中数据line=json.dumps(dict(item),ensure_ascii=False)+"\n"#写入文件self.file.write(line)#返回itemreturn item#该方法在spider开启时被调用def open_spider(self,spider):#打开文件self.file = open('data.json', 'w', encoding='utf-8') #该方法在spider关闭时被调用def close_spider(self,spider):self.file.close()
结果
在项目根目录出现了data.json文件
小白scrapy试炼-爬取慕课网免费课程相关推荐
- 使用scrapy爬虫框架爬取慕课网全部课程信息
爬取的链接: http://www.imooc.com/course/list 爬取的内容: 课程链接, 课程的图片url, 课程的名称, 学习人数, 课程描述 1.安装scrapy模块 pip in ...
- Python爬虫学习笔记 (9) [初级] 小练习 爬取慕课网课程清单
更新日期: 2021.03.28 本节学习内容 : 练习使用 bs4 和 xlwings - 爬取慕课网免费课程清单并存为 Excel 文件. 目录 1. 目标信息 2. 爬取步骤 3. 代码 5. ...
- 使用Scrapy框架爬取慕课网页
想要完成一个scrapy爬虫框架,那首先得明确自己想要爬取的东西是什么,要选择什么样的爬取方法.接下来我就讲一下我使用Scrapy框架爬取慕课网的一些思路以及过程. 思路:(1)打开慕课网址,并分析网 ...
- python爬虫爬取慕课网中的图片
我们简单地爬取慕课网中免费课程下的第一页的图片,如想爬取多页图片,可以添加for循环自行实现 python版本:3.6.5 爬取网址:http://www.imooc.com/course/list ...
- scrapy实现爬取全书网小说到Mysql数据库(附代码)
前言 本篇文章实现python的scrapy框架爬取全书网小说,scrapy框架的安装我在这里就不在赘述了,建议window用户使用anaconda安装,这里比较省心一些.运行环境python3(实际 ...
- Python爬虫实战+Scrapy框架 爬取当当网图书信息
1.环境准备 1.在python虚拟环境终端使用 pip install scrapy下载scrapy依赖库 2.使用scrapy startproject book创建scrapy心目工程 3.使用 ...
- 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据
为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...
- 我的第一个Scrapy 程序 - 爬取当当网信息
前面已经安装了Scrapy,下面来实现第一个测试程序. 概述 Scrapy是一个爬虫框架,他的基本流程如下所示(下面截图来自互联网) 简单的说,我们需要写一个item文件,定义返回的数据结构:写一个s ...
- 简单python爬虫案例(爬取慕课网全部实战课程信息)
技术选型 下载器是Requests 解析使用的是正则表达式 效果图: 准备好各个包 # -*- coding: utf-8 -*- import requests #第三方下载器 import re ...
最新文章
- Web3.js 0.20.x API 中文版翻译 1
- PowerDesigner使用教程【转】
- python表示不服怎么办_10万+的短视频被批量生产了,Python表示不服!
- Spring Boot 2.x基础教程:MyBatis的多数据源配置
- python3精要(2)-python运行过程,模块,内置对象
- Linux input子系统 io控制字段【转】
- 世界坐标系,摄像机坐标系、图像坐标系关系汇总
- r.java没有生成_R.java 常见问题(R.java文件没有生成 )
- 在批处理文件中启动MediaPlayer播放制定文件
- 数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础
- Cocos2D研究院之CCNode详解(三)
- SFML 与 VS2015 的安装配置
- Xamarin.Forms Layout Challenges – Great Places(已全文翻译)
- mysql分页查询公式
- 360开源的插件化框架Replugin深度剖析
- HAUT OJ 1504: CXK的篮球数(加强版)--差分法
- 2018我们讲一下百度云BAE专业引擎的使用
- 软件自我成长之路——关于自动更新
- 蓝旭前端预习5之DOM(文档对象模型)
- java对一个集合中的汉字字段根据拼音排序