import scrapy

class JDSpider(scrapy.Spider):
    """京东商品爬虫"""
    name = 'jd'
    allowed_domains = ['jd.com']
    start_urls = ['https://www.jd.com/']

    def parse(self, response):
        """解析首页,获取所有商品分类链接"""
        # 获取所有商品的链接
        links = response.css('.cate_menu_item a::attr(href)').extract()
        for link in links:
            yield scrapy.Request(link, callback=self.parse_category)

    def parse_category(self, response):
        """解析商品分类页,获取所有商品链接"""
        # 获取该分类下所有商品的链接
        links = response.css('.gl-item .p-name a::attr(href)').extract()
        for link in links:
            yield scrapy.Request(link, callback=self.parse_product)

    def parse_product(self, response):
        """解析商品详情页,获取商品信息并保存到文件"""
        try:
            # 获取商品的名称、价格和链接
            name = response.css('.sku-name::text').extract_first().strip()
            price = response.css('.price .price::text').extract_first().strip()
            link = response.url

            # 存储到CSV文件中
            with open('products.csv', 'a') as f:
                f.write(f'{name},{price},{link}
')
        except Exception as e:
            # 发生异常时记录到日志中
            self.logger.error(f'Failed to parse product: {response.url}, {e}')

代码说明:

  • 类名: JDSpider,继承自 scrapy.Spider 类。
  • name: 爬虫名称,用于标识爬虫。
  • allowed_domains: 允许爬取的域名,这里只允许爬取 jd.com 域名下的网页。
  • start_urls: 爬虫起始 URL,这里设置为京东首页。
  • parse 函数: 解析首页,获取所有商品分类链接。
  • parse_category 函数: 解析商品分类页,获取所有商品链接。
  • parse_product 函数: 解析商品详情页,获取商品信息并保存到文件。
  • 异常处理: 使用 try...except 语句捕获异常,并将错误信息记录到日志中。

使用方法:

  1. 安装 Scrapy 框架: pip install scrapy
  2. 创建 Scrapy 项目: scrapy startproject jd_spider
  3. 将上述代码保存到 jd_spider/jd_spider/spiders/jd.py 文件中。
  4. 运行爬虫: scrapy crawl jd

注意:

  • 代码中的 CSS 选择器可能需要根据京东网站的实际情况进行调整。
  • 爬取网站信息需要遵守网站的 robots.txt 协议,避免过度爬取导致网站服务器压力过大。
  • 爬取网站信息时,请尊重网站的版权,不要进行任何违法行为。

原文地址: https://www.cveoy.top/t/topic/oeSR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录