Python網絡爬蟲的基礎理解-對應的自我理解誤區

##通過一個中國大學大學排名爬蟲的示例進行基礎性理解

以軟科中國最好大學排名為分析對象,基于requests庫和bs4庫編寫爬蟲程序,對2015年至2019年間的中國大學排名數據進行爬取:(1)按照排名先后順序輸出不同年份的前10位大學信息,并要求對輸出結果的排版進行優化;訪問的網址:https://www.shanghairanking.cn/rankings/bcur/2021

##網絡爬蟲定義

Python語言的簡潔性和腳本特點非常適合鏈接和網頁處理。

爬蟲首先要做的工作就是獲取網頁,這里就是獲取網頁的源代碼。 源代碼里包含了網頁的部分有用信息,所以只要把源代碼獲取下來,就可以從中提取想要的信息了。 前面講了請求和響應的概念,向網站的服務器發送一個請求,返回的響應體便是網頁源代碼。

##基本的操作步驟

A:通過網絡鏈接獲取網頁的內容

B:對獲得到的網頁內容進行處理

##所涉及到的庫

##最主流的兩個函數庫:requests和beautifulsoup4

##requests庫的使用

該庫是一個簡潔且簡單的處理HTTP請求的第三方庫,最大優點是程序編寫過程更接近正常URL的訪問過程。

##beautifulsoup4庫的使用

使用requests庫獲取HTML頁面并將其轉換成字符串后,需要進一步解析HTML頁面格式,提取有用的信息。

##Robots協議


Robots 排除協議(Robots Exclusion Protocol) 也被稱為爬蟲協議,它是網站管理者表達是否希望爬蟲自動獲取網絡信息意愿的方法。管理者可以在網站根目錄放置一個 robots.txt文件,并在文件中列出哪些鏈接不允許爬蟲爬取。一般搜索引擎的爬蟲會首先捕獲這個文件,并根據文件要求爬取網站內容。Robots排除協議重點約定不希望爬蟲獲取的內容,如果沒有該文件則表示網站內容可以被爬蟲獲得,然而,Robots協議不是命令和強制手段,只是國際互聯網的一種通用道德規范。絕大部分成熟的搜索引擎爬蟲都會遵循這個協議,建議個人也能按照互聯網規范要求合理使用爬蟲技術。

(一般來說,不允許訪問的網址,相應的網址會進行對應的加密操作。)

##代碼示例

"""網絡爬蟲代碼示例"""
import requests
from bs4 import BeautifulSoup
import bs4
#用來獲取網頁html
def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""
#將對應的網頁用python中對應的數據結構進行存儲
def fillUnivList(ulist, html):soup = BeautifulSoup(html, "html.parser")#BeautifulSoup的一個對象for tr in soup.find('tbody').children:if isinstance(tr, bs4.element.Tag):#bs4.element.Tag用來訪問html指定的元素標簽a = tr('a')tds = tr('td')ulist.append([tds[0].text.strip(), a[0].text.strip(), tds[4].text.strip()])#strip()函數用來去除對應的字符#print(ulist)#及逆行格式設置用來設置美觀的打印格式
def printUnivList(ulist, num):tplt = "{0:^5}\t{1:{3}^15}\t{2:^5}"print(tplt.format("排名", "學校名稱", "學校總分", chr(12288)))for i in range(num):u = ulist[i]print(tplt.format(u[0], u[1], u[2], chr(12288)))print("suc" + str(num))
"""由于大學名稱的被a標簽包含,所以我們可以定義一個列表存放a標簽中的內容(與td標簽進行區分開來)
為了視覺方面更加美觀,可采用中文字符的空格填充chr(12288),目的是為了對齊"""def main():uinfo = []url = 'https://www.shanghairanking.cn/rankings/bcur/2021'html = getHTMLText(url)fillUnivList(uinfo, html)printUnivList(uinfo, 10)main()

##代碼的運行結果:

訪問網址的源碼示例:

##網絡爬蟲的一個自我小小誤區

由于部分的網頁的訪問收到服務器的拒絕,因此通過自己制作網頁來進行對應的訪問,但是在這里忽略了一個特別重要的問題,自己所編寫的網頁并沒有受到對應的服務器鏈接,只是一個單純的html文件,因此我們的處理方法改成了訪問html文件,然后利用request庫beautifulsoup4庫進行處理。

(真正的網址需要受到服務器的請求的處理才可以進行解析)

