Python爬蟲入門實例之爬取軟科中國大學排名

2020-10-31 Python初學者入門

寫在前面

  這個例子是小編今天在中國大學MOOC(北京理工大學)上學習的時候寫下來的。但是很快寫完之後我就發現不對勁,首先課程給的例子是中國好大學網站的排名,但是現在這個網站已經重構了,原來的連結進去是軟科的大學排名,所以之前的代碼就需要做一些修改,在我不懈的努力下,現在基本成功了,寫這篇博客記錄一下。

一、爬取原界面

1.網站連接

連結:https://www.shanghairanking.cn/rankings/bcur/2020.

2.爬取內容

  本例爬取的是下圖的排名、大學名稱、總分三個內容。

二、編程思路

  這一部分嵩天老師在課中給出了講解,這裡我整理分享給大家。

1.功能描述

輸入:大學排名URL連結

輸出:大學排名信息的屏幕輸出(排名,大學名稱,總分)

技術路線:requests­–bs4

定向爬蟲:僅對輸入URL進行爬取,不擴展爬取

註:requestts和bs4庫的使用只能獲取靜態頁面的信息,如何獲取動態頁面信息,我會在後邊專門寫篇文章詳細說明

2.程序的結構設計

步驟一:從網絡上獲取大學排名網頁內容:定義函數getHTMLText()

步驟二:提取網頁內容中信息到合適的數據結構:定義函數fillUnivList()

步驟三:利用數據結構展示並輸出結果:定義函數printUnivList()

三、編寫函數

  在編寫函數前,首先我們要先看一下網頁的原始碼


  通過對網頁原始碼的觀察,我們可以看到,所有大學信息被封裝在一個表格中,這個表格的標籤叫tbody,在tbody中,每個大學的信息被封裝在一個標籤中,這個標籤叫tr,每個tr標籤裡又有一個td標籤,每個大學的具體信息就被這個標籤包圍,但是大學的名字是被包在a標籤中的,這裡要做處理。
  所以我們首先遍歷tbody標籤,獲得所有大學信息,然後在tbody標籤中找到tr標籤,獲得每個大學信息,最後在tr標籤裡找到td標籤,把我們需要的相關數據寫在我們的ulist列表中。

註:
  1.由於大學名稱被a標籤包含,所以我們可以定義一個列表存放a標籤內容(與td標籤區別開)。
  2.為了視覺方面更加美觀,可採用中文字符的空格填充 chr(12288),其實就是為了對齊。

1.函數getHTMLText()

  從網絡上獲取大學排名網頁內容。

def getHTMLText(url):#獲取URL信息,輸出內容 try: r = requests.get(url,timeout = 30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return""

2.函數fillUnivList()

  提取網頁內容中信息到合適的數據結構.

def fillUnivList(ulist,html):#將html頁面放到ulist列表中(核心) soup = BeautifulSoup(html,"html.parser") for tr in soup.find('tbody').children: if isinstance(tr,bs4.element.Tag):#如果tr標籤的類型不是bs4庫中定義的tag類型,則過濾掉 a = tr('a')#將所有的a標籤存為一個列表類型 tds = tr('td')#將所有的td標籤存為一個列表類型 ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[4].string.strip()])

註:這裡要注意的是,要注意使用strip()函數,它的作用是用於移除字符串頭尾指定的字符(默認為空格或換行符)或字符序列。但該方法只能刪除開頭或是結尾的字符,不能刪除中間部分的字符。用在此處可以使爬取的內容,在格式化輸出時達到對齊的效果。

3.函數printUnivList()

  利用數據結構展示並輸出結果:定義函數。

def printUnivList(ulist1,num):#列印出ulist列表的信息,num表示希望將列表中的多少個元素列印出來 #格式化輸出 tplt = "{0:^10}\t{1:{3}^12}\t{2:^10}" # 0、1、2為槽,{3}表示若寬度不夠,使用format的3號位置處的chr(12288)(中文空格)進行填充 print(tplt.format("排名","學校名稱","總分",chr(12288))) for i in range(num): u = ulist1[i] print(tplt.format(u[0], u[1], u[2],chr(12288))) print() print("共有記錄"+str(num)+"條")#2020最新python學習資源分享:1156465813

多說一句,很多人學Python過程中會遇到各種煩惱問題,沒有人解答容易放棄。小編是一名python開發工程師,這裡有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注小編,並在後臺私信小編:「01」即可領取。

四、完整代碼

