sn图书spider
2024-10-08 00:41:30
# -*- 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)
最新文章
- Java ThreadLocal
- EDA系列学习
- POJ3009 Curling
- 使用Mozilla Firefox插件RestClient测试Http API接口
- PIP安装Python的scipy,scrapy等包出现“failed building wheel for xxx”问题解决办法
- 怎样用CODESOFT打印连续的条码标签?
- js正则表达式之解析——URL的正则表达式
- 可以将一些配置信息已json格式存在数据库中读取的时候序列化。
- Android Activity切换动画overridePendingTransition
- MySQL递归查询所有子节点,树形结构查询
- (转)三角函数计算,Cordic 算法入门
- Joel在耶鲁大学的演讲
- NTP工作机制及时间同步的方法
- Linux Ubuntu 内核升级
- 怎样配置mysql_installer_community_V5.6........_setup的数据库?
- RSP小组——团队冲刺博客一——(领航)
- C#图片裁切,生成新图片
- 通过 Git 上传代码到 GitHub 必要操作详解
- windows上不能启动Apache,遇到错误的方法之一
- odoo KeyError
热门文章
- SSM3-SVN的安装和搭建环境
- 移动端页面-点击input输入框禁止放大效果
- @import vs #import - iOS 7
- linux 下环境变量设置
- java图形验证码生成工具类及web页面校验验证码
- JSP-response(HttpServletResponse)
- Leetcode6.ZigZag ConversionZ字形变换
- vue自定义指令之拖动页面的元素
- MaxCompute问答整理之7月
- Codeforces Beta Round #77 (Div. 2 Only) A. Football【字符串/判断是否存在连续7个0或7个1】