重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
Python怎么爬取中國(guó)大學(xué)排名并且保存到excel中,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司專注于宜城企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城開(kāi)發(fā)。宜城網(wǎng)站建設(shè)公司,為宜城等地區(qū)提供建站服務(wù)。全流程按需定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
今天發(fā)的是python爬蟲(chóng)爬取中國(guó)大學(xué)排名,并且保存到excel中,當(dāng)然這個(gè)代碼很簡(jiǎn)單,我用了半小時(shí)就寫完了,我的整體框架非常清晰,可以直接拿去用,也希望有小白可以學(xué)習(xí)到關(guān)于爬蟲(chóng)的一些知識(shí),當(dāng)然我也只是在學(xué)習(xí)中,有不好的地方還麻煩大佬們指正!謝謝!
URL : http://m.gaosan.com/gaokao/265440.html
request 獲取 html beautiful soup 解析網(wǎng)頁(yè)re 正則表達(dá)式匹配內(nèi)容新建并保存 excel
1from bs4 import BeautifulSoup # 網(wǎng)頁(yè)解析 獲取數(shù)據(jù) 2import re # 正則表達(dá)式 進(jìn)行文字匹配 3import urllib.request, urllib.error # 制定url 獲取網(wǎng)頁(yè)數(shù)據(jù) 4import xlwt 5 6def main(): 7 baseurl = "http://m.gaosan.com/gaokao/265440.html" 8 # 1爬取網(wǎng)頁(yè) 9 datalist = getData(baseurl) 10 savepath = "中國(guó)大學(xué)排名.xls" 11 saveData(datalist,savepath) 12 13# 正則表達(dá)式 14paiming = re.compile(r'(.*) .* .* .* .* ') # 創(chuàng)建超鏈接正則表達(dá)式對(duì)象,表示字符串模式,規(guī)則 15xuexiao = re.compile(r'.* (.*) .* .* .* ') 16defen = re.compile(r'.* .* (.*) .* .* ') 17xingji = re.compile(r'.* .* .* (.*) .* ') 18cengci = re.compile(r'.* .* .* .* (.*) ') 19 20# 爬取網(wǎng)頁(yè) 21def getData(baseurl): 22 datalist = [] 23 html = askURL(baseurl) # 保存獲取到的網(wǎng)頁(yè)源碼 24 # print(html) 25 #【逐一】解析數(shù)據(jù) (一個(gè)網(wǎng)頁(yè)就解析一次) 26 soup = BeautifulSoup(html, "html.parser") # soup是解析后的樹(shù)形結(jié)構(gòu)對(duì)象 27 for item in soup.find_all('tr'): # 查找符合要求的字符串形成列表 28 # print(item) #測(cè)試查看item全部 29 data = [] # 保存一個(gè)學(xué)校的所有信息 30 item = str(item) 31 #排名 32 paiming1 = re.findall(paiming, item) # re正則表達(dá)式查找指定字符串 0表示只要第一個(gè) 前面是標(biāo)準(zhǔn)后面是找的范圍 33 # print(paiming1) 34 if(not paiming1): 35 pass 36 else: 37 print(paiming1[0]) 38 data.append(paiming1) 39 if(paiming1 in data): 40 #學(xué)校名字 41 xuexiao1 = re.findall(xuexiao, item)[0] 42 # print(xuexiao1) 43 data.append(xuexiao1) 44 #得分 45 defen1 = re.findall(defen, item)[0] 46 # print(defen1) 47 data.append(defen1) 48 #星級(jí) 49 xingji1 = re.findall(xingji, item)[0] 50 # print(xingji1) 51 data.append(xingji1) 52 #層次 53 cengci1 = re.findall(cengci, item)[0] 54 # print(cengci1) 55 data.append(cengci1) 56 # print('-'*80) 57 datalist.append(data) # 把處理好的一個(gè)學(xué)校信息放入datalist中 58 return datalist 59 60 61# 得到指定一個(gè)url網(wǎng)頁(yè)信息內(nèi)容 62def askURL(url): 63 # 我的初始訪問(wèn)user agent 64 head = { # 模擬瀏覽器頭部信息,向豆瓣服務(wù)器發(fā)送消息 偽裝用的 65 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36" 66 } 67 # 用戶代理表示告訴豆瓣服務(wù)器我們是什么類型的機(jī)器--瀏覽器 本質(zhì)是告訴瀏覽器我們可以接受什么水平的文件內(nèi)容 68 request = urllib.request.Request(url, headers=head) # 攜帶頭部信息訪問(wèn)url 69 # 用request對(duì)象訪問(wèn) 70 html = "" 71 try: 72 response = urllib.request.urlopen(request) # 用urlopen傳遞封裝好的request對(duì)象 73 html = response.read().decode("utf-8") # read 讀取 可以解碼 防治亂碼 74 # print(html) 75 except urllib.error.URLError as e: 76 if hasattr(e, "code"): 77 print(e.code) # 打印錯(cuò)誤代碼 78 if hasattr(e, "reason"): 79 print(e.reason) # 打印錯(cuò)誤原因 80 return html 81 82 83# 3保存數(shù)據(jù) 84def saveData(datalist, savepath): 85 book = xlwt.Workbook(encoding="utf-8", style_compression=0) # 創(chuàng)建workbook對(duì)象 樣式壓縮效果 86 sheet = book.add_sheet('中國(guó)大學(xué)排名', cell_overwrite_ok=True) # 創(chuàng)建工作表 一個(gè)表單 cell覆蓋 87 for i in range(0, 640): 88 print("第%d條" % (i + 1)) 89 data = datalist[i] 90 # print(data) 91 for j in range(0, 5): # 每一行數(shù)據(jù)保存進(jìn)去 92 sheet.write(i , j, data[j]) # 數(shù)據(jù) 93 book.save(savepath) # 保存數(shù)據(jù)表 94 95 96#主函數(shù) 97if __name__ == "__main__": # 當(dāng)程序執(zhí)行時(shí) 98 # #調(diào)用函數(shù) 程序執(zhí)行入口 99 main() 100 # init_db("movietest.db") 101 print("爬取完畢!")
具體實(shí)現(xiàn)效果如下
一共600多條數(shù)據(jù)
具體的過(guò)程在代碼中也已經(jīng)清晰的標(biāo)注好備注,如有不懂可以留言,如果改進(jìn)的地方,麻煩大佬們指正,謝謝!
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。