9.3 域名解析與網頁爬蟲
阿新 • • 發佈:2018-05-03
geturl ocs 內容 python.h TP size url AR com
Python 3.x 標準庫 urllib提供了 rullib.request、urllib.response、urllib.parse 和 urllib.error 4個模塊,很好地支持了網頁內容讀取功能。
下面的代碼演示了如何讀取並顯示指定網頁的內容。
1 import urllib.request
2
3 fp = urllib.request.urlopen(r‘http://www.baidu.com‘)
4
5 print(fp.read().decode()) #讀取了返回HTML
6
7 fp.close()
下面的代碼演示了如何使用GET方法讀取並顯示指定URL的內容。
1 import urllib.request
2 import urllib.parse
3
4 params = urllib.parse.urlencode({‘spam‘:1,‘eggs‘:2,‘bacon‘:0})
5 url = r‘http://www.baidu.com%s‘%params
6 with urllib.request.urlopen(url) as f:
7 print(f.read().decode(‘utf-8‘))
下面的代碼演示了如何使用POST方法提交參數並讀取指定頁面內容。
1 import urllib.request
2 import urllib.parse
3
4 data = urllib.parse.urlencode({‘spam‘:1,‘eggs‘:2,‘bacon‘:0})
5 data = data.encode(‘ascii‘)
6 with urllib.request.urlopen(r‘http://www.baidu.com‘,data) as f:
7 print(f.read().decode(‘utf-8‘))
下面的代碼演示了如何使用HTTP代理訪問指定網頁。
1 import urllib.request
2
3
4 proxies = {‘heet‘:‘http://proxy.example.com:8080/ ‘}
5 opener = urllib.request.FancyURLopener(proxies)
6 with opener.open(‘http://www.python.ory‘) as f:
7 f.read().decode(‘utf-8‘)
在IDLE或者Python程序中使用下面的代碼調用瀏覽器打開指定網頁:
1 import webbrowser
2
3 webbrowser.open(‘www.baidu.com‘)
最後,標準庫urllib.parse import urlparse 提供了域名解析的功能,支持RUL的拆分與合並以及相對地址到絕對地址的轉換。
1 from urllib.parse import urlparse
2
3 o = urlparse(‘http://www.cwi.nl:80/%7Eguido/Python.html‘)
4 print(o.port) #80
5 print(o.hostname) #www.cwi.nl
6
7 print(o) #ParseResult(scheme=‘http‘, netloc=‘www.cwi.nl:80‘, path=‘/%7Eguido/Python.html‘, params=‘‘, query=‘‘, fragment=‘‘)
8
9 print(urlparse(‘www.cwi.nl:80/%7Eguido/Python.html‘)) #ParseResult(scheme=‘www.cwi.nl‘, netloc=‘‘, path=‘80/%7Eguido/Python.html‘, params=‘‘, query=‘‘, fragment=‘‘)
10
11
12 from urllib.parse import urljoin
13 print(urljoin(‘http://www.cwi.nl:80/%7Eguido/Python.html‘,‘FAQ.html‘)) #http://www.cwi.nl:80/%7Eguido/FAQ.html
14 print(urljoin(‘http://www.cwi.nl:80/%7Eguido/Python.html‘,‘//www.python.org/%7Eguido‘)) #http://www.python.org/%7Eguido
15
16 from urllib.parse import urlsplit
17 url = r‘https://docs.python.org/3/library/urllib.parse.html‘
18 r1=urlsplit(url)
19 print(r1) #SplitResult(scheme=‘https‘, netloc=‘docs.python.org‘, path=‘/3/library/urllib.parse.html‘, query=‘‘, fragment=‘‘)
20 print(r1.geturl()) #https://docs.python.org/3/library/urllib.parse.html
9.3 域名解析與網頁爬蟲