Scrapy 爬取京东所有图书信息

本文介绍如何利用Scrapy框架爬取京东网站上的所有图书信息,并将爬取结果存储到Redis数据库中,以实现数据的高效管理和后续分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先记录代码吧,回头再写文字:

# -*- coding: utf-8 -*-
import scrapy
import json
import pprint
from copy import deepcopy


class JdSpider(scrapy.Spider):
    name = 'jd'
    allowed_domains = ['jd.com', 'p.3.cn']
    # 这是由于后期使用有使用json解析,使用的域名为p.3.cn
    start_urls = ['https://book.jd.com/booksort.html']

    def parse(self, response):
        dt_list = response.xpath('//div[@class="mc"]/dl/dt')  # 获取大分类列表
        for dt in dt_list:
            item = dict() # 创建字典,存储相关信息
            item['b_cate'] = dt.xpath('./a/text()').extract_first() # 大分类标题
            em_list = dt.xpath('./following-sibling::dd[1]/em') # 获取小分类列表位置
            for em in em_list:  # 小分类列表
                item["s_href"] = em.xpath('./a/@href').extract_first()
                item['s_cate'] = em.x
### 使用 Scrapy 爬虫抓取京东双11促销活动的商品信息和销售数据 #### 了解目标网站结构 为了有效利用Scrapy框架进行爬取工作,理解目标网页即京东双11促销页面的HTML/CSS结构至关重要。对于动态加载的内容,如通过JavaScript呈现的部分,测试表明可以通过特定的选择器定位元素并模拟用户交互行为来触发更多内容显示[^2]。 #### 设置Splash服务处理动态内容 鉴于部分商品列表由JavaScript渲染而成,单纯依靠Scrapy可能无法直接获取所需全部信息。为此,在本地环境中启动Docker容器运行Splash服务成为必要选项之一。具体命令如下所示: ```bash sudo service docker start sudo docker run -p 8050:8050 scrapinghub/splash ``` 这一步骤确保了能够处理带有复杂前端逻辑的目标站点,从而更全面地收集到商品详情与评价等重要资料。 #### 定义Item存储格式 针对所要提取的各项字段定义相应的`Items`类是非常重要的环节。“项目名: items”采用list类型用于容纳多个JSON字符串形式表示的商品记录[^1]。以下是简化版模型示意代码片段: ```python import scrapy class JdGoodsSpiderItem(scrapy.Item): id = scrapy.Field() # 商品ID discount_price = scrapy.Field() # 折扣价 total_comments = scrapy.Field() # 总评论数 bookstore_name = scrapy.Field() # 店铺名称 book_title = scrapy.Field() # 书名 (仅限书籍类别) publisher = scrapy.Field() # 出版社 (仅限书籍类别) author = scrapy.Field() # 作者 (仅限书籍类别) isbn = scrapy.Field() # ISBN编号 (仅限书籍类别) publish_date = scrapy.Field() # 出版日期 (仅限书籍类别) category = scrapy.Field() # 类型 ``` 此配置允许灵活调整以适应不同种类的产品特征需求。 #### 编写Spiders实现自动化采集流程 创建自定义蜘蛛程序负责遍历各个分类目录下的多页链接,并从中解析出每件单品的关键属性值。考虑到实际应用中的效率考量以及反爬机制规避策略等因素的影响,建议合理设置下载延迟参数(`DOWNLOAD_DELAY`)及其他相关中间件功能。 ```python from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor from ..items import JdGoodsSpiderItem class JDGoodsspider(CrawlSpider): name = 'jd_goods' allowed_domains = ['jd.com'] rules = ( Rule(LinkExtractor(allow=r'/item/\d+.html'), callback='parse_item', follow=True), ) def parse_item(self,response): item=JdGoodsSpiderItem() try: item['id'] = response.url.split('/')[-1].split('.')[0] item['discount_price']=response.css('.p-price strong::text').get().strip('¥ ') item['total_comments']=response.xpath('//div[@id="comment-count"]/a/text()').re_first(r'\d+') item['bookstore_name']=response.css('#crumb-wrap .name a::attr(title)').get() if '/books/' in response.url or '/e/' in response.url:# 判断是否为书籍类产品 item['book_title']=response.css('#detail h1 em::text').get() item['publisher']=response.css('.p-bi-store a::text').get() item['author']=','.join([x.strip() for x in response.css('.p-author a::text').getall()]) item['isbn']=response.re(r'ISBN:\s*(\S*)')[0] item['publish_date']=response.css('.p-bookdetails li:nth-child(3)::text').re_first('\d{4}-\d{2}') yield item except Exception as e: print(f"Error parsing {response.url}: ", str(e)) ``` 上述脚本展示了基本架构设计思路,可根据实际情况进一步优化完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值