'''功能描述:輸入:大學排名URL輸出:大學排名信息的屏幕輸出(排名,大學名稱,總分)技術路線:requests—bs4(只能獲取靜態頁面信息)定向爬蟲:僅對輸入URL進行爬取,不擴展爬取程序的結構設計:1.從網絡上獲取大學排名網頁內容:定義函數getHTMLText()2.提取網頁內容中信息到合適的數據結構:定義函數fillUnivList()3.利用數據結構展示並輸出結果:定義函數printUnivList()'''import requestsfrom bs4 import BeautifulSoupimport bs4ulist1=[]def getHTMLText(url):#獲取URL信息,輸出內容 try: r = requests.get(url,timeout = 30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return""def fillUnivList(ulist,html):#將html頁面放到ulist列表中(核心) soup = BeautifulSoup(html,"html.parser") for tr in soup.find('tbody').children: if isinstance(tr,bs4.element.Tag):#如果tr標籤的類型不是bs4庫中定義的tag類型,則過濾掉 a = tr('a') tds = tr('td')#將所有的td標籤存為一個列表類型 ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[4].string.strip()])def printUnivList(ulist1,num):#列印出ulist列表的信息,num表示希望將列表中的多少個元素列印出來 #格式化輸出 tplt = "{0:^10}\t{1:{3}^12}\t{2:^10}" # 0、1、2為槽,{3}表示若寬度不夠,使用format的3號位置處的chr(12288)(中文空格)進行填充 print(tplt.format("排名","學校名稱","總分",chr(12288))) for i in range(num): u = ulist1[i] print(tplt.format(u[0], u[1], u[2],chr(12288))) print() print("共有記錄"+str(num)+"條")def main(): uinfo = [] #將大學信息放到列表中 url = "https://www.shanghairanking.cn/rankings/bcur/2020" html = getHTMLText(url) fillUnivList(uinfo,html) printUnivList(uinfo,10)main()

輸出效果如下圖:


  本篇完,如有錯誤歡迎指出~

引用源自

中國大學MOOC Python網絡爬蟲與信息提取

https://www.icourse163.org/course/BIT-1001870001

