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