Python实战演练之跨页爬取

上章回顾

上一章Python实战演练之scrapy初体验中讲到了scrapy项目的创建,爬虫的创建,以及数据的提取。

跨页爬取如何实现

不过这些都是建立在单页网页数据的爬取之中,很多时候我们需要跨很多页去爬取数据,这个时候该怎么实现呢?

首先分析该网页的下一页和本页的区别

  • https://edu.csdn.net/courses/o280/p1 (第一页)
  • https://edu.csdn.net/courses/o280/p2 (第二页)

可以明显判断出p后面的是页数,即修改该处即可获取下一页的数据

跨页爬取的实现

所以,srcapy的跨页爬取很好实现,只用在courses.py中添加几行代码即可。

import scrapy
from educsdn.items import CoursesItem

class CoursesSpider(scrapy.Spider):
    name = 'courses'
    allowed_domains = ['edu.csdn.net']
    start_urls = ['https://edu.csdn.net/courses/o280/p1']

    #第一页
    p = 1
    
    def parse(self, response):
        # 解析课程信息
        # 获取当前请求页面下的所有课程信息
        print(dd.xpath("./div[@class='titleInfor'/text()]").extract())
        dl = response.selector.css("div.course_item")
        # 遍历课程信息并封装到item
        for dd in dl:
            item = CoursesItem()
            item['title'] = dd.css("span.title::text").extract_first()
            item['url'] = dd.css("a::attr(href)").extract_first()
            item['pic'] = dd.css("img::attr(src)").extract_first()
            item['teacher'] = dd.css("span.lecname::text").extract_first()
            item['time'] = dd.css("span.course_lessons::text").extract_first()
            item['price'] = dd.css("p.priceinfo i::text").extract_first()
            print(item)
        # 跨页提取信息
        self.p += 1
        if self.p < 4:
            next_url = 'https://edu.csdn.net/courses/o280/p'+ str(self.p)
            url = response.urljoin(next_url)
            yield scrapy.Request(url=url,callback=self.parse)

self.p < 4说明只爬取前三页的数据,具体输出和上一章差不多,只是多了2页的新增数据,这里就不列出了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fswy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值