嵩天老師爬蟲第二週第六單元例項1實戰筆記

2021-10-21 06:20:19 字數 3747 閱讀 1426

參考文章:python 最好大學網大學排名爬取(2023年)

中國大學mooc嵩天老師python網路爬蟲課程第二週第六單元例項1爬取的大學排名網頁發生變化,知遠同學的blog在老師原來**的基礎上進行了修改,我發現網頁又發生了變化,繼續修改,給出最新的爬取過程及**。

大學名字增加超連結,名字包裹在td標籤下的a標籤內,需要注意

td標籤中表示序號的標籤td[0]以及表示分數的標籤td[4]內有空行

如果直接用

td[0]

.string

由於物件為空,printunivlist函式中的format將會報錯:

typeerror: unsupported format string passed to nonetype.__format__
因此需要去掉空行。

首先想到的是replace()方法:

tds[0]

.text.replace(

"\n",""

)

經除錯,確實可行。

後查閱bs4文件,發現了stripped_strings方法:

tds[0]

.stripped_strings

# -*- coding: utf-8 -*-

# created on 2021/3/6 14:01

import requests

from bs4 import beautifulsoup

import bs4

# 獲取目標網頁的文字資訊

defgethtmltext

(url)

:try

: r = requests.get(url, timeout=30)

r.raise_for_status(

) return r.text

except

:return

""def

fillunivlist

(ulist, html)

: soup = beautifulsoup(html,

"html.parser"

)for tr in soup.find(

'tbody'

).children:

ifisinstance

(tr, bs4.element.tag)

: tds = tr.find_all(

'td'

) name = tds[1]

.find(

'a')

.string.strip(

) rank = tds[0]

.text.replace(

"\n",""

).strip(

) score = tds[4]

.text.replace(

"\n",""

).strip(

)[rank, name, score]

)# 列印列表內容

defprintunivlist

(ulist, num)

: tplt =

"\t^10}\t"

print

(tplt.

format

("排名"

,"學校名稱"

,"總分"

,chr

(12288))

)for i in

range

(num)

: u=ulist[i]

print

(tplt.

format

(u[0

].strip(

), u[1]

.strip(

), u[2]

.strip(),

chr(

12288))

)def

main()

: uinfo =

url =

''html = gethtmltext(url)

fillunivlist(uinfo, html)

printunivlist(uinfo,20)

main(

)

# 通過beautifulsoup庫解析網頁,將資訊加入列表中

deffillunivlist

(ulist, html)

: soup = beautifulsoup(html,

"html.parser"

)for tr in soup.find(

'tbody'

).children:

ifisinstance

(tr, bs4.element.tag)

: tds = tr.find_all(

'td'

) tlist =

# 建立臨時列表

for rank in tds[0]

.stripped_strings:

# 使用stripped_strings去掉換行、空格等

name = tds[1]

.find(

'a')

.string.strip(

)for score in tds[4]

.stripped_strings:

[tlist[0]

, tlist[1]

, tlist[2]

])# 將臨時列表元素填充到ulist

排名    	   學校名稱   	    總分    

1    清華大學    852.5

2    北京大學    746.7

3    浙江大學    649.2

4   上海交通大學   625.9

5    南京大學    566.1

6    復旦大學    556.7

7  中國科學技術大學  526.4

8   華中科技大學   497.7

9    武漢大學    488

10    中山大學    457.2

11   西安交通大學   452.5

12  哈爾濱工業大學   450.2

13  北京航空航天大學  445.1

14   北京師範大學   440.9

15    同濟大學    439

16    四川大學    435.7

17    東南大學    432.7

18   中國人民大學   409.7

19    南開大學    402.1

20   北京理工大學   395.6

就寫到這了,第一篇blog,歡迎批評指

第六天工作總結(第二週)

工作總結 第六天 2015 03 09 周 一 晴 對於今天學習到的知識有 1 物件導向中考慮有哪些類 物件 類和物件有哪些屬性和方法 類和類之間有哪些關係 關聯 繼承 聚集 實現和多型 2 引用型別除了基本型別 四類八種 以外的型別 引用傳遞 傳遞位址。3 構造方法和方法過載及構造方法過載 同乙個...

第二章第六天介面

介面的概述 介面 介面就是一組功能 能力 規範 特點 實現多型 解決了繼承的單一繼承的問題。注意事項 多組合,幫助程式功能與功能之間解耦,程式的擴充套件性好 維護性好 介面側重能力,忽略實現細節 面向介面程式設計,乙個介面可以同時繼承多個介面 例一 對貫穿本書的案例電子寵物系統的類結構進行重構,要求...

第二階段 個人衝刺 第六天

一 任務 實現發帖的功能,使用者可以自己發帖,發布問題,所有人可見並可顯示使用者名稱回覆 四 自問自答三個問題 1 昨天做了怎麼?解決textview中在有些行尾出現 字元的問題 繼續實現發帖的功能,使用者可以自己發帖,發布問題,所有人可見並可顯示使用者名稱回覆 2 今天要做什麼?解決sqlite中...