Udemy 爬蟲原始碼示範

程式放上方,嘮叨在下方。

import scrapy

# 本爬蟲原來是爬 udemycoupon.discountsglobal.com ,因該網站已停止更新,拿來回收再利用
class Uspider03Spider(scrapy.Spider):
    name = 'uspider03'
    allowed_domains = ['www.onlinecourses24x7.com']
    start_urls = ['https://www.onlinecourses24x7.com/']
    
    COUNT_MAX = 15
    count = 0
    
    def parse(self, response):
        items = response.xpath('//*[@class="entry-title"]/a/@href').extract()  # 該頁面所有的文章連結
        for item in items:
            url = response.urljoin(item)
            yield scrapy.Request(url, callback=self.parse_url)
            
        if (self.count < self.COUNT_MAX):  # 如果沒超過設定上限,就繼續爬下一頁
            next_page_url = response.xpath('//*[@class="previous"]/a/@href').extract_first()
            yield scrapy.Request(next_page_url)
            
    def parse_url(self, response):  # 取得每一個 udemy 課程的 url
        title = response.xpath('//*/h1/text()').extract_first()
        
        time = response.xpath('//time[@class="entry-date published"]/@datetime').extract_first()
        time = time[:-15]  # "2021-05-21T18:39:18+01:00" to "2021-05-21"
        
        udemy_url = response.xpath('//*[@class="su-button-center"]/a/@href').extract_first()
        # 移除廣告碼
        udemy_url = udemy_url.replace('https://click.linksynergy.com/deeplink?id=KLRB8G/RnDE&mid=39197&u1=vini&murl=', '')
        udemy_url = udemy_url.replace('%3A', ':')
        udemy_url = udemy_url.replace('%2F', '/')
        udemy_url = udemy_url.replace('%3F', '?')
        udemy_url = udemy_url.replace('%3D', '=')

        tag_list = response.xpath('//*[@class="tag-links"]/a/text()').extract()
        tags = ''.join(str(e) for e in tag_list)  # from list to string 

        self.count = self.count + 1
            
        yield {
            'Count':  self.count,
            'Source':  "3",
            'Title': title,
            'Time': time,
            'UdemyURL': udemy_url,
            'Tags': tags
        }


原本以為5月中忙完,下班後就可以好好專心 Python百日馬,和讀書會的事。

結果事情一件件跑出來,計劃趕不上變化。

和社團 Udemy 課程分享相關的,有兩件比較麻煩的事。
一個是論壇的預覽功能,從5月4日後就失效了。花了些時間討論研究,最可能的原因是 udemy 使用的 Cloudflare 防火牆,把我們擋掉了(但同樣的網址,有些 discourse 網站卻可以通過該防火牆)。這個需要寫信給 udemy,將我們設為白名單,不過他不見得會理我。
期間做了不少實驗,伺服器常常關機開機,這個拿掉那個加進來,還驚動幾位網友通知我網站掛點,真是不好意思。

另一個是課程分享的整理,最近花的時間愈來愈多,大約要1個半小時。
原因是之前的9個爬蟲,最近網站還有在更新的只剩1個。所以我又花時間到幾個國外的臉書 udemy 社團看。
昨天晚上整理完後,決定改寫之前的爬蟲。
速度還蠻快的,各花了不到一個小時的時間。

早該這麼做的。 希望之後會記取教訓。

如果之前分享過的課程(2萬7千堂左右),即使有新優惠碼,也不再分享,速度會更快。
但這樣新加入社團的朋友,就看不到了。所以還在猶豫中。

爬蟲原始碼,因為還沒放到 github 中,我就先分享到論壇中吧。
udemy 爬蟲大同小異,9個大概都長這樣。

不到50行,想學的人心動了嗎?

8 Likes