相關焦點

  • Python爬蟲練習:爬取軟科世界大學學術排名
    (ShanghaiRanking’s Academic Ranking of World Universities,簡稱ARWU)於2003年由上海交通大學世界一流大學研究中心首次發布,是世界範圍內首個綜合性的全球大學排名。
  • Python爬蟲練習:爬取800多所大學學校排名、星級等
    前言國內大學最新排名,北大反超,浙大僅第四,中科大跌至第八時隔五年,「雙一流」大學即將迎來首次大考,這也是繼改變高校評斷標準之後,第一次即將以官方對外發布,自然是引來了許多人的關注。最近,有許多不同機構發布的國內高校排名,但彼此之間的差異很大,網友之間的爭議也很大。
  • Python爬取中國大學排名,並且保存到excel中
    爬蟲爬取中國大學排名,並且保存到excel中,當然這個代碼很簡單,我用了半小時就寫完了,我的整體框架非常清晰,可以直接拿去用,也希望有小白可以學習到關於爬蟲的一些知識,當然我也只是在學習中,有不好的地方還麻煩大佬們指正!
  • 如何快速學會Python爬蟲(入門篇)
    Python爬蟲入門二之爬蟲基礎了解3. Python爬蟲入門三之Urllib庫的基本使用4. Python爬蟲入門四之Urllib庫的高級用法5. Python爬蟲入門五之URLError異常處理6.
  • 爬蟲|Python菜鳥的學習之路——爬取一本小說
    所以小編就想著用爬蟲爬小說,因為本次案例為初級案例,代碼量也不會很多,可以作為爬蟲的入門學習。小編聲明:如果你有能力請閱讀正版小說,畢竟作者費時費腦給咱們寫出那麼精彩的小說,請尊重他人的勞動成果,不需要你打賞,支持正版小說就好!
  • python爬蟲系列教程,用python爬取全國範圍內的KFC店地址
    下面羽憶教程教你會python爬取全國範圍內的KFC店地址,這是一篇python爬蟲系列的教程,簡單又能讓人填飽肚子。python爬蟲介紹python發展至今,python爬蟲已經成為了一種職業,因為其可以幫助企業快速得到網絡上的最新信息,但是為什麼很多寫python爬蟲的程式設計師會面臨牢獄之災呢?
  • 「Python爬蟲與文本實例技術與應用」培訓班通知
    通過爬蟲獲取的海量信息,我們可以對其進行進一步的分析:市場預測、文本分析、機器學習方法等。     Python作為一門腳本語言,它靈活、易用、易學、適用場景多,實現程序快捷便利,早已經成為程式設計師們的一門編程利器。Python這門程式語言包羅萬象,可以說掌握了python,除了一些特殊環境和高度的性能要求,你可以用它做任何事。
  • Python爬蟲快速入門,靜態網頁爬取
    一、數據解析在爬取之前,我們需要檢測下響應狀態碼是否為200,如果請求失敗,我們將爬取不到任何數據:import requestsre = requests.get(&39;)if re.status_code == 200: print
  • python 爬蟲學習路線:從入門到進階
    這裡給你一條平滑的、快速入門的學習路徑。本文依舊需要有一些python基礎,至少要求掌握python語法。前置條件:python開發環境首先,學習python爬蟲,需要會:自己安裝python,python庫以及自己的編輯器。這個前置條件呢,在涼拌以前的文章寫過,這裡涼拌就不再贅述,不會的同學可以點下面的連結看一看。
  • python爬蟲入門實戰!爬取博客文章標題和連結!
    最近有小夥伴和我留言想學python爬蟲,那麼就搞起來吧。準備階段爬蟲有什麼用呢?舉個最簡單的小例子,你需要《戰狼2》的所有豆瓣影評。最先想的做法可能是打開瀏覽器,進入該網站,找到評論,一個一個複製到文本中,保存,翻頁,接著複製,直到翻到最後一頁。而爬蟲只要寫腳本,執行,泡杯咖啡,坐等他執行完。
  • Python爬蟲入門(四):實戰,爬取4399小遊戲首頁
    本部分為爬蟲入門篇的實戰教程,我會用到除了selenium外所有在上文介紹過的模塊來編寫實例,爬取4399小遊戲網站首頁上的內容。robots協議全稱為網絡爬蟲排除標準(Robots Exclusion Protocol)。這個協議告訴了網絡爬蟲哪些網站是可以爬取的,哪些爬蟲可以爬取此網站。robots協議通過在網站根目錄下放置robots.txt(全部小寫)文件來實現。
  • python爬蟲100個入門項目
    1淘寶模擬登錄2天貓商品數據爬蟲3爬取淘寶我已購買的寶貝數據4每天不同時間段通過微信發消息提醒女友5爬取5K解析度超清唯美壁紙6爬取豆瓣排行榜電影數據(含GUI界面版)7多線程+代理池爬取天天基金網、股票數據(無需使用爬蟲框架)8一鍵生成微信個人專屬數據報告(了解你的微信社交歷史)9一鍵生成QQ個人歷史報告10微信公眾號文章爬蟲
  • 小白如何入門 Python 爬蟲?
    本文針對初學者,我會用最簡單的案例告訴你如何入門python爬蟲!想要入門Python 爬蟲首先需要解決四個問題熟悉python編程了解HTML了解網絡爬蟲的基本原理學習使用python爬蟲庫一、你應該知道什麼是爬蟲
  • Python爬蟲:爬取虎牙星秀主播圖片
    動態爬取思路講解導入需要的python模塊通過爬蟲獲得的主播圖片在Pycharm中所敲的代碼動態爬取思路講解1.簡單的爬蟲只需要訪問網站搜索欄處的url,就可以在開發者工具(F12)處,利用正則表達式、Xpath、css等進行定位並抓取數據;2.虎牙星秀頁面不同於簡單的網頁
  • Python多進程爬蟲爬取愛奇藝vip視頻
    目標url:https://www.lagou.com/用selenium爬蟲實現,輸入任意關鍵字,比如 python 數據分析,點擊搜索,得到的有關崗位信息,爬取下來保存到Excel。輸入關鍵字 browser.find_element_by_class_name(&39;).click() 最大化窗口 time.sleep(2) browser.find_element_by_class_name(&39;).click() 34;scroll(0,3000)& 下拉滾動條 get_data() 模擬點擊下一頁 翻頁爬取數據
  • Python爬蟲實戰:2020最新BOOS直聘爬取教程
    Python爬蟲實戰:2020最新BOOS直聘爬取教程前言完整代碼及注釋分析圖片輔助分析運行結果更多爬蟲教程關注我,經過多次的爬取之後。。。。。。。失策失策,以前爬取別的網站從沒有這麼嚴格的反爬蟲機制,沒到到翻車了
  • 入門Python爬蟲 (1)
    了解計算機行業,可以從python爬蟲入門,目前市場上python相關的計算機崗位很多。Python爬蟲,簡單來說,即通過Python程序獲取對我們有用的數據。requests庫首先,在爬蟲中最常見的代碼便是:import requests即引入requests庫,是一切爬蟲程序的基礎。在Python中,有許多庫可以供我們使用。
  • python爬蟲senlenium爬取拉勾網招聘數據
    ,輸入任意關鍵字,比如 python 數據分析,點擊搜索,得到的有關崗位信息,爬取下來保存到Excel#39;body-btn').click() # 關閉彈窗 啥領取紅包窗口 time.sleep(random.randint(1, 3)) browser.execute_script("scroll(0,3000)") # 下拉滾動條 get_data() # 調用抓取數據的函數 # 模擬點擊下一頁 翻頁爬取數據
  • Python爬蟲爬取B站排行榜數據
    簡單爬蟲項目。爬蟲是一門高深的學問,這裡說的簡單爬蟲是指獲取的數據為靜態網頁數據,選擇B站也是因為作者本身也是老二刺猿了,同時B站沒有嚴格的反爬蟲措施,適合新手的爬蟲練手。由於本人第一次寫博客,在編寫的過程中難免會出現錯誤,如有發現錯誤或者不合理之處,歡迎到評論區留言指正~獲取網頁數據我們要爬取的內容是B站上的熱門視頻排行榜(全站版)
  • Python爬蟲之Requests 庫的介紹和操作實例
    你可以爬去妹子的圖片,爬取自己想看看的視頻。。等等你想要爬取的數據,只要你能通過瀏覽器訪問的數據都可以通過爬蟲獲取二、爬蟲的本質(用了requests之後,你基本都不願意用urllib了)一句話,requests是python實現的最簡單易用的HTTP庫,建議爬蟲使用requests庫。