函數 | 說明 |
get(url [, timeout=n]) | 對應HTTP的GET方式,設定請求超時時間爲n秒 |
post(url, data={'key':'value'}) | 對應HTTP的POST方式,字典用於傳輸客戶數據 |
delete(url) | 對應HTTP的DELETE方式 |
head(url) | 對應HTTP的HEAD方式 |
options(url) | 對應HTTP的OPTIONS方式 |
put(url, data={'key':'value'}) | 對應HTTP的PUT方式,字典用於傳輸客戶數據 |
其中,最經常使用的是get方法,它可以得到url的請求,並返回一個response對象做爲響應。有了響應對象,就能隨心所欲了,你以爲呢 ^x^html
屬性 | 說明 |
status_code | HTTP請求的返回狀態(???諮詢一下) |
encoding | HTTP響應內容的編碼方式 |
text | HTTP響應內容的字符串形式 |
content | HTTP響應內容的二進制形式 |
方法 | 說明 |
json() | 若http響應內容中包含json格式數據, 則解析json數據 |
raise_for_status() | 若http返回的狀態碼不是200, 則產生異常 |
5. 好了,咱們開工 >>>python
① 導入庫編程
from requests import get
② 設定url, 並使用get方法請求頁面獲得響應json
url = "http://www.baidu.com" r = get(url, timeout=3) print("得到響應的狀態碼:", r.status_code) print("響應內容的編碼方式:", r.encoding)
運行結果:app
得到響應的狀態碼: 200
響應內容的編碼方式: ISO-8859-1函數
③ 獲取網頁內容工具
url_text = r.text print("網頁內容:", r.text) print("網頁內容長度:", len(url_text))
運行結果:post
網頁內容: <!DOCTYPE html><!--STATUS OK--><html> <head> ... 京ICPè¯030173å· ... </body> </html>測試
網頁內容長度: 2381字體
驚不驚訝? 激不激動? 好很差玩? >>> 好吧,若是看到我上面 標藍 加粗 的不明字體,你可能會 》》》問 》》》爲何?
還記得上面的編碼方式嗎?沒錯,就是他!!!
這是由於HTML代碼也有本身的編碼方式,咱們須要使用相同的編碼方式。下圖是HTML語言的編碼方式設置
知道了緣由,那就好搞了!
④ 從新獲取網頁內容
r.encoding = "utf-8" url_text = r.text print("網頁內容:", r.text) print("網頁內容長度:", len(url_text))
運行結果:
網頁內容: <!DOCTYPE html> <!--STATUS OK--><html> <head> ... 意見反饋</a> 京ICP證030173號 <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
網頁內容長度: 2287
很明顯,此次能夠了 ^v^
url = "http://www.sogou.com" # 搜狗 for i in range(200): print("Test %d:" % (i+1), end=" ") response = get(url, timeout=5) # 判斷鏈接狀態 if response.status_code == 200: print("Conncect successful!") else: print("Conncect UNsuccessful!")
運行結果:
Test 1: Conncect successful!
Test 2: Conncect successful!
Test 3: Conncect successful!
Test 4: Conncect successful!
Test 5: Conncect successful!................
Test 199: Conncect successful!
Test 200: Conncect successful!
結果有200行,我就不 一 一 輸出了。試一下唄,你也能夠的哦 ^_^
(我也不知道這個標題什麼意思, 感受很牛但看不懂, 纔怪呢!你確定看得懂!)
這裏,選取一個很厲害的網站作演示
URL = https://www.runoob.com/
步驟說明:
1. 找個url, 上面有了, 其實隨便一個都是OK的
2. 抓取網頁內容,這個上面有詳解,不難
3. 本次使用 BeautifulSoup 第三方庫,須要自行下載【詳情介紹】
4. 開工
前面提供了 URL,如今抓取網頁內容
1 # -*- encoding:utf-8 -*- 2 from requests import get 3 def getText(url): 4 try: 5 r = get(url, timeout=5) 6 r.raise_for_status() 7 r.encoding = 'utf-8' 8 return r.text 9 except Exception as e: 10 print("Error:", e) 11 return ''
而後再引入 beautifulsoup庫,不過與其餘的庫有點不同,別寫錯了喲
from bs4 import BeautifulSoup
以後建立一個 beautifulsoup 對象
1 url = "https://www.runoob.com/" 2 html = getText(url) 3 soup = BeautifulSoup(html)
好了,如今想要幹嗎就幹嗎 ↓↓↓
① 獲取 head 標籤
print("head:", soup.head) print("head:", len(soup.head))
因爲結果比較多,就只輸出第二個結果
head: 33
② 獲取 body 標籤
print("body:", soup.body) print("body:", len(soup.body))
因爲結果比較多,就只輸出第二個結果
body: 39
③ 獲取 title 標籤
print("title:", soup.title)
title: <title>菜鳥教程 - 學的不只是技術,更是夢想!</title>
④ 獲取 title 的內容
print("title_string:", soup.title.string)
title_string: 菜鳥教程 - 學的不只是技術,更是夢想!
⑤ 查找特定 id 的內容
print("special_id:", soup.find(id='cd-login'))
special_id: <div id="cd-login"> <!-- 登陸表單 -->
<div class="cd-form">
<p class="fieldset"> ......
⑥ 查找全部的 a 標籤
a: [<a href="/">菜鳥教程 -- 學的不只是技術,更是夢想!</a>, <a class="current" data-id="index" href="//www.runoob.com/" title="菜鳥教程">首頁</a>, ......
⑦ 摘取全部的中文字符
1 import re 2 def getChinese(text): 3 text_unicode = text.strip() # 將字符串進行處理, 包括轉化爲unicode 4 string = re.compile('[^\u4e00-\u9fff]') 5 # 中文編碼範圍是 \u4e00-\u9ffff 6 # 中文、數字編碼範圍是 \u4e00-\u9fa50 7 chinese = "".join(string.split(text_unicode)) 8 return chinese
print("Chinese:", getChinese(html))
Chinese: 菜鳥教程學的不只是技術更是夢想菜鳥教程提供了編程的基礎技術教程 ......
此處就不細講,直接上代碼
1 # -*- coding: utf-8 -*- 2 ''' 3 獲取中國大學的排名 4 @author: bpf 5 ''' 6 import requests 7 from bs4 import BeautifulSoup 8 import pandas 9 # 1. 獲取網頁內容 10 def getHTMLText(url): 11 try: 12 r = requests.get(url, timeout = 30) 13 r.raise_for_status() 14 r.encoding = 'utf-8' 15 return r.text 16 except Exception as e: 17 print("Error:", e) 18 return "" 19 20 # 2. 分析網頁內容並提取有用數據 21 def fillTabelList(soup): # 獲取表格的數據 22 tabel_list = [] # 存儲整個表格數據 23 Tr = soup.find_all('tr') 24 for tr in Tr: 25 Td = tr.find_all('td') 26 if len(Td) == 0: 27 continue 28 tr_list = [] # 存儲一行的數據 29 for td in Td: 30 tr_list.append(td.string) 31 tabel_list.append(tr_list) 32 return tabel_list 33 34 # 3. 可視化展現數據 35 def PrintTableList(tabel_list, num): 36 # 輸出前num行數據 37 print("{1:^2}{2:{0}^10}{3:{0}^5}{4:{0}^5}{5:{0}^8}".format(chr(12288), "排名", "學校名稱", "省市", "總分", "生涯質量")) 38 for i in range(num): 39 text = tabel_list[i] 40 print("{1:{0}^2}{2:{0}^10}{3:{0}^5}{4:{0}^8}{5:{0}^10}".format(chr(12288), *text)) 41 42 # 4. 將數據存儲爲csv文件 43 def saveAsCsv(filename, tabel_list): 44 FormData = pandas.DataFrame(tabel_list) 45 FormData.columns = ["排名", "學校名稱", "省市", "總分", "生涯質量", "培養結果", "科研規模", "科研質量", "頂尖成果", "頂尖人才", "科技服務", "產學研合做", "成果轉化"] 46 FormData.to_csv(filename, encoding='utf-8', index=False) 47 48 if __name__ == "__main__": 49 url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html" 50 html = getHTMLText(url) 51 soup = BeautifulSoup(html, features="html.parser") 52 data = fillTabelList(soup) 53 #print(data) 54 PrintTableList(data, 10) # 輸出前10行數據 55 saveAsCsv("D:\\University_Rank.csv", data)
運行結果: