python-urllib

python-urllib快速上手

1 import urllib.request
2 
3 url = 'http://www.baidu.com'
4 file = urllib.request.urlopen(url)
5 data = file.read()
6 dataline = file.readline()
7 datalines = file.readlines()

首先導入urllib.request模塊python

而後使用urllib.request.urlopen打開並爬取一個網頁,此時返回的是<http.client.HTTPResponse object at 0x00000206F862C4A8>,一個HTTP響應對象。瀏覽器

對於響應對象讀取的三種方式:服務器

  1. file.read() 讀取文件的所有內容
  2. file.readlines() 讀取文件的所有內容,與read不一樣的是,readlines會把讀取到的內容賦給一個列表變量。(推薦)
  3. file.readline() 讀取文件的一行內容

若是但願返回與當前環境有關的信息,可使用info()函數

file.info()

若是但願獲取當前爬取網頁的狀態碼,咱們可使用getcode()網站

file.getcode()

若是想要獲取當前所爬取的URL地址,可使用geturl()ui

file.geturl()

通常來講,URL標準中只會容許一部分ASCLL字符好比數字、字母、部分符號等,而其餘的一些字符,好比漢字等,是不符合URL標準的。因此若是咱們在URL中使用了一些其餘不符合標準的字符就會出現問題,此時須要進行URL編碼方可解決。編碼

若是要進行編碼,可使用urllib.request.quote()進行url

urllib.request.quote('http://www.baidu.com')

能夠看到,編碼結果是'http%3A//www.baidu.com'spa

相應的,有時須要對編碼的網址進行解碼。若要解碼,可使用urllib.request.unquote().net

urllib.request.unquote('http%3A//www.baidu.com')

輸出結果爲'http://www.baidu.com'

除了這種方法以外,還可使用urllib.request裏面的urlretrieve()函數直接將對應信息寫入本地文件。格式爲:「urllib.request.urlretrieve(url,filename='本地文件地址')」

filename = urllib.request.urlretrieve('http://www.baidu.com','本地位置')

瀏覽器模擬——Headers屬性

爲了防止禁止爬蟲訪問,讓爬蟲模擬成瀏覽器

方法一:使用build_opener()修改報頭

因爲urlopen()不支持一些HTTP的高級功能,因此,咱們若是要修改報頭,可使用urllib.request.build_opener()進行。

1 import urllib.request
2 url = '網址'
3 headers = ('User-Agent','...')
4 opener = urllib.request.build_opener()
5 opener.addheaders = [headers]
6 data = opener.open(url).read()

方法二:使用add_header()添加報頭

可使用urllib.request.Request()下的add_header()實現瀏覽器的模擬

import urllib.request
url = 'http://blog.csdn.net/weiwei_pig/article/details/51178226'
req = urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36')
data = urllib.request.urlopen(req).read()

使用urllib.request.Request()返回的是<urllib.request.Request object at 0x000001730BE1EB70>,使用add.header爲Request對象添加報頭。

此時已經成功設置好報頭,而後咱們使用urlopen()打開Request對象便可打開對應網站,獲得一個HTTP的響應對象。

超時設置

有的時候,咱們訪問一個網頁,若是該網頁長時間未響應,那麼系統就會判斷該網頁超時了。既沒法打開該網頁。

有的時候,咱們須要根據本身的須要來設置超時的時間值。

import urllib.request
for i in range(1,100):
    try:
        file = urllib.request.urlopen('url',timeout=1)
        data = file.read()
        print(len(data))
    except Exception as e:
        print('出現異常:'+str(e))

HTTP協議請求實戰

代理服務器設置

能夠從整理好的網址http://yum.iqianyue.com/proxy中找到不少代理服務器地址。

有了代理ip地址以後,咱們就能夠經過代理服務器來爬取網站內容了。

import urllib.request

def use_proxy(proxy_addr,url):
    proxy = urllib.request.ProxyHandler({'http':proxy_addr})
    opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
    urllib.request.install_opener(opener)
    data = urllib.request.urlopen(url).read().decode('utf-8')
    return data

proxy_addr = '112.85.173.20:9999'
url = 'http://www.baidu.com'
data = use_proxy(proxy_addr,url)
print(len(data))
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息