1. 程式人生 > >冷笑話Python爬蟲1.1

冷笑話Python爬蟲1.1

頁面內容在不斷變化,如此程式不能正常執行,請自行修改正則表示式進行正確匹配!該程式碼只提供學習,為了避免使用不當,引起不必要麻煩,把程式碼中的Url刪掉。

# -*- coding:utf-8 -*-
#--------------------------------------------------
#   程式:冷笑話爬蟲
#   版本:1.1
#   作者:執劍天涯
#   日期:2016-08-12
#   版本:Python 2.7.7
#   操作:點選回車鍵,點選q鍵
#   功能:輸出一個冷笑話作者,內容,點贊數,q退出程式
#--------------------------------------------------


import urllib
import urllib2
import re

page = 1  #中間變數,糗百頁數
num = 1  #中間變數,每一頁段子個數

def getPageItems(page):
    url = '網站的Url' + str(page)  #資源定位
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = { 'User-Agent' : user_agent }  

    try:
        request = urllib2.Request(url,headers = headers)
        response = urllib2.urlopen(request)
#       print response.read()
    except urllib2.URLError, e:
        if hasattr(e,"code"):
            print e.code
        if hasattr(e,"reason"):
            print e.reason

    content = response.read().decode('utf-8')
    pattern = re.compile('\<h2\>(.*?)\<\/h2\>.*?class\=\"content\"\>(.*?)\<\/div\>.*?img\ssrc\=\"(.*?)\".*?stats\-vote\"\>.*?\>(.*?)\<',re.S)  #正則表示式,匹配出文欄位子內容
    items = re.findall(pattern,content)  #匹配出段子來
    return items

while True:
    items = getPageItems(page)
    print u'第%d頁\t本頁段子數量:%d' %(page,len(items))
       
    for item in items:
        print u'正在讀取糗百,按回車檢視新段子,按Q退出...'
        input = raw_input()  
        if input == 'q':  #若輸入q,則停止程式
            quit(0)
        haveImg = re.search('img',item[2])
        if not haveImg:  #找出不含圖片的段子
            replaceBR = re.compile('<br/>')  #html換行符
            content = re.sub(replaceBR,'\n',item[1])  #替換換行符號
            print u'本頁第%s個段子\t作者:%s\n內容:%s\n點贊:%s' %(num,item[0],content,item[3])  #列印段子
            num += 1  #段子個數加1
    num = 1  #段子個數初始化
    page += 1  #頁碼加1