python中Scrapy实战之爬取网页并保存为json文件

创建spider文件Bookchina.py:

import scrapy
from  scrapy import Request
from MyScrapy.items import BookChina
class BookchinaSpider(scrapy.Spider):
    name = 'Bookchina'
    #allowed_domains = ['blog.jobbole.com/114261/']
    start_urls = ['http://www.bookschina.com/kinder/54290000/']

    def parse(self, response):
        boolList = response.css('.cover a::attr(href)').extract()
        for blist in boolList:
            link = 'http://www.bookschina.com' + blist
            yield Request(url=link, callback=self.bookDetail)


    def categoryParse(self,response):
        boolList=response.css('.cover a::attr(href)').extract()
        for blist in boolList:
            link='http://www.bookschina.com'+blist
            yield  Request(url=link,callback=self.bookDetail)
    def bookDetail(self,response):
         bookName = response.css('.padLeft10 h1::text').extract_first('')
         print(bookName)
         bookEditer = response.css('.author a::text').extract_first('')
         publicShe = response.css('.publisher a::text').extract_first('')
         publictime = response.css('.publisher i ::text').extract_first('')
         bookPrice = response.css('.priceWrap .sellPrice::text ').extract_first('')
         bookChina=BookChina()
         bookChina['name']=bookName
         bookChina['bookEditer']=bookEditer
         bookChina['publicShe']=publicShe
         bookChina['publictime']=publictime
         bookChina['bookPrice']=bookPrice
         yield bookChina



在items.py文件中加入类:

class BookChina(scrapy.Item):
    name=scrapy.Field()
    bookEditer = scrapy.Field()
    publicShe = scrapy.Field()
    publictime = scrapy.Field()
    bookPrice = scrapy.Field()

在pipelines.py中添加:

class Bookchina(object):
    def __init__(self):
        self.file = codecs.open('book.json', 'w', 'utf-8')

    def process_item(self, item, spider):
            lines = json.dumps(dict(item), ensure_ascii=False) + '\n'
            self.file.write(lines)
            return item
    def close_spider(self, spider):
            self.file.close()

在setting.py文件中设置管道:

ITEM_PIPELINES = {
#管道数越小,就越先执行
   'MyScrapy.pipelines.MyscrapyPipeline': 300,
   # 'MyScrapy.pipelines.jobbolePipeline': 250,
    #自带的下载方法
    # 'scrapy.pipelines.images.ImagesPipeline':200,
#引入自己的管道
    'MyScrapy.pipelines.Bookchina':100,
}

运行文件就可以看到在当前项目中创建了book.json文件,里面保存了爬去的内容。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值