按照这个方法,将其它想抓取的数据都取出来

ClwySpider/spiders/cousrs.py

import scrapy
from ClwySpider.items import ClwyspiderItem


class CourseSpider(scrapy.Spider):
    name = 'course'
    allowed_domains = ['clwy.cn']
    start_urls = ['https://clwy.cn/video/categories/php']

    def parse(self, response):
        for course in response.xpath('//div[@id="courseList"]/div/a'):
            item = ClwyspiderItem()

            # 课程信息节点
            info = course.xpath('./div[@class="info"]')

            # 标题
            item['title'] = info.xpath('./h3/text()').extract()[1].strip()

            # 详情连接
            item['url'] = course.xpath('./@href').extract_first()

            # 日期,使用切片,去掉最后面的 "更新" 二字
            item['date'] = info.xpath('./p/span/text()').extract()[0][0:-2]

            # 图片。查看源码,发现网站使用了 lazy-load 加载图片,所以要找的是 data-src,而不是 src
            item['image'] = course.xpath('./div[@class="images"]/img/@data-src').extract_first()

            # 描述
            item['description'] = info.xpath('./div/p[@class="description"]/text()').extract_first().strip()

            # 标签。每个课程有多个 tag,所以爬到的是 list,要用 " " 合并成字符串
            tags = info.xpath('./div[@class="detail"]/p[@class="tags"]/em/text()').extract()
            item['tags'] = " ".join(tags)

            yield item

ClwySpider/pipelines.py

class ClwyspiderPipeline(object):
    def process_item(self, item, spider):
        print("标题:", item['title'])
        print("详情链接:", item['url'])
        print("日期:", item['date'])
        print("图片:", item['image'])
        print("描述:", item['description'])
        print("标签:", item['tags'])

再次运行

$ scrapy crawl course

运行后,可以看到如下结果:

222.png

使用 CSS 选择器

如果不喜欢 Xpath,也可以使用 CSS 选择器的方式匹配数据

class CourseSpider(scrapy.Spider):
    name = 'course'
    allowed_domains = ['clwy.cn']
    start_urls = ['https://clwy.cn/video/categories/php']

    def parse(self, response):
        for course in response.css('div#courseList div.listItem a'):
            item = ClwyspiderItem()

            # 课程信息节点
            info = course.css('div.info')

            # 标题
            item['title'] = info.css('h3::text').extract()[1].strip()

            # 详情连接
            item['url'] = course.css('::attr(href)').extract_first()

            # 日期,使用切片,去掉最后面的 "更新" 二字
            item['date'] = info.css('p span:nth-child(1)::text').extract_first()[0:-2]

            # 图片。查看源码,发现网站使用了 lazy-load 加载图片,所以要找的是 data-src,而不是 src
            item['image'] = course.css('div.images img::attr(data-src)').extract_first()

            # 描述
            item['description'] = info.css('div.detail p.description::text').extract_first().strip()

            # 标签。每个课程有多个 tag,所以爬到的是 list,要用 " " 合并成字符串
            tags = info.css('div.detail p.tags em::text').extract()
            item['tags'] = " ".join(tags)

            yield item

已添加到喜欢了