# -*- coding: utf-8 -*-
import scrapy
from copy import deepcopy class SnbookSpider(scrapy.Spider):
name = 'snbook'
allowed_domains = ['suning.com']
start_urls = ['https://book.suning.com/'] def parse(self, response):
div_list=response.xpath('//div[@class="menu-list"]/div[@class="menu-item"]')
div_sub_list=response.xpath('//div[@class="menu-list"]/div[@class="menu-sub"]')
for i in div_list:
item={}
# 大分类的名字
item['b_name']=i.xpath(".//h3/a/text()").extract_first()
# 当前大分类下的中间分类
# a_list=i.xpath('.//dd/a').extract()
#
# for i in a_list:
# # 中分类的名字
# item['m_name'] =i.xpath('.//a/text()').extract_first() for i in div_sub_list:
# 中分类的名字
item['m_name']=i.xpath('.//p[@class="submenu-item"]/a/text()').extract_first() li_list=i.xpath('.//ul[@class="book-name-list clearfix"]/li')
for i in li_list:
# 小分类的名字
item['s_name']=i.xpath('./a/text()').extract_first() # 小分类的URL地址
item["s_href"] = i.xpath("./a/@href").extract_first() # 请求图书的列表页
yield scrapy.Request(
item["s_href"],
callback=self.parse_book_list,
meta={"item": deepcopy(item)}
) def parse_book_list(self,response):
item = response.meta["item"]
li_list=response.xpath('//ul[@class="clearfix"]/li')
for i in li_list:
# #书名
item['book_name']=i.xpath('.//p[2]/a/text()').extract_first().strip()
# 书的url地址,不完整
item['book_href']=i.xpath('.//p[2]/a/@href').extract_first()
detail_url='https:'+item['book_href'] # 书店名
item['book_store_name']=i.xpath('.//p[4]/a/text()').extract_first() # 请求图书详情页
yield scrapy.Request(
detail_url,
callback=self.detail_book_list,
meta={"item": deepcopy(item)}
)
page_list=response.xpath('//div[@id="bottom_pager"]/a') for i in page_list:
page=i.xpath('./@href').extract_first()
page_url='https://list.suning.com'+page
yield scrapy.Request(
url=page_url,
callback=self.parse_book_list,
meta={'item':item}
) def detail_book_list(self,response):
item = response.meta["item"]
import re
item['book_price']=re.findall('"itemPrice":"(.*?)",',response.body.decode())[0] print(item)

sn图书spider的更多相关文章

  1. Spring 声明式事务管理(11)

    案例分析 本案例是图书管理系统精简部分,在数据库中有3张表.分别保存图书库存.图书信息和用户信息.下面是建表SQL语句 1 DROP TABLE IF EXISTS store; 2 DROP TAB ...

  2. 基于visual Studio2013解决C语言竞赛题之0802图书信息查询

     题目 解决代码及点评 /* 功能:有一批图书,每本书有:书名(name),作者(author) , 编号(num),出版日期(date)四个数据, 希望输入后按书名的字母顺序将各书的记录排列好, ...

  3. 一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

  4. Scrapy爬虫(5)爬取当当网图书畅销榜

      本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下:   我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...

  5. scrapy爬虫--苏宁图书

    实现业务逻辑如下: 1. 创建scrapy项目,并生成 爬虫2. 在suning.py中实现Schedul 和 Spider业务逻辑3. 修改start_urls为正确的初始请求地址4. 构造pars ...

  6. python爬虫1——获取网站源代码(豆瓣图书top250信息)

    # -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...

  7. 第十七节:Scrapy爬虫框架之item.py文件以及spider中使用item

    Scrapy原理图: item位于原理图的最左边 item.py文件是报存爬取数据的容器,他使用的方法和字典很相似,但是相比字典item多了额外的保护机制,可以避免拼写错误或者定义错误. 1.创建it ...

  8. 第十六节:Scrapy爬虫框架之项目创建spider文件数据爬取

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取所设计的, 也可以应用在获取API所返回的数据或 ...

  9. 使用Scrapy爬取图书网站信息

    重难点:使用scrapy获取的数值是unicode类型,保存到json文件时需要特别注意处理一下,具体请参考链接:https://www.cnblogs.com/sanduzxcvbnm/p/1030 ...

随机推荐

  1. LUOGU P4149 [IOI2011]Race

    题目描述 给一棵树,每条边有权.求一条简单路径,权值和等于 KKK ,且边的数量最小. 输入输出格式 输入格式: 第一行:两个整数 n,kn,kn,k . 第二至 nnn 行:每行三个整数,表示一条无 ...

  2. vue下使用nginx刷新页面404

    nginx 是一个代理的服务器.出现的问题:写好的页面通过nginx作为代理的服务器给别的同事看的时候发现了新写的页面打开就404,并且从其他页面跳转可以看到但是刷新页面就404.解决方法:在文件中的 ...

  3. loading遮罩

    .loading{ position: relative; cursor: default; point-events: none; text-shadow: none!important; colo ...

  4. Laravel-admin之Driver [] is not supported

    使用Laravel-admin做项目,原本好好的项目,今天一运行则报错:Driver [] is not supported,截图如下: 翻看百度翻译之后,才知道是不支持驱动器[],但是知道意思还是不 ...

  5. Excel函数学习:HLOOKUP函数

    Excel函数学习:HLOOKUP函数 HLOOKUP函数查找表的第一行中的值,返回该表中与找到的值在同一列的另一个值. 什么情况下使用HLOOKUP? HLOOKUP函数可以在查找行中找到精确匹配值 ...

  6. 关于springmvc 只能在index.jsp页面显示图片的处理办法jsp页面无法显示图片

    首先,已经配置好了mvc对静态资源的处理 只有index,jsp可以显示图片 其他页面同样的代码则不显示 后来折腾了半天,发现 index是static的父目录的级别文件 可以向下访问 但是其他的js ...

  7. hbase phoenix char may not be null

    在使用phoenix做hbase的相关測试的时候.会出现 char may not be null 的错误. 这是因为建表和导入的数据不匹配导致的.主要是char的定义,假如一个字段定义为char类型 ...

  8. idea中查看方法的调用链

    Eclipse的"Call Hierarchy"可以查看一个Java方法或类成员变量的调用树(caller和callee两个方向),非常方便.  在IDEA中类似功能被划分到了三个 ...

  9. 模板方法(Template Method)(父类声明算法骨架,子类具体不同实现)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  10. WebSocket前后端实现

    websocket.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...