用scrapy框架爬取人邮出版社新书快递

明确目标

  • 目标url:https://www.ryjiaoyu.com/tag/details/7。
  • 静态网页。
  • 需要进入详情页爬取信息。
  • scrapy框架

建项目

  • 新建scrapy项目:
    1.创建爬虫项目,命令:scrapy startproject 项目名称。
    例如scrapy startproject RenYou
    2.创建爬虫文件,命令:scrapy genspider 文件名称 域名
    例如scrapy genspider ry https://www.ryjiaoyu.com/tag/details/7
  • 具体请参考https://www.jianshu.com/p/8e78dfa7c368
  • 建好后(没有pictyres这个文件):在这里插入图片描述

代码实现

  • 这里只列出ry.py的代码
# -*- coding: utf-8 -*-
import scrapy
from ..items import RenyouItem
class RySpider(scrapy.Spider):
    name = 'ry'
    allowed_domains = ['ryjiaoyu.com']
    start_urls = ["http://www.ryjiaoyu.com/tag/books/7?page=0"]   #启示网址
    def parse(self,response):
        for i in range(0,32):
            url = "http://www.ryjiaoyu.com/tag/books/7?page=0" + str(i)
            yield scrapy.Request(url=url,callback=self.get_title)

    def get_title(self, response):
            lis = response.xpath("//li[@class='block-item']")
            for i in lis:
                name = i.xpath("div[@class='book-info']/h4[@class='name']/a/text()").get()
                ZuoZhe1 = i.xpath("string(div[@class='book-info']/div[@class='author']/span)").get()
                ZuoZhe = str(ZuoZhe1).strip()  #处理空格strip
                JiaGe = i.xpath("div[@class='book-info']/span[@class='paperback']/span/text()").get()
                if JiaGe is not None:
                    JiaGe = JiaGe.replace("¥", "")
                else:
                    JiaGe = "暂无价格"

                url = i.xpath("div[@class='book-info']/h4[@class='name']/a/@href").get()
                url1 = response.urljoin(url)
                # print(name, ZuoZhe, JiaGe, url)
                item = RenyouItem()
                item['书名'] = name
                item['作者'] = ZuoZhe
                item['价格'] = JiaGe
                item['链接'] = url1
                yield scrapy.Request(url=url1, meta={'item': item}, callback=self.parseDetail)  # 进入详情页,跳转到详情页面
    def parseDetail(self, response):
            item = response.meta.get('item')

            item['内容介绍'] = response.xpath('//div[@class="intro"]/text()').get()
            if item['内容介绍'] is not None:
                item['内容介绍'] = str(item['内容介绍']).strip()
                item['内容介绍'] = item['内容介绍'].replace("\r", "")
                item['内容介绍'] = item['内容介绍'].replace("'", "")
                item['内容介绍'] = item['内容介绍'].replace("\n", "")
            else:
                item['内容介绍'] = "没得内容介绍"

            item['书号'] = response.xpath('//ul[@class="publish-info"]/li[4]').get()
            if "书  号:" in item['书号']:
                item['书号'] = response.xpath('//ul[@class="publish-info"]/li[4]/text()').get()
            else:
                item['书号'] = response.xpath('//ul[@class="publish-info"]/li[3]/text()').get()

            item['出版日期'] = response.xpath('//ul[@class="publish-info"]/li[3]').get()
            if "出版日期:" in item['出版日期']:
                item['出版日期'] = response.xpath('//ul[@class="publish-info"]/li[3]/text()').get()
            else:
                item['出版日期'] = response.xpath('//ul[@class="publish-info"]/li[4]/text()').get()
            if item['出版日期'] is not None:
                item['出版日期'] = item['出版日期'].replace("\r\n                                ", "")
            else:
                item['出版日期'] = "没得出版日期"

            item['图片链接'] = response.css('ul.block-items img::attr(src)').getall()

            print(item)
            yield item

  • 执行命令:在Terminal输入scrapy crawl ry -o renyou.json;运行爬虫框架并保存为json文件。
  • 这里推荐用在线json视图查看json文件:bejson.com

结果截图

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值