scrapy爬虫-爬取慕课网全部课程

1、创建工程

scrapy startproject scrapytest

2、创建爬虫文件

scrapytest/spiders/目录下创建一个文件MySpider.py

3、定义爬取项目

在items.py同一层创建一个新的item文件CourseItems.py

CourseItems.py代码:

#引入文件
import scrapy
class CourseItem(scrapy.Item):
#课程标题
title=scrapy.Field()
#课程url
url=scrapy.Field()
#课程标题图片
image_url=scrapy.Field()
#课程描述
introduction=scrapy.Field()
#学习人数
student=scrapy.Field()
4、编写spider代码

MySpider.py代码:

#引入文件
import scrapy
'''由于from scrapytest.CourseItems import CourseItem出错,所以直接写代码'''
class CourseItem(scrapy.Item):
#课程标题
title=scrapy.Field()
#课程url
url=scrapy.Field()
#课程标题图片
image_url=scrapy.Field()
#课程描述
introduction=scrapy.Field()
#学习人数
student=scrapy.Field()
class MySpider(scrapy.Spider):
#用于区别spider
name="MySpider"
#允许访问的域
allowed_domains=["imooc.com"]
#爬取地址
start_urls=["http://www.imooc.com/course/list"]
#爬取方法
def parse(self,response):
#实例一个容器保存爬取的信息
item = CourseItem()
#爬取部分,使用xpath方式选择信息,具体方法根据网页结构
#先获每个课程的div
for 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('.//@src').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:
#将信息组合成下一页的url
page='http://www.imooc.com' + url[0]
#返回url
yield scrapy.Request(page,callback=self.parse)
#url跟进结束
5
、使用Pipeline处理数据(将数据存储到json文件)

scrapytest/目录下建立一个文件MyPipelines.py

MyPipelines.py代码:

from scrapy.exceptions import DropItem
import json
class MyPipeline(object): 
def __init__(self):
#打开文件
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)
#返回item
return item
#该方法在spider开启时被调用
def open_spider(self,spider):
pass
#该方法在spider关闭时被调用
def close_spider(self,spider):
pass 

6、注册Pipeline进行设置

settings.py代码:

ITEM_PIPELINES = { 'scrapytest.MyPipelines.MyPipeline': 1

,}

7、运行

scrapy crawl MySpider


猜你喜欢

转载自blog.csdn.net/choven_meng/article/details/78197194