首頁 >後端開發 >Python教學 >Python如何安裝urllib2函式庫

Python如何安裝urllib2函式庫

步履不停
步履不停原創
2019-07-02 13:11:2813347瀏覽

Python如何安裝urllib2函式庫

urllib2 是 Python2.7 自帶的模組(不需要下載,導入即可使用)。

urllib2函式庫的基本使用

所謂網頁抓取,就是把URL位址中指定的網路資源從網路流中讀取出來,儲存到本機。在Python中有很多函式庫可以用來抓取網頁,我們先學習urllib2。

urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用)
urllib2 官方文档:https://docs.python.org/2/library/urllib2.html
urllib2 源码:https://hg.python.org/cpython/file/2.7/Lib/urllib2.py

urllib2 在python3.x 中被改為urllib.request

urlopen

##我們先來段程式碼:

# urllib2_urlopen.py
 
# 导入urllib2 库
import urllib2
 
# 向指定的url发送请求,并返回服务器响应的类文件对象
response = urllib2.urlopen("http://www.baidu.com")
 
# 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
html = response.read()
 
# 打印字符串
print html

執行寫的python程式碼,將打印結果

Power@PowerMac ~$: python urllib2_urlopen.py

實際上,如果我們在瀏覽器上打開百度主頁, 右鍵選擇“查看源代碼”,你會發現,跟我們剛才打印出來的是一模一樣。也就是說,上面的4行程式碼就已經幫我們把百度的首頁的全部程式碼爬了下來。

一個基本的url請求對應的python程式碼真的非常簡單。

Request

在我們第一個例子裡,urlopen()的參數就是一個url位址;

但是如果需要執行更複雜的操作,例如增加HTTP標頭,必須建立一個Request 實例來作為urlopen()的參數;而需要存取的url位址則作為Request 實例的參數。

我們編輯urllib2_request.py

# urllib2_request.py
 
import urllib2
 
# url 作为Request()方法的参数,构造并返回一个Request对象
request = urllib2.Request("http://www.baidu.com")
 
# Request对象作为urlopen()方法的参数,发送给服务器并接收响应
response = urllib2.urlopen(request)
 
html = response.read()
 
print html

運行結果是完全一樣的:

新建Request实例,除了必须要有 url 参数之外,还可以设置另外两个参数:
data(默认空):是伴随 url 提交的数据(比如要post的数据),同时 HTTP 请求将从 "GET"方式 改为 "POST"方式。
headers(默认空):是一个字典,包含了需要发送的HTTP报头的键值对。
这两个参数下面会说到。

User-Agent

但是這樣直接用urllib2給一個網站發送請求的話,確實略有些唐突了,就好比,人家每家都有門,你以一個路人的身份直接闖進去顯然不是很禮貌。而且有一些網站不喜歡被程式(非人為訪問)訪問,有可能會拒絕你的訪問請求。

但是如果我們用一個合法的身份去請求別人網站,顯然人家就是歡迎的,所以我們就應該給我們的這個代碼加上一個身份,就是所謂的User-Agent頭。

瀏覽器就是網路世界上公認被允許的身份,如果我們希望我們的爬蟲程式更像一個真實用戶,那我們第一步,就是需要偽裝成一個被公認的瀏覽器。用不同的瀏覽器在發送請求的時候,會有不同的User-Agent頭。 urllib2預設的User-Agent頭為:Python-urllib/x.y(x和y是Python主版本和次版本號,例如Python-urllib/2.7)

#urllib2_useragent.py
 
import urllib2
 
url = "http://www.itcast.cn"
 
#IE 9.0 的 User-Agent,包含在 ua_header里
ua_header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"} 
 
#  url 连同 headers,一起构造Request请求,这个请求将附带 IE9.0 浏览器的User-Agent
request = urllib2.Request(url, headers = ua_header)
 
# 向服务器发送这个请求
response = urllib2.urlopen(request)
 
html = response.read()
print html

添加更多的Header資訊

在HTTP Request 中加入特定的Header,來建構一個完整的HTTP請求訊息。

可以透過呼叫Request.add_header() 新增/修改一個特定的header 也可以透過呼叫Request.get_header()來查看已有的header。

新增一個特定的header

# urllib2_headers.py
 
import urllib2
 
url = "http://www.itcast.cn"
 
#IE 9.0 的 User-Agent
header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"} 
request = urllib2.Request(url, headers = header)
 
#也可以通过调用Request.add_header() 添加/修改一个特定的header
request.add_header("Connection", "keep-alive")
 
# 也可以通过调用Request.get_header()来查看header信息
# request.get_header(header_name="Connection")
 
response = urllib2.urlopen(req)
 
print response.code     #可以查看响应状态码
html = response.read()
 
print html

#隨機新增/修改User-Agent

# urllib2_add_headers.py
 
import urllib2
import random
 
url = "http://www.itcast.cn"
 
ua_list = [
    "Mozilla/5.0 (Windows NT 6.1; ) Apple.... ",
    "Mozilla/5.0 (X11; CrOS i686 2268.111.0)... ",
    "Mozilla/5.0 (Macintosh; U; PPC Mac OS X.... ",
    "Mozilla/5.0 (Macintosh; Intel Mac OS... "
]
 
user_agent = random.choice(ua_list)
 
request = urllib2.Request(url)
 
#也可以通过调用Request.add_header() 添加/修改一个特定的header
request.add_header("User-Agent", user_agent)
 
# 第一个字母大写,后面的全部小写
request.get_header("User-agent")
 
response = urllib2.urlopen(req)
 
html = response.read()
print html

相關教學推薦:

Python影片教學#

以上是Python如何安裝urllib2函式庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn