網絡爬蟲(又被稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更常常的稱爲網頁追逐者),是一種按照必定的規則,自動地抓取萬維網信息的程序或者腳本。另一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。摘自百度百科html
URL(Uniform/Universal Resource Locator的縮寫,統一資源定位符)是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每一個文件都有一個惟一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎麼處理它。它最初是由蒂姆·伯納斯·李發明用來做爲萬維網的地址的。如今它已經被萬維網聯盟編制爲因特網標準RFC1738了。python
一個完整的URL包括訪問協議類型、主機地址、路徑和文件名。web
例:瀏覽器
>>> import urllib.request ① >>> with urllib.request.urlopen('https://www.baidu.com') as f: ② ... print(f.read()) ... b'<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace("https://","http://"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></n ③
① 導入模塊
② 用with語句來打開URL,urlopen通常經常使用的有三個參數,它的參數以下:urllib.requeset.urlopen(url,data,timeout),用f.read()方法來一次性讀取所有內容,能夠加參數來肯定讀取的字節數,如f.read(300)
③ 能夠看到urlopen返回的是字節對象,若是肯定html編碼格式,可使用decode來解碼,如:f.read().decode('utf-8')緩存
若是您但願經過URL檢索資源並將其存儲在一個臨時位置,您能夠經過urlretrieve()函數來實現這一功能,服務器
import urllib.request local_filename, headers = urllib.request.urlretrieve('http://python.org/') html = open(local_filename)
若是要想模擬瀏覽器發送GET請求,就須要使用Request對象,經過往Request對象add_header方法添加HTTP頭,咱們就能夠把請求假裝成瀏覽器,上面的代碼能夠修改成下面這樣:網絡
import urllib.request req = urllib.request.Request(url='https://www.baidu.com') ① req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36') ② with urllib.request.urlopen(req) as f: print(f.status) for k, v in f.getheaders(): ③ print(k, v)
① 經過Request對象添加headers方式請求
②.add_header()方法添加頭信息
③ 打印頭信息ide
只須要把參數data以bytes形式傳入,下面代碼是模擬的數據,作個例子使用:函數
from urllib import request, parse ① login_data = bytes(parse.urlencode({'form_email': 'demo', 'form_password': '123456'}), encoding='utf-8') print(login_data) ② req = request.Request('http://httpbin.org/post') ③ req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0') response = request.urlopen(req, login_data) print(response.read())
①導入request的parse模塊
②這裏就用到urllib.parse,經過bytes(urllib.parse.urlencode())能夠將post數據進行轉換放到urllib.request.urlopen的data參數中。這樣就完成了一次post請求。若是咱們添加data參數的時候就是以post請求方式請求,若是沒有data參數就是get請求方式
③這個網址不錯,能夠做爲練習urllib的各類方式(此處借鑑了scrounger的我的博客)
今天就到這裏,明天繼續urllib的高級用法。post