python-爬虫(1)
python爬蟲主要分為三個部分:抓取、分析以及存儲。
1、抓取:如何抓取網頁內容呢?使用urllib2或者request抓取網頁內容。
打開百度-圖片,我們看到的是一張張精美的圖片,這個過程其實是用戶輸入網址之后,經過DNS服務器解析,找到服務器主機,向主機申請訪問,主機經過解析之后發送回瀏覽器HTML+JS+CSS等代碼,瀏覽器對這些代碼進行解析便可以看到我們申請訪問的內容。
下面我們抓取百度首頁的源碼為例:
1、使用urllib2庫
將代碼寫入一個文件并保存,在相應的目錄執行命令查看結果。
python e.py傳入url,這個是百度網頁的首頁,協議是HTTP協議,當然你也可以把HTTP換做FTP,FILE,HTTPS 等等,這只是代表了一種訪問控制協議,urlopen可以接受三個參數:
urlopen(url, data, timeout)參數1:url就是我們將要訪問的網址。
參數2:data是我們要上傳到服務器的地址。
參數3:tiemout是超時時間。
當然第2、3個參數是可以不傳送的,data默認為空None,timeout默認為socket._GLOBAL_DEFAULT_TIMEOUT。
方法返回一個response對象,返回的所有信息都保存在這個對象中。
使用該對象的read()方法,讀取對象中的內容。
2、使用request
我們也可以使用request請求,Request類的實例,構造時傳入url,data等內容。比如上面的兩行代碼,我們可以這么改寫:
這種寫法中間多一個request對象,建議大家如是寫,因為有些時候我們爬取網頁的時候,還要上傳一些其他的信息,這時候使用request就會好很多,通過構建一個request(請求),服務器響應請求,這樣更容易看明白。
上面的程序向大家展示了如何抓取靜態網頁的內容,不過大多數時候都是動態的,既需要你傳遞參數給它,比如登陸賬號和密碼。怎么辦呢?這時候就用到了我們前面說的data參數了。
我們將需要上傳的賬號密碼等信息,傳送到url中,得到服務器的響應。
我們定義一個字典,名字為values,設置username和password,下面利用urllib的urlencode方法將字典編碼,命名為data,構建request時傳入兩個參數,url和data,運行程序,返回的便是頁面內容。
import urllib2 import urllib url = "http://passport.xxxx.net/account/login" values = {"account":"wdf880817@sina.com", "password":"xxxxxxx"} data = urllib.urlencode(values) geturl = url + '?' + data request = urllib2.Request(geturl) response = urllib2.urlopen(request) print response.read()字典的定義方式還有一種:
import urllib2 import urllib url = "http://passport.xxxx.net/account/login" values = {} values["account"] = "wdf880817@sina.com" values["password"] = "xxxxxxxxxx" data = urllib.urlencode(values) geturl = url + "?" + data request = urllib2.Request(geturl) response = urllib2.urlopen(request) print response.read()將geturl打印出來,我們得到
http://xxxxxx.csdn.net/account/login?account=wdf880817@sina.com&password=xxxxxxxx這樣我們就得到了http://xxxxxx.csdn.net網頁中,賬號密碼分別為wdf880817@sina.com和xxxxxxxx的用戶的相關數據。
總結
以上是生活随笔為你收集整理的python-爬虫(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: URL(统一资源定位符)
- 下一篇: C++debug调试出现heap cor