1. 程式人生 > >爬取網易雲課堂、網易公開課課程資料

爬取網易雲課堂、網易公開課課程資料

二話不說,先上程式碼~
import requests
import json
def getdata(index):
    a=input("呼叫gedata方法")
    print("正在抓取{index}頁資料")
    payload = {"pageIndex":index,
            "pageSize":700,
            "relativeOffset":50,
            "frontCategoryId":400000001295013,
            "searchTimeType":-1,
            "orderType":50,
            "priceType":-1,
            "activityId":0,
            "keyword":""
    }
    payload 
= json.dumps(payload) headers = {"Accept":"application/json", "Host":"study.163.com", "Origin":"https://study.163.com", "Content-Type":"application/json", "Referer":"https://study.163.com/courses", "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36" } req
= requests.post("https://study.163.com/p/search/studycourse.json",data=payload,headers=headers) e=input("成功post到資料") print(type(req)) res_json = json.loads(req.text) print(type(res_json)) with open("C:/Users/Administrator/Desktop/wangyiCloud.json","w") as f: json.dump(res_json,f)
print("寫入檔案完成...") a=getdata(1) b=input("執行到了這")

     

這段資料是爬取網易雲課堂的程式碼~因為我是寫php的,所以以上程式碼如果有什麼問題敬請斧正   我先講一下業務背景吧,leader讓我把市面上主流的線上學習的網站的課程資料全部爬取下來~ 一開始接到的時候,有點無從開始,沒做過啊, 最開始是去搜怎麼爬取網頁的資料,瞭解到了一種是通過模擬headers來獲取資料,另一種就是獲取整個頁面的html,再通過選擇器來獲取你想要的資料   最開始接觸的就是scrapy框架,打算建立在windows環境下,果然windows下的安裝果然不省心,遇到這方面問題的可以去看看我的另一篇博文:windows下安裝scrapy的各種問題   安裝好了之後,根據他的教程走,很快的就把csdn,極客,騰訊課堂都爬下來了~   之後爬取網易雲課堂的時候,發現爬取下來的html頁面裡面沒有具體的課程資料,去看網站的整個載入過程發現,是通過js載入的資料 可以看到,資料都是通過studycourse.json載入的,那這種就簡單了,直接通過模擬headers跟post的資料就能獲取了~   資料是通過post獲取的,提交的是Payload型別,資料格式是json, 提取一下post關鍵字,frontCategory,字面意思,前面 類別,大致猜一下應該就是課程的大分類id,keyword應該是我們搜尋時才有 pageSize是載入的資料的大小,pageIndex是第幾個頁面   因為是寫php的,所以就直接想通過curl模擬post 程式碼如下:    
 //curl模擬post獲取網易雲資料
    public function wangyiDataAction(){
        $url = "https://study.163.com/p/search/studycourse.json";
        $headers = array(
            "Accept"    =>"application/json",
            "Host"        =>"study.163.com",
            "Origin"    =>"https://study.163.com",
            "Content-Type"=>"application/json",
            "Referer"    =>"https://study.163.com/courses",
            "User-Agent"=>"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
        );
        $payload = array(
            "pageIndex"        =>1,
            "pageSize"        =>700,
            "relativeOffset"=>50,
            "frontCategoryId"=>400000001295013,
            "searchTimeType"=>-1,
            "orderType"        =>50,
            "priceType"        =>-1,
            "activityId"    =>0,
            "keyword"        =>"",
        );
        $payload = json_encode($payload);
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($curl, CURLOPT_HEADER, $headers);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        echo"<pre>";print_r($output);
        return $output;
    }

 

  執行之後獲取的結果卻是   搞不懂這是什麼?知道的求科普一下~   沒辦法,用python再寫一遍~   程式碼如下~
import requests
import json
def getdata(index):
    a=input("呼叫gedata方法")
    print("正在抓取{index}頁資料")
    payload = {"pageIndex":index,
            "pageSize":700,
            "relativeOffset":50,
            "frontCategoryId":400000001295013,
            "searchTimeType":-1,
            "orderType":50,
            "priceType":-1,
            "activityId":0,
            "keyword":""
    }
    print(type(payload))
    payload = json.dumps(payload)
    print(type(payload))
    headers = {"Accept":"application/json",
               "Host":"study.163.com",
               "Origin":"https://study.163.com",
               "Content-Type":"application/json",
               "Referer":"https://study.163.com/courses",
               "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36"
    }
    print(type(headers))
    req = requests.post("https://study.163.com/p/search/studycourse.json",data=payload,headers=headers)
    e=input("成功post到資料")
    print(type(req))
    res_json = json.loads(req.text)
    print(type(res_json))
    with open("C:/Users/Administrator/Desktop/wangyiPublic.json","w") as f:
        json.dump(res_json,f)
        print("寫入檔案完成...")
    
a=getdata(1)
b=input("執行到了這")

 

  因為對python不會,所以有很多列印的 執行結果如下: 比較要注意的點是req的資料型別,打印出來是requests.models.Reaponse 去百度了一下:

相關推薦

課堂公開課程資料

