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頁的新增數據,這裏就不列出了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章