- Python數據分析入門:從數據獲取到可視化
- 沈祥壯
- 7字
- 2019-10-21 12:09:18
2.2 數據抓取實踐
2.2.1 請求網頁數據
1.發起請求
先看下面這段代碼。
import requests url = 'http://www.douban.com' data = requests.get(url) print(data.text)
運行輸出如下(截取部分)。
<! DOCTYPE HTML> <html lang="zh-cms-Hans" class=""> <head> <meta charset="UTF-8"> <meta name="description" content="提供圖書、電影、音樂唱片的推薦、評論和價格比較,以 及城市獨特的文化生活。"> <meta name="keywords" content="豆瓣,廣播,登錄豆瓣"> <meta property="qc:admins" content="2554215131764752166375" /> <meta property="wb:webmaster" content="375d4a17a4fa24c2" /> <meta name="mobile-agent" content="format=html5; url=https://m.douban.com"> <title>豆瓣</title>
下面進行簡要說明。
●import requests
調入需要的庫requests。
●url = '
將變量url賦值為豆瓣的網址。 ●data = requests.get(url) 利用requests庫的get方法,向此URL(即豆瓣首頁)發起請求,并將服務器返回的內容存入變量data。 ●print(data.text) 打印服務器返回的內容。從打印內容來看,已經請求成功。 注意:這里使用requests.get請求網頁數據,涉及向網站提交表單數據的時候,如登錄豆瓣等網站,我們還會用到post方法,這個之后還會介紹。 至此,發起請求的部分已經完成一大部分了。為什么不是全部呢?細心的讀者已經發現,這里并沒有設置UA進行偽裝,但是仍然得到了網頁內容。但是在有些情況下,不設置UA會出現錯誤。 那么,如何設置UA進行偽裝呢?這里介紹一個網址,http://httpbin.org/get,它會返回一些關于請求頭的信息。下面是筆者訪問時返回的內容。 可以看到返回的UA如下。 "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0" 下面仍然利用之前的請求代碼,只是地址改為這個網址,再次查看UA。 運行輸出如下。 此時UA如下所示。 "User-Agent" : "python-requests/2.9.1" 顯然,在沒有UA的偽裝下,服務器很容易就能識別出對方是一只網絡爬蟲的,所以有些網站在發現請求來自網絡爬蟲時將直接拒絕請求。為了偽裝,可以通過下面的方式設置UA的偽裝。 運行輸出如下。 可以看到,此時的UA和用瀏覽器請求的UA是一樣的,說明已經偽裝成功。而UA的獲取也十分簡單,在任意網頁空白處單擊鼠標右鍵→選擇“檢查元素”→選擇“Network”選項→選中一個請求(沒有則刷新網頁)→選擇右側“Header”選項,可以看到下方UA,如圖2-2所示。 圖2-2 至此,已經能夠完成網頁的請求,并進行簡單的偽裝了! 注意:這里通過設置headers,并以參數形式傳入requests的get函數進行偽裝。headers是字典的形式。2.設置UA進行偽裝
{
"args": {},
"headers": {
"Accept": "text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=
0.8",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US, en; q=0.5",
"Connection": "close",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20
100101 Firefox/52.0"
},
"origin": "45.77.19.213",
"url": "http://httpbin.org/get"
}
import requests
url = 'http://httpbin.org/get'
data = requests.get(url)
print(data.text)
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.9.1"
},
"origin": "113.58.87.225",
"url": "http://httpbin.org/get"
}
import requests
url = 'http://httpbin.org/get'
# headers里面大小寫均可
headers = {'User-Agent': "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) G
ecko/20100101
Firefox/52.0"}
data = requests.get(url, headers=headers)
print(data.text)
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20
100101 Firefox/52.0"
},
"origin": "113.58.87.225",
"url": "http://httpbin.org/get"
}
- 計算機組成原理與接口技術:基于MIPS架構實驗教程(第2版)
- Python廣告數據挖掘與分析實戰
- Redis應用實例
- UDK iOS Game Development Beginner's Guide
- Ceph源碼分析
- 數據驅動設計:A/B測試提升用戶體驗
- Hadoop 3.x大數據開發實戰
- Oracle PL/SQL實例精解(原書第5版)
- 跨領域信息交換方法與技術(第二版)
- Visual FoxPro數據庫技術基礎
- 數據指標體系:構建方法與應用實踐
- Unity for Architectural Visualization
- SOLIDWORKS 2018中文版機械設計基礎與實例教程
- MySQL 8.0從入門到實戰
- 大數據處理之道