# -*- 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)

最新文章

  1. Java ThreadLocal
  2. EDA系列学习
  3. POJ3009 Curling
  4. 使用Mozilla Firefox插件RestClient测试Http API接口
  5. PIP安装Python的scipy,scrapy等包出现“failed building wheel for xxx”问题解决办法
  6. 怎样用CODESOFT打印连续的条码标签?
  7. js正则表达式之解析——URL的正则表达式
  8. 可以将一些配置信息已json格式存在数据库中读取的时候序列化。
  9. Android Activity切换动画overridePendingTransition
  10. MySQL递归查询所有子节点,树形结构查询
  11. (转)三角函数计算,Cordic 算法入门
  12. Joel在耶鲁大学的演讲
  13. NTP工作机制及时间同步的方法
  14. Linux Ubuntu 内核升级
  15. 怎样配置mysql_installer_community_V5.6........_setup的数据库?
  16. RSP小组——团队冲刺博客一——(领航)
  17. C#图片裁切,生成新图片
  18. 通过 Git 上传代码到 GitHub 必要操作详解
  19. windows上不能启动Apache,遇到错误的方法之一
  20. odoo KeyError

热门文章

  1. SSM3-SVN的安装和搭建环境
  2. 移动端页面-点击input输入框禁止放大效果
  3. @import vs #import - iOS 7
  4. linux 下环境变量设置
  5. java图形验证码生成工具类及web页面校验验证码
  6. JSP-response(HttpServletResponse)
  7. Leetcode6.ZigZag ConversionZ字形变换
  8. vue自定义指令之拖动页面的元素
  9. MaxCompute问答整理之7月
  10. Codeforces Beta Round #77 (Div. 2 Only) A. Football【字符串/判断是否存在连续7个0或7个1】