本文参考博客:
scrapy爬虫-爬取慕课网全部课程
scrapy爬虫框架入门实例
打开cmd,scrapy startproject name(自定义)
根据自己想爬取的内容设置字段
name = scrapy.Field()
import scrapy
class 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()
import scrapy
from imooc_spider.CourseItems import CourseItem
class 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方式选择信息,具体方法根据网页结构
#先获每个课程的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('.//@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:
#将信息组合成下一页的url
page='http://www.imooc.com' + url[0]
#返回url
yield scrapy.Request(page,callback=self.parse)
#url跟进结束
pipelines用于存储数据,本案例将item存储为json格式
应该是我这理问题,依照参考博们的代码使用__int__方法后
报错指向文件生成这行:self.file.write(line)
from scrapy.exceptions import DropItem
import json
class 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)
#返回item
return 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文件