python-27:如何獲取多個頁面的源碼

在這裏先給你們推薦一個網站:
http://www.tutorialspoint.com/python/
這是一個英文的網站,如今也是時候開始看看這些英文的文檔了,這個文檔是python的一個簡短的教程,會包含一些函數原型,我是在查詢函數原型的時候看到的

閒話很少說,咱們再來看看極視界的網址
html

http://product.yesky.com/more/506001_31372_photograph_1.shtml
python

這個photograph_1,引發了個人注意,它是否是還有不少頁,既然說到了就來試一下
函數

http://product.yesky.com/more/506001_31372_photograph_2.shtml
網站

這個頁面也是能夠打開的,那麼問題來了,總共有多少頁呢?
這個還真不知道,可是我在想着怎麼能獲取前面十頁網頁的源碼,或許我應該說得再具體一點
我想要看看前面10頁一共有多少相冊,並把相冊名字輸出出來,這須要兩個步驟
1. 爬取前面10頁的網頁源碼
2. 使用RE將相冊名字獲取出來

使用RE相信已經很熟練了,那就來講說怎麼爬取前面10頁的網頁代碼吧

首先我得想一個辦法把網址當中的1,2,3......在程序中實現自動替換,那麼我第一步應該嘗試怎麼能依次輸出1到10這幾個數字,上網去查發現有好多種方法,有使用循環,使用遍歷的方法,可是我更加傾向於使用range()這個函數,你們能夠去查查range()函數的用法,這裏不作過多的說明,仍是那句話,多看幾個網頁,會有更多收穫
編碼

 range()函數的參數
1. start:計數從start開始。默認是從0開始。例如range(5)等價於range(0, 5);
2. end:計數到end結束,但不包括end.例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
3. scan:每次跳躍的間距,默認爲1,例如:range(0, 5,2)是[0,2,4]

好了,使用range()函數和字符串的拼接,咱們大概能夠實現這個功能,試試看吧
url

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = '217小月月坑'

# 將url拆成兩部分,在這個部分的後面加上頁數便可訪問相應的頁面
url_head = 'http://product.yesky.com/more/506001_31372_photograph_'

# 遍歷 range()列表裏面的元素,因爲range()不包含結束的數值,因此咱們要獲取
# 10頁,這個end就要寫成11
for i in range(1,11):
    url = url_head+str(i)+'.shtml'    
    print url

輸出結果:
code


把這個功能加到咱們原來的代碼中應該是這樣的
htm

#!/usr/bin/env python
# -*- coding:UTF-8 -*-
__author__ = '217小月月坑'

import urllib2
import re

url_head = 'http://product.yesky.com/more/506001_31372_photograph_'
user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0'
headers = {'User-Agent':user_agent}

try:
    # 設置第1頁到第10頁的網址
    for i in range(1,11):
        url = url_head+str(i)+'.shtml'
        print url
        request = urllib2.Request(url,headers=headers)
        response = urllib2.urlopen(request)
        # 對獲取的網頁源碼進行編碼
        conents = response.read().decode("gbk")
        # 使用RE獲取每一頁的相冊主頁和相冊名字
        pattern = re.compile(r'<dt><a href="(.*?)" title="(.*?)"',re.S)
        items = re.findall(pattern,conents)
        for item in items:
            print item[0],item[1]
except urllib2.URLError,e:
    if hasattr(e,"code"):
        print e.code
    if hasattr(e,"reason"):
        print e.reason

輸出結果:
教程

相關文章
相關標籤/搜索