1. 程式人生 > >完整的爬蟲程序爬取百度貼吧的圖片

完整的爬蟲程序爬取百度貼吧的圖片

列表 文檔 for tieba http ... 自增 num 圖片

#!/usr/bin/env python
#-- coding:utf-8 --

import os
import urllib
import urllib2
from lxml import etree

class Spider:
def init(self):
self.tiebaName = raw_input("請需要訪問的貼吧:")
self.beginPage = int(raw_input("請輸入起始頁:"))
self.endPage = int(raw_input("請輸入終止頁:"))

    self.url = ‘http://tieba.baidu.com/f‘
    self.ua_header = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1 Trident/5.0;"}

    #圖片編號
    self.userName = 1

def tiebaSpider(self):
    for page in range(self.beginPage, self.endPage + 1):
        pn = (page - 1) * 50 # page number
        word = {‘pn‘ : pn, ‘kw‘: self.tiebaName}

        word = urllib.urlencode(word) #轉換成url編碼格式(字符串)
        myUrl = self.url + "?" + word

        #示例:http://tieba.baidu.com/f? kw=%E7%BE%8E%E5%A5%B3 & pn=50
        #調用 頁面處理函數 load_Page
        #並且獲取頁面所有帖子鏈接,
        links = self.loadPage(myUrl)  # urllib2_test3.py

#讀取頁面內容
def loadPage(self, url):
    req = urllib2.Request(url, headers = self.ua_header)
    html = urllib2.urlopen(req).read()

    #解析html 為 HTML 文檔
    selector=etree.HTML(html)

    #抓取當前頁面的所有帖子的url的後半部分,也就是帖子編號
    #http://tieba.baidu.com/p/4884069807裏的 “p/4884069807”
    links = selector.xpath(‘//div[@class="threadlist_lz clearfix"]/div/a/@href‘)

    #links 類型為 etreeElementString 列表
    #遍歷列表,並且合並成一個帖子地址,調用 圖片處理函數 loadImage
    for link in links:
        link = "http://tieba.baidu.com" + link
        self.loadImages(link)

#獲取圖片
def loadImages(self, link):
    req = urllib2.Request(link, headers = self.ua_header)
    html = urllib2.urlopen(req).read()

    selector = etree.HTML(html)

    #獲取這個帖子裏所有圖片的src路徑
    imagesLinks = selector.xpath(‘//img[@class="BDE_Image"]/@src‘)

    #依次取出圖片路徑,下載保存
    for imagesLink in imagesLinks:
        self.writeImages(imagesLink)

#保存頁面內容
def writeImages(self, imagesLink):
    ‘‘‘
        將 images 裏的二進制內容存入到 userNname 文件中
    ‘‘‘

    print imagesLink
    print "正在存儲文件 %d ..." % self.userName
    #1. 打開文件,返回一個文件對象
    file = open(‘./images/‘ + str(self.userName)  + ‘.png‘, ‘wb‘)

    #2. 獲取圖片裏的內容
    images = urllib2.urlopen(imagesLink).read()

    #3. 調用文件對象write() 方法,將page_html的內容寫入到文件裏
    file.write(images)

    #4. 最後關閉文件
    file.close()

    #計數器自增1
    self.userName += 1

#模擬 main 函數
if name == "main":

# 首先創建爬蟲對象
mySpider = Spider()
# 調用爬蟲對象的方法,開始工作
mySpider.tiebaSpider()

完整的爬蟲程序爬取百度貼吧的圖片