1. 程式人生 > 程式設計 >python 爬蟲基本使用——統計杭電oj題目正確率並排序

python 爬蟲基本使用——統計杭電oj題目正確率並排序

  python爬蟲主要用兩個庫:Urllib和BeautifulSoup4。一個用來爬取網頁,一個用來解析網頁。

  Urllib是Python內建的HTTP請求庫,它包含四個模組:

  1、request,最基本的 HTTP 請求模組,用來模擬傳送請求,就像在瀏覽器裡輸入網址然後敲擊回車一樣,只需要給庫方法傳入 URL 與額外的引數,就可以模擬這個過程。
  2、error ,異常處理模組,如果出現請求錯誤,我們可以捕獲這些異常,然後進行重試或其他操作保證程式不會意外終止。
  3、parse ,工具模組,提供了許多 URL 處理方法,比如拆分、解析、合併等。
  4、robotparser,主要用於識別網站的 robots.txt 檔案,判斷網站是否可以爬取,用的較少。

  這裡只用到了最常用的request。

  BeautifulSoup4從bs4包中匯出,這裡主要用的就是它的解析功能。

  程式碼如下,註釋寫得很清楚了:

#杭電OJ題目AC率排序

import urllib.request as ur
from bs4 import BeautifulSoup 

dic = {} #存:"題號:題名 AC 提交次數 正確率"
for t in range(1,59,1):#1~58頁都爬一遍
 print(t)
 url = 'http://acm.hdu.edu.cn/listproblem.php?vol='+str(t) #存網址
 bs = BeautifulSoup(ur.urlopen(url).read(),"html.parser")#獲取網址的html並轉換為可以python可以使用的結構
 ql0 = str(bs.body.table.contents[11].td.table.contents[1])#網頁的DOM解析後可以直接通過"."來尋找子元素,找到題目的列表元素後,將列表中所有題目轉換成字串。(可以輸出看看)
 ql = ql0[30:-10].split(";") #字串中的題目以";"分隔,將它們分開,並存到列表中

 for i in ql: #以下就是格式化處理每個題目,然後存到字典中
  info1 = i.split(',"',1)
  num = info1[0].split(',')[1]
  info2 = info1[1].split('",',1)
  name = info2[0]
  right,submit = info2[1].split(',1)
  submit = submit[:-1] 
  dic[num] = [name,int(right),int(submit),int(right)/int(submit)]
dic = sorted(dic.items(),key = lambda x: x[1][3]) #每頁題目都存入字典後,把字典中的題目通過正確率進行排序,傳出列表

with open('Statistics.txt','w',encoding = 'utf-8') as f:#把統計排序好的題目儲存到txt中
 for i in dic:
  f.write(str(i)+'\n') 
print("Success!")

以上就是python 爬蟲基本使用——統計杭電oj題目正確率並排序的詳細內容,更多關於python 爬蟲的資料請關注我們其它相關文章!