##test.html源文件代碼

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><table border="1" ><caption>大學排名</caption><tr><td>排名</td><td>學校名稱</td><td>省市</td><td>總分</td><td>培養規模</td></tr><tr><td>1</td><td>清華大學</td><td>北京市</td><td>95.9</td><td>37342</td></tr><tr><td>2</td><td>北京大學</td><td>北京市</td><td>82.6</td><td>36317</td></tr><tr><td>3</td><td>浙江大學</td><td>浙江省</td><td>80</td><td>41188</td></tr><tr><td>4</td><td>上海交通大學</td><td>上海市</td><td>78.7</td><td>40417</td></tr><tr><td>5</td><td>復旦大學</td><td>上海市</td><td>70.9</td><td>25519</td></tr><tr><td>6</td><td>南京大學</td><td>江蘇省</td><td>66.1</td><td>20072</td></tr><tr><td>7</td><td>中國科學技術大學</td><td>安徽省</td><td>65.5</td><td>18507</td></tr><tr><td>8</td><td>哈爾冰工業大學</td><td>黑龍江省</td><td>63.5</td><td>25249</td></tr><tr><td>9</td><td>華中科技大學</td><td>湖北省</td><td>62.9</td><td>23503</td></tr><tr><td>10</td><td>中山大學</td><td>廣東省</td><td>62.1</td><td>23837</td></tr></table></body>
</html>

##效果顯示圖

##網頁中顯示的源碼

##以文件形式處理的代碼示例

"""網絡爬蟲"""
import requests
from bs4 import BeautifulSoup
alluniv = []def fillluniv(soup):data = soup.find_all("tr")for tr in data:ltd = tr.find_all("td")if len(ltd) == 0 :continueoneuniv = []for td in ltd :oneuniv.append(td.string)alluniv.append(oneuniv)# print(alluniv)def printUniv(num):print("{:^4}{:^10}{:^5}{:^8}{:^10}".format("排名","學校名稱","省市","總分","培養規模"))for i in range(1,num+1):print("{:^4}{:^10}{:^5}{:^8}{:^10}".format(alluniv[i][0],alluniv[i][1],alluniv[i][2],alluniv[i][3],alluniv[i][4]))
with open("test.html",'r',encoding="utf-8") as file:content = file.read()soup = BeautifulSoup(content,"html.parser")
fillluniv(soup)
printUniv(10)

##代碼的運行結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux下通過find找文件---通過修改時間查找(-mtime)

通過man手冊查找和-mtime選項相關的內容 man find | grep -A 3 mtime # 這里簡單介紹了 -mtime &#xff0c;還有一個簡單的示例-mtime n Files data was last modified n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretati…

【已解決】解決Win7虛擬機打開網頁報錯的情況

因為剛才下載了個虛擬機&#xff0c;同樣出現了無法安裝VMtools的情況&#xff0c;所以想直接通過虛擬機的瀏覽器來下載一個補丁&#xff08;因為自己的U盤在虛擬機上面無法識別&#xff0c;應該是太老了Win7&#xff09; 結果發現Win7內置的IE瀏覽器太拉了。于是向下載一個火…

深度學習記錄--神經網絡表示及其向量化

神經網絡表示 如下圖 就這個神經網絡圖來說&#xff0c;它有三層&#xff0c;分別是輸入層(Input layer)&#xff0c;隱藏層(Hidden layer)&#xff0c;輸出層(Output layer) 對于其他的神經網絡&#xff0c;隱藏層可以有很多層 一般來說&#xff0c;不把輸入層算作一個標準…

【ITK庫學習】使用itk庫進行圖像濾波ImageFilter:幾何變換:翻轉、重采樣(未完)

目錄 1、itkFlipImageFilter 圖像翻轉濾波器2、itkResampleImageFilter 重采樣圖像濾波器 1、itkFlipImageFilter 圖像翻轉濾波器 該類的主要功能是使輸入數據在用戶指定的軸上進行翻轉。 翻轉軸通過函數SetFlipAxes(array) 設置&#xff0c;其中輸入是FixArray<bool,Imag…

UML圖的各種類型以及軟件設計師考試考察的方式

UML建模 前言 常見的UML的類型 UML 比前兩題是更難的&#xff08;略高&#xff0c;但是學會就可以了。前兩題是&#xff1a;數據流圖&#xff0c;數據庫的設計&#xff09;&#xff0c;因為UML圖有很多類型&#xff1a;用例圖&#xff0c;類圖與對象圖&#xff0c;順序圖&…

3_CSS層疊樣式表基礎

第3章-CSS層疊樣式表基礎 學習目標(Objective) 掌握標簽選擇器的使用掌握類選擇器的使用了解id選擇器和通配符選擇器掌握font屬性和color屬性的應用 1.HTML的局限性 如果要改變下高度或者變一個顏色&#xff0c;就需要大量重復操作 總結&#xff1a; HTML滿足不了設計者的需…

Emacs之dired模式重新綁定鍵值v(一百三十一)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 優質專欄&#xff1a;多媒…

uniapp實戰 —— 輪播圖【數字下標】(含組件封裝,點擊圖片放大全屏預覽)

