python的urllib四大模塊_Python常用的內建模塊4:urllib

urllib提供了一系列用于操作URL的功能

Get

urllib的request模塊可以非常方便的抓取URL的內容, 也就是發送一個GET請求到制定的頁面, 然后返回HTTP的響應:

例如, 對豆瓣的一個URLhttps://api.douban.com/v2/book/2129650進行抓取, 并返回響應:

from urllib import request

with request.urlopen('https://api.douban.com/v2/book/2129650') as f:

data = f.read()

print('Status:', f.status, f.reason)

for k, v in f.getheaders():

print('%s: %s' % (k, v))

print('Data:', data.decode('utf-8'))

可以看到HTTP響應的頭和JSON數據:

Status: 200 OK

Server: nginx

Date: Tue, 26 May 2015 10:02:27 GMT

Content-Type: application/json; charset=utf-8

Content-Length: 2049

Connection: close

Expires: Sun, 1 Jan 2006 01:00:00 GMT

Pragma: no-cache

Cache-Control: must-revalidate, no-cache, private

X-DAE-Node: pidl1

Data: {"rating":{"max":10,"numRaters":16,"average":"7.4","min":0},"subtitle":"","author":["廖雪峰編著"],"pubdate":"2007-6",...}

如果我們要想模擬瀏覽器發送GET請求,就需要使用Request對象,通過往Request對象添加HTTP頭,我們就可以把請求偽裝成瀏覽器。例如,模擬iPhone 6去請求豆瓣首頁:

from urllib import request

req = request.Request('http://www.douban.com/')

req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')

with request.urlopen(req) as f:

print('Status:', f.status, f.reason)

for k, v in f.getheaders():

print('%s: %s' % (k, v))

print('Data:', f.read().decode('utf-8'))

這樣豆瓣會返回適合iPhone的移動版網頁:

...

...

Post

如果要以POST發送一個請求,只需要把參數data以bytes形式傳入。

我們模擬一個微博登錄,先讀取登錄的郵箱和口令,然后按照weibo.cn的登錄頁的格式以username=xxx&password=xxx的編碼傳入

from urllib import request, parse

print('Login to weibo.cn...')

email = input('Email: ')

passwd = input('Password: ')

login_data = parse.urlencode([

('username', email),

('password', passwd),

('entry', 'mweibo'),

('client_id', ''),

('savestate', '1'),

('ec', ''),

('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')

])

req = request.Request('https://passport.weibo.cn/sso/login')

req.add_header('Origin', 'https://passport.weibo.cn')

req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')

req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')

with request.urlopen(req, data=login_data.encode('utf-8')) as f:

print('Status:', f.status, f.reason)

for k, v in f.getheaders():

print('%s: %s' % (k, v))

print('Data:', f.read().decode('utf-8'))

如果登錄成功,我們獲得的響應如下:

Status: 200 OK

Server: nginx/1.2.0

...

Set-Cookie: SSOLoginState=1432620126; path=/; domain=weibo.cn

...

Data: {"retcode":20000000,"msg":"","data":{...,"uid":"1658384301"}}

如果登錄失敗,我們獲得的響應如下:

...

Data: {"retcode":50011015,"msg":"\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef","data":{"username":"example@python.org","errline":536}}

利用urllib讀取JSON,然后將JSON解析為Python對象:

import json

def fetch_data(url):

return json.load(request.urlopen(url))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538500.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538500.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538500.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 升級 Python 至 3.x

原文鏈接:http://blog.csdn.net/liang19890820/article/details/51079633 -------------------------------------------- 簡述 CentOS 7 中默認安裝了 Python,版本比較低(2.7.5),為了使用新版 3.x,需要對…

Sublime Text 3 配置python交互運行環境的快捷鍵

2019獨角獸企業重金招聘Python工程師標準>>> 使用Sublime Text 3能以輕量級的環境寫python腳本,運行python代碼。為了更加方便地調用python腳本,通過在Sublime Text 3中綁定快捷鍵的方式,實現一鍵調用python交互運行環境&#xff…

xftp如何搜索文件_頭條搜索站長平臺如何添加網站和sitemap文件?附圖文教程

頭條搜索站長平臺已經上線了,目前我們廣大站長都可以登錄該平臺后添加新網站和提交 sitemap 地圖文件,建議大家可以前往嘗試一下,多一個搜索平臺就多一條路,認為倒是挺好的。下面就跟大家簡單介紹頭條搜索站長平臺如何添加網站和提…

Angular4中常用管道

原文鏈接:http://blog.csdn.net/haijing1995/article/details/71404350 ----------------------------------------------------- Angular4中常用管道 通常我們需要使用管道實現對數據的格式化,Angular4中的管道和之前有了一些變化,下面說一…

mysql死鎖無法查詢_MySQL死鎖導致無法查詢

客服反饋后臺無法查詢,原因大概知道,是因為MySQL的事務產生了死鎖,以往都不知道是哪個事務鎖住了,只能很粗暴地重啟MySQL最近查找到一個方法,不用重啟MySQL,記錄如下登錄到MySQL,來看下有哪些My…

