爬蟲學習一系列:urllib2抓取網頁內容php
所謂網頁抓取,就是把URL地址中指定的網絡資源從網絡中讀取出來,保存到本地。咱們平時在瀏覽器中經過網址瀏覽網頁,只不過咱們看到的是解析過的頁面效果,而經過程序獲取的則是程序源代碼。咱們經過使用Python中urllib2來獲取網頁的URL資源,最簡單方法就是調用urlopen 方法。html
1 # coding : utf-8 2 import urllib2 3 import urllib 4 5 url = 'http://www.baidu.com' 6 res = urllib2.urlopen(url) 7 print res.read()
HTTP是基於請求和應答機制—客戶端提出請求,服務端提供應答。正則表達式
urllib2用一個Request對象來映射你提出的HTTP請求,經過調用urlopen來傳入Request對象,將返回一個相關請求response對象,這個應答對象如同一個文件對象,因此咱們能夠在Response對象中調用read()方法來讀取。瀏覽器
1 # coding : utf-8 2 import urllib2 3 import urllib 4 5 url = 'http://www.baidu.com' 6 request = urllib2.Request(url) 7 res = urllib2.urlopen(request) 8 print res.read()
在HTTP請求時,咱們還能夠發送data表單數據。通常的HTML表單,data須要編碼成標準造成,而後做爲data參數傳到Request對象。而相應的編碼工做就不能用urllib2來完成了,而是咱們urllib組件。網絡
1 import urllib 2 import urllib2 3 4 url = 'http://www.someserver.com/register.cgi' 5 6 values = {'name' : 'BaiYiShaoNian', 7 'localtion' : 'ChongQing', 8 'language' : 'Python', 9 } 10 11 data = urllib.urlencode(values) 12 req = urllib2.Request(url,data) 13 response = urllib2.urlopen(req) 14 the_page = response.read() 15 16 print the_page
可是我有一個疑問:就是這一份代碼並不能運行,我還不知道傳入數據表單的做用是什麼,或者咱們在抓cnblogs頁面時,傳入登陸的信息,是否是咱們就能夠登陸博客園了啊,因此在這裏請教一下大牛,先感謝了。學習
正則表達式,又稱爲正則表示法、常規表示法。正則表達式使用單個字符串來描述、匹配一系列符號某個句法規則的字符串。通俗的說,正則表達式就是在程序中定義了字符串的某種規則,而後咱們在網頁源代碼中找出符合這種規則的全部代碼語句,不符合的就淘汰不要。編碼
關於正則表達式的不少具體用法,我後面會邊學邊爲你們講解的,這裏先略過。url
咱們能夠經過Python爬蟲來獲取如下網頁中新聞標題和新聞的ID。spa
1 # -*- coding: utf-8 -*- 2 import urllib2 3 import re 4 5 # 1.獲取訪問頁面的HMTL 6 url = "http://www.nenu.edu.cn/newslist.php?cid=1" 7 8 response = urllib2.urlopen(url) 9 html = response.read() 10 # 2.根據正則表達式抓取特定內容 11 r = re.compile(r'<a href="intramural/content/news/(?P<ID>.{5}).*" target="_blank">(?P<Title>.+)</a>') 12 news = r.findall(html) 13 for i in range(len(news)): 14 ID = news[i][0] 15 title = news[i][1] 16 # data = data.decode('utf-8') 17 # title = title.decode('utf-8') 18 print title + " " + ID + " "
咱們運行這一份代碼看看結果是什麼樣的,是否已經成功獲取。