組件封裝 src\components\SUI_Swiper2.vue <script setup lang"ts"> import { ref } from vue const props defineProps({config: Object, })const activeIndex ref(0) const change: UniHelper.SwiperOnChange (e) > {activeIndex.value e.detail.cur…

Python——數據容器

數據容器操作的異同點 項目列表list元組tuple字符串str集合set字典dict元素數量支持多個支持多個支持多個支持多個支持多個元素類型任意任意僅字符任意key&#xff1a;除字典外任意類型&#xff1b;value&#xff1a;任意類型下標索引支持支持支持不支持不支持重復元素支持支持…

yarn link使用(npm link)

使用場景 前端開發中&#xff0c;兩個項目相互依賴時&#xff0c;使用yarn link(npm link)鏈接 例如&#xff1a;A項目依賴于本司自己的UI庫B&#xff0c;當我們修改了UI庫B中的某些代碼時&#xff0c;需本地驗證后再發布到私服&#xff0c;此時A項目與UI項目B通過yarn link連…

數據可視化:解鎖企業經營的智慧之道

在現代企業管理中&#xff0c;數據可視化已經成為了一項重要的工具。它不僅僅是簡單地展示數據&#xff0c;更是提供了深入理解數據、做出更明智決策的方法。作為一名可視化設計從業人員&#xff0c;我經手過一些企業自用的數據可視化項目&#xff0c;今天就來和大家聊聊數據可…

數字化升級,智慧醫療新時代——醫院陪診服務的技術創新

在信息技術飛速發展的今天&#xff0c;醫療服務正迎來數字化升級的新時代。本文將探討如何通過先進技術的應用&#xff0c;為醫院陪診服務注入更多智慧元素&#xff0c;提升患者和家屬的醫療體驗。 1. 創新醫療預約系統 # Python代碼演示醫療預約系統的簡單實現 class Medic…

輸入框的透明度影響placeholder的透明度怎么解決

有一個需求是需要寫如上圖所示的輸入框。 首先想到的是調整輸入的透明度 <div class"inputDiv"><img src"./images/search.png" /><input type"text" class"myInput" placeholder"請輸入標題關鍵字"/> &…

飛天使-linux操作的一些技巧與知識點

命令行光標移動到行首行尾 ctrl a 跳到首 ctrl e 跳到尾/etc/passwd rpm 包格式 RPM&#xff08;Red Hat Package Manager&#xff09;是一種常用的Linux軟件包管理系統&#xff0c;它使用特定的命名規則來標識和命名軟件包。RPM包的名稱格式通常遵循以下規則&#xff1a;…

Qt基礎-修改Qt Creator界面字體

Qt Creator設計時字體太小,有時需要自定義一下,本文講解如何修改Qt Creator界面字體。 一、創建樣式文件 創建CSS文件,定義名稱為custom-style.css 編寫內容: QWidget { font: 12pt "Microsoft YaHei"; }QPlainTextEdit { font: 12pt "Microsoft YaHei&…

FPGA時序分析與約束(0)——目錄與傳送門

一、簡介 關于時序分析和約束的學習似乎是學習FPGA的一道分水嶺&#xff0c;似乎只有理解了時序約束才能算是真正入門了FPGA&#xff0c;對于FPGA從業者或者未來想要從事FPGA開發的工程師來說&#xff0c;時序約束可以說是一道躲不過去的坎&#xff0c;所以這個系列我們會詳細介…

Python的sort()與sorted()排序函數的區別

文章目錄 一、工具二、需求三、簡單的使用例子四、原理分析Timsort算法主要特點&#xff1a;Timsort算法的工作原理&#xff1a;sort() 方法和 sorted() 函數的差異&#xff1a; 五、Python中的單例實現簡單示例 一、工具 Python 3.10.0 pycharm 2022 二、需求 最近做項目的…

微服務學習:RestTemplateWebClient發起的http請求實現遠程調用

http請求做遠程調用是與語言無關的調用&#xff0c;只要知道對方的ip,端口&#xff0c;接口路徑&#xff0c;請求參數即可 啟動類中配置&#xff1a; Beanpublic RestTemplate restTemplate(){return new RestTemplate();} Sevice中書寫方法 get Autowiredprivate RestTemp…

2023-2024 年重慶市職業院校技能大賽 高職組“軟件測試”賽項樣題

2023-2024 年重慶市職業院校技能大賽 高職組“軟件測試”賽項樣題 單元測試要求分析、代碼設計、設計測試數據、編寫測試腳本和 測試執行等&#xff1b;測試計劃、測試報告文檔設計與編寫&#xff1b;Web 端測試用例 設計、測試執行和 Bug 記錄&#xff1b; 自動化測試要求分析…

點擊按住說話按鈕事件有延遲

問題原因&#xff1a; 該問題原因是由于系統的某些手勢 delaysTouchesBegan 屬性為 YES&#xff0c;當按鈕處在某些特定位置時觸摸事件會先被這些系統的手勢攔截&#xff0c;系統不響應才會繼續分發&#xff0c;而按鈕的 UIControlEventTouchDown 事件是需要立即響應的&#xf…