码迷,mamicode.com
首页 > 其他好文 > 详细

sn图书spider

时间:2018-11-27 01:25:31      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:strip   xpath   pager   port   body   div   rap   pat   class   

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

标签:strip   xpath   pager   port   body   div   rap   pat   class   

原文地址:https://www.cnblogs.com/xu12135/p/10023522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!