二話不說,先上程式碼~ import requests import json def getdata(index): a=input("呼叫gedata方法") print("正在抓取{index}頁資料") payload = {"pageIndex":ind

教你騰訊課堂課堂mooc等所有課程資訊

本文的所有程式碼都在GitHub上託管,想要程式碼的同學請點選這裡

Python + Selenium 課堂課時標題及時長

Python + Selenium 爬取網易雲課堂課時標題及時長 轉載請註明出處:https://blog.csdn.net/jpch89/article/details/84142555 文章目錄 Python + Selenium 爬取網易雲課堂課時標

Python課堂課程資料

本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並不斷的成長,

Python實例之抓課堂搜索數據(post方式json型數據)並保存為TXT

網易雲 pytho sco 關鍵詞 page json ner urn 頁碼 本實例實現了抓取網易雲課堂中以‘java’為關鍵字的搜索結果,經詳細查看請求的方式為post,請求的結果為JSON數據 具體實現代碼如下: import requests import json

Python爬蟲入門教程 21-100 課堂課程資料

寫在前面 今天咱們抓取一下網易雲課堂的課程資料,這個網站的資料量並不是很大,我們只需要使用requests就可以快速的抓取到這部分資料了。 你第一步要做的是開啟全部課程的地址,找出爬蟲規律, 地址如下: https://study.163.com/courses/ 我簡單的看了一下,頁面資料是基於

使用正則表示式抓課堂中的資料

 要抓取資料的頁面如下: 程式碼: package com.url; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.

課堂_C++程序設計入門(下)_第7單元:出入雖同趣,所向各有宜 – 文件輸入和輸出_第7單元 - 作業1:OJ編程

c++ detail using span 換行 tro size str cout 第7單元 - 作業1:OJ編程 查看幫助 返回 溫馨提示: 1.本次作業屬於Online Judge題目,提交後由系統即時判分。 2.學生可以在作業截止時間之前不限次數提

課堂_C++程序設計入門(下)_第8單元:年年歲歲花相似– 運算符重載_第8單元 - 作業2:OJ編程 - 重載數組下標運算符

ref [] jna turn draw cred 超出範圍 input detail 第8單元 - 作業2:OJ編程 - 重載數組下標運算符 查看幫助 返回 溫馨提示: 1.本次作業屬於Online Judge題目,提交後由系統即時判分。 2.學生可以在

課堂_C++程序設計入門(下)_第9單元:白公曾詠牡丹芳,一種鮮妍獨“異常”_第9單元 - 作業5:OJ編程 - 使用異常進行圖形類的錯誤處理

using define 幫助 發生 半角 etc mooc sub private 第9單元 - 作業5:OJ編程 - 使用異常進行圖形類的錯誤處理 查看幫助 返回 溫馨提示: 1.本次作業屬於Online Judge題目,提交後由系統即時判分。 2.學

課堂《JS原創視頻教程-知識點類》

觸發 ber 課堂 js跨域問題 htm 每次 技術 stat 一個 http://caniuse.com/#index //Can I use... Support tables for HTML5, CSS3, etc-支持h5和css3的情況列表 JS包含

課堂Java入門視頻課程

51cto com -o 計算機 watermark window 教學 通過 java入門 課程概述本課程不提供教學服務、作業批改及證書發放。程序設計是一門基礎課程。對於計算機相關專業而言,程序設計是專業基礎知識,是進一步學習其他專業知識的第一步階梯;對於非計算機專業而言

課堂-spark

bsp spark 分享圖片 spa 技術 課堂 image bubuko link ==============================Flink比spark優秀,但既生瑜何生亮,所以Flink沒火起來 網易雲課堂-spark

C++課堂開發工程師-操作符重載

操作 () 返回 urn lin per spa 加法 操作符 1.操作符重載,(可以使用成員函數,也可以使用非成員函數) this 所有的成員函數均隱藏著一個參數,this. this與調用者相互綁定。 complex c1,c2;

C++課堂開發工程師--堆,棧與內存管理

ret delete spa turn 內存空間 global alloc glob 工程 1.output函數 #include<iostream.h> ostream& operator<< (ostream& os, cons

C++課堂開發工程師--類模板

vat turn 全部 name 實現 temp mes ima 獲取 static complex data members static data members member functions static member functions 非靜態成員函數:non

C++課堂開發工程師--組合與繼承

一個 turn component 完成 tro 關系 pac pro art 著一個章節主要圍繞:繼承,復合,委托三個方面進行介紹。 復合:表示has-a template<class T, class Sequence = deque<T>>

C++課堂開發工程師--轉換函數

vat style font const ret return c++ number per 轉換函數 class Fraction{   public:     Fraction(int num, int den = 1) : m_numerator(num), m

C++課堂開發工程師--智能指針

sha 課堂 ont vat spa 指針 cut 網易 return template<class T> class shared_ptr{   public:     T& operator*( ) const {return *px;}     

andrew ng 深度學習 課堂課程

輸入資料為非結構化資料圖片時,輸入向量的表示形式是將一幅影象的三基元矩陣分別抻開,形成一個長向量: 先從邏輯迴歸講起,基本的符號表示如下,使用sigmoid函式是為了將計算出來的值投影到0-1的範圍內,從而表示預測值是貓的概率: 代價函式的定義,代價函式其實就是基於訓練集樣本的誤差總和的平均值