爬蟲學習一系列:urllib2抓取網頁內容

爬蟲學習一系列: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 + " "

 

咱們運行這一份代碼看看結果是什麼樣的,是否已經成功獲取。

 

相關文章
相關標籤/搜索