彩鉛練習,花船

圖片發自簡書App圖片發自簡書App

python 百度ocr識別_Python使用百度Ocr識別文字保存CSV

1.準備:1)Python開發環境, 筆者用的是3.7; 工具用的是Pycharm2)百度云后臺創建文字識別的應用, 獲取AppID, API key, Secret Key百度云后臺創建文字識別的應用3) 百度模塊pip install baidu-aip安裝百度模塊4) 要保存成csv需要用到pandas模塊pip Install pandas安裝…

chrome解決跨域(CORS)問題---chrome插件

1、chrome瀏覽器 chrome中跨域問題,可以安裝插件解決, 插件地址 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi 地址需要翻墻 翻墻hosts:https://laod.cn/hosts/2017-google-host…

我的女朋友漏電了–論C++中的失敗(failure),缺陷(bug)和異常(exception)

先做個廣告置入,如果喜歡這篇文章,你可以到 zhaoyan.website/blog 去查看于此類似的C/C文章。 我承認有點標題黨了,不過這真的是一篇寫軟件的文章,所以如果你已經抽出了一張面巾紙,那么趁早再把它完美的放回去。這篇軟…

SQLplus 和mysql區別_mysql和oracle的區別有哪些

MySQL和Oracle都是流行的關系數據庫管理系統(RDBMS),在世界各地廣泛使用;大多數數據庫以類似的方式工作,但MySQL和Oracle的這里和那里總是存在一些差異的。本篇文章就給大家比較Oracle和MySQL,介紹Oracle和MySQL之間的區別&#x…

127.0.0.1與localhost的區別

2019獨角獸企業重金招聘Python工程師標準>>> 區別1: localhost也叫local ,正確的解釋是:本地服務器 127.0.0.1在windows等系統的正確解釋是:本機地址(本機服務器) 他們的解析通過本機的host文件,windows自動將localhost解析為127.…

一個項目經理的貪嗔癡

我有時候在想,自己到底是一個什么角色?產品經理?還是一個項目經理?或者只是一個技術經理。 身邊一些朋友說,自己想轉行做一個產品經理,做一個偉大的產品。我奉勸他們說還是省省吧,在這樣一個二三…

mysql 索引_MySQL之索引

索引查找算法BTREEBTREE查找算法演變B-TREE :普通 BTREE,平衡多路查找樹(B-Tree)BTREE :葉子節點雙向指針BTREE(B*TREE):枝節點的雙向指針普通B-TREE增強版BTREE(B*TREE)總結:從上圖看出,在BTree上有兩個頭…

2010年寒假學習心得

本人的博客園博客:http://www.cnblogs.com/zengmiaogen 博客園是我早期發表的博文。 ------------------------------------------ 1、心態要好,要相信自己能完成,不要擔心自己完成不了,萬事開頭難,有挫折是正常的。…

利用5w1h寫出高效的git commit

創建git commit 模板 創建模板 在個人目錄下, 創建 .gitmessage vi .gitmessage 復制代碼并輸入以下信息 Who: Demand maker*When: versions affected*What:The content of the code changes* descrption: * wiki/task:Why:The reason*How:Influence of change* 復制…

python高維數據_t-SNE高維數據可視化(python)

t-SNE實踐——sklearn教程t-SNE是一種集降維與可視化于一體的技術,它是基于SNE可視化的改進,解決了SNE在可視化后樣本分布擁擠、邊界不明顯的特點,是目前最好的降維可視化手段。關于t-SNE的歷史和原理詳見從SNE到t-SNE再到LargeVis。代碼見下…

java數學計算表達式_Java初學者:內建函數計算簡單的數學表達式

這個應該在之前寫的,忘記了,補上這次我們說一下如何用java計算數學表達式的值,比如,我們要計算sin(pi/3) cos(pi/6) 5.6^3,怎么計算呢?這里我們需要用到java的math的內建函數,所謂內建函數&am…

你是怎樣的程序員?

一、程序員A 一個善于總結、能舉一反三,敢于承擔責任,敢于挑戰自我,擁抱新技術的程序員,他的年齡意味著豐富經驗,意味著效率。 他能指出并帶人繞過一個一個技術大坑,笑看風云而不掉進去; 他能指…

谷歌新作gVisor:VM容器融合技術已經到來

作者|秦承剛,吳啟翾,喻望,楊偉 編輯|張嬋 出處丨高效開發運維 5 月 2 日,谷歌發布了一款新型的沙箱容器運行時 gVisor,號稱能夠為容器提供更安全的隔離,同時比 VM 更輕量。容器基于共…

安卓androidstudio訪問本地接口_安卓開發之數據存儲在本地的四種方式

?安卓開發之數據存儲在本地的四種方式本地數據存儲,在安卓開發過程中是不可避免的一個話題。這些本地的數據可能是用戶的設置,程序的設置,用戶的數據圖片, 也可能是網絡傳輸的一些緩沖數據。基本上我們有4種方法可以存儲安卓程序的數據。第1…