2017年袄膏, 編程界最火的的語言莫過于Python默色。 Python語言其實(shí)并不是像Go, Kotlin語言一樣是近些年的創(chuàng)造的谎势, 它其實(shí)比Java語言的歷史略久, 只不過它或許不符合我們社會(huì)主義的國情虐沥, 在國內(nèi)一直不被廣泛應(yīng)用熊经。 就這近兩年, 突然之間欲险, 名不見經(jīng)傳的Python語言在國內(nèi)一夜走紅奈搜, 無論是專業(yè)的Python程序員還是諸如Java, C++等語言的程序員都再次將目光投向Python盯荤, 2018年元旦期間, 微信跳一跳小游戲一經(jīng)發(fā)布焕盟, 潛伏在深圳高新園的某大牛隨即就在github上發(fā)布了用Python語言寫的外掛程序秋秤,這一下各路Python大牛又陸續(xù)補(bǔ)充了該外掛的iOS等版本, 玩游戲開外掛不應(yīng)該提倡脚翘,應(yīng)該予以鄙視... 當(dāng)然灼卢, 用程序玩游戲的確不會(huì)帶來任何快感, 可是寫這個(gè)程序的過程是很快樂的呀来农! 這又從另一面讓我們認(rèn)識(shí)了強(qiáng)大的Python---深能進(jìn)行機(jī)器學(xué)習(xí)鞋真,大數(shù)據(jù)分析, 網(wǎng)絡(luò)爬蟲沃于, 淺也能實(shí)現(xiàn)游戲外掛涩咖, 搶12306火車票, 給人的感覺就是Python已經(jīng)無所不能了繁莹。Python潮流檩互, 浩浩蕩蕩, 順之者昌咨演,逆之者亡闸昨, 我當(dāng)然也要跟著時(shí)代潮流呀, 我去年11月開始學(xué)習(xí)Python了薄风, Python語法比Java饵较, C, C++更加靈活簡單遭赂, 今天嘗試了一下使用Python爬蟲的功能循诉。
一.要爬取的是最好大學(xué)網(wǎng)的中國大學(xué)排名
最好大學(xué)網(wǎng)的URL是:
http://www.zuihaodaxue.com/shengyuanzhiliangpaiming2017.html
如圖:
查看源碼中我們要爬取的關(guān)鍵信息:
二.使用requests庫獲取HTML文本
定義獲取HTML文本的函數(shù)
def get_html_text(url):
"""
獲取url對(duì)應(yīng)的html文本
:param url:
:return: html文本
"""
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
三.用BeautifulSoup4上面獲取的文本進(jìn)行解析
BeautifulSoup4的文檔非常友好, 解析HTML非常簡單嵌牺。
定義解析函數(shù):
def parse_html(html):
"""
解析html文件
:param html:
:return: 大學(xué)排名列表打洼,['1', '清華大學(xué)', '北京']
"""
u_list = []
soup = BeautifulSoup(html, 'html.parser')
tbody = soup.find('tbody')
for tr in tbody:
if isinstance(tr, bs4.element.Tag):
td_list = list(tr)
u_list.append([td_list[0].string, td_list[1].string, td_list[2].string])
return u_list
解析后的形式:
[ ['1', '清華大學(xué)', '北京'], ['2', '北京大學(xué)', '北京'],
['3', '中國科學(xué)院大學(xué)', '北京'], ['4', '中國科學(xué)技術(shù)大學(xué)', '安徽'],
['5', '復(fù)旦大學(xué)', '上海'], ['6', '中國人民大學(xué)', '北京'],
['7', '上海交通大學(xué)', '上海'], ['8', '浙江大學(xué)', '浙江'], ... ]
四.將解析后的內(nèi)容按照一定格式寫到文件中
def save_to_file(univ_list):
"""
將提取的數(shù)據(jù)保存到文件
:param univ_list:
:return:
"""
with open('university.txt', 'w') as f:
for item in univ_list:
s = '{0:>4} \t {1:<3} \t {2:<4}'.format(str(item[0]), str(item[2]), str(item[1]))
print(s, file=f)
f.close()
全部代碼:
import requests
from bs4 import BeautifulSoup
import bs4
def get_html_text(url):
"""
獲取url對(duì)應(yīng)的html文本
:param url:
:return: html文本
"""
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def parse_html(html):
"""
解析html文件
:param html:
:return: 大學(xué)排名列表龄糊,['1', '清華大學(xué)', '北京']
"""
u_list = []
soup = BeautifulSoup(html, 'html.parser')
tbody = soup.find('tbody')
for tr in tbody:
if isinstance(tr, bs4.element.Tag):
td_list = list(tr)
u_list.append([td_list[0].string, td_list[1].string, td_list[2].string])
return u_list
def save_to_file(univ_list):
"""
將提取的數(shù)據(jù)保存到文件
:param univ_list:
:return:
"""
with open('university.txt', 'w') as f:
for item in univ_list:
s = '{0:>4} \t {1:<3} \t {2:<4}'.format(str(item[0]), str(item[2]), str(item[1]))
print(s, file=f)
f.close()
if __name__ == '__main__':
url = "http://www.zuihaodaxue.com/shengyuanzhiliangpaiming2017.html"
html_text = get_html_text(url)
univ_list = parse_html(html_text)
save_to_file(univ_list)
寫入文件后的結(jié)果:
1 北京 清華大學(xué)
2 北京 北京大學(xué)
3 北京 中國科學(xué)院大學(xué)
4 安徽 中國科學(xué)技術(shù)大學(xué)
5 上海 復(fù)旦大學(xué)
6 北京 中國人民大學(xué)
7 上海 上海交通大學(xué)
8 浙江 浙江大學(xué)
9 江蘇 南京大學(xué)
10 天津 南開大學(xué)
11 上海 同濟(jì)大學(xué)
12 北京 北京航空航天大學(xué)
13 北京 對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué)
13 上海 上海財(cái)經(jīng)大學(xué)
15 北京 中央財(cái)經(jīng)大學(xué)
16 北京 外交學(xué)院
17 天津 天津大學(xué)
18 湖北 武漢大學(xué)
18 北京 北京師范大學(xué)
20 北京 北京外國語大學(xué)
此處省去980行...
用Python語言進(jìn)行網(wǎng)絡(luò)爬蟲的操作過程并不復(fù)雜, 當(dāng)然了募疮, 本文所寫的只是一次簡單的小嘗試炫惩, 復(fù)雜的還待繼續(xù)探究。