在這裏先給你們推薦一個網站:
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
輸出結果:
教程