日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python进阶(二)——request 爬取中国最好大学排名

發布時間:2024/5/15 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python进阶(二)——request 爬取中国最好大学排名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是要爬取的網址
http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html
效果如下,代碼思路均來自于中國大學mooc python嵩老師的課程(推薦一下)

前置知識

python基本語法,看得懂html (找到要爬取的內容)
簡單的request(爬蟲工具,不會也沒關系)
beautifulsoup(將爬下的內容轉換為人看的懂的工具,這是核心,有注釋,但要理解清楚還得再多看點文章)
如果以上都問題不大,那么接下來將會很輕松(如果你水平可以,你也可以直接看文末代碼)

代碼框架

#獲取網頁內容 def getHTML(url): #將網頁中目標內容移動到列表中 def moveToList(): #打印 def printHTML(): main():url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html"uinfo=[]html=getHTML(url)moveToList(uinfo,html)printHTML(uinfo,20)

以上是整個代碼的骨架,思路很清晰,我始終認為,代碼骨架可以使得思路清晰,比起具體的代碼有更少的記憶負擔和更好的效果

核心分析

request和beautifulsoup都是需要導入的,所以我們還得

import requests from bs4 import BeautifulSoup import bs4

為什么要導入兩次bs4?不是的,一次是BeautifulSoup,用來解析爬下來的內容,
一次是bs4,用來過濾無關的內容

有三個知識核心,看這個代碼

#將url這個網址的html內容返回到r中 r=request.get(url)

print(r.text)就可以直接打印出html代碼,這是最簡單的爬蟲

# 將html文件使用html解析器進行解析,返回的soup就是排好格式的html,soup = BeautifulSoup(html, "html.parser")

這是承接上面的,注意,此時soup仍是html

#在soup對象中尋找<tbody>標簽的子標簽for tr in soup.find('tbody').children:

為什么是tbody?因為

網頁上面的大學都在tbody里面,而tbody有很多的tr,就是一行大學,包括名字,省份,排名等
所以tbody的子標簽就是tr,但是不是所有的tr都是大學,還得過濾(代碼有介紹)

最后是是將過濾好的數據轉換格式

#將“排名”房子0處,“學校名稱”放在1處,省份放在2處 #^表示居中,<表示居左,后面的數字表示占位大小 #chr(12288)表示用中文的空格補齊空缺(避免錯位)tplt="{0:^6}\t{1:{3}^10}\t{2:<10}"print(tplt.format("排名", "學校名稱", "省份",chr(12288)))

如果你已經理解了以上3個核心問題,那么你就可以直接看代碼了

源代碼

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/2/13 13:33 # @Author : cs # @decription: 爬取中國最好大學排名import requests from bs4 import BeautifulSoup import bs4 from pandas import DataFramedef getHTML(url):try:r = requests.get(url, timeout=30)r.raise_for_status()#解碼格式r.encoding = r.apparent_encodingreturn r.textexcept:print("獲取錯誤")def moveToList(ulist, html):soup = BeautifulSoup(html, "html.parser")# print(soup.find('tbody').childern)# 找到目標數據標簽,遍歷tbody的孩子for tr in soup.find('tbody').children:# 過濾,如果tr的類型是bs4.element.Tag,那就是目標類型if isinstance(tr, bs4.element.Tag):# print(tr)#將所有td標簽(列值)存儲到列表中tds = tr('td')# 將每個列表添加到大列表中作為一個元素,只取前三列(排名,大學,省份)的string(內容)ulist.append([tds[0].string, tds[1].string, tds[2].string])def printHTML(ulist,num):tplt="{0:^6}\t{1:{3}^10}\t{2:<10}"print(tplt.format("排名", "學校名稱", "省份",chr(12288)))for i in range(num):u=ulist[i]print(tplt.format(u[0], u[1], u[2],chr(12288)))passdef main():url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html"html = getHTML(url)# print(html)uinfo = []moveToList(uinfo, html)frame=DataFrame(uinfo)#這里可以將內容輸出到csv文件,data是項目下的包,修改相對路勁即可#frame.to_csv("../data/bestUniversity.csv",index=0)printHTML(uinfo,20) main()

這是在pycharm中打開的csv文件,在wps中打開格式會更好

總結

以上是生活随笔為你收集整理的python进阶(二)——request 爬取中国最好大学排名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。