在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 抓取淘寶 MM 照片
綜述
Cookie 的使用
爬蟲基礎(chǔ)了解
計算大學(xué)本學(xué)期績點
抓取淘寶 MM 照片
爬蟲框架 Scrapy 安裝配置
模擬登錄淘寶并獲取所有訂單
Urllib 庫的高級用法
URLError 異常處理
正則表達式
Beautiful Soup 的用法
爬取糗事百科段子
爬取百度貼吧帖子
Urllib 庫的基本使用

抓取淘寶 MM 照片

福利啊福利,本次為大家?guī)淼捻椖渴亲ト√詫?MM 照片并保存起來,大家有沒有很激動呢?

本篇目標

  1. 抓取淘寶 MM 的姓名,頭像,年齡

  2. 抓取每一個MM的資料簡介以及寫真圖片

  3. 把每一個MM的寫真圖片按照文件夾保存到本地

  4. 熟悉文件保存的過程

URL 的格式

在這里我們用到的URL是 http://mm.taobao.com/json/request_top_list.htm?page=1,問號前面是基地址,后面的參數(shù)page是代表第幾頁,可以隨意更換地址。點擊開之后,會發(fā)現(xiàn)有一些淘寶MM的簡介,并附有超鏈接鏈接到個人詳情頁面。

我們需要抓取本頁面的頭像地址,MM 姓名,MM 年齡,MM 居住地,以及 MM 的個人詳情頁面地址。

抓取簡要信息

相信大家經(jīng)過上幾次的實戰(zhàn),對抓取和提取頁面的地址已經(jīng)非常熟悉了,這里沒有什么難度了,我們首先抓取本頁面的MM詳情頁面地址,姓名,年齡等等的信息打印出來,直接貼代碼如下

__author__ = 'CQC'
\# -*- coding:utf-8 -*-

import urllib
import urllib2
import re

class Spider:

    def __init__(self):
        self.siteURL = 'http://mm.taobao.com/json/request_top_list.htm'

    def getPage(self,pageIndex):
        url = self.siteURL + "?page=" + str(pageIndex)
        print url
        request = urllib2.Request(url)
        response = urllib2.urlopen(request)
        return response.read().decode('gbk')

    def getContents(self,pageIndex):
        page = self.getPage(pageIndex)
        pattern = re.compile('<div class="list-item".*?pic-word.*?<a href="(.*?)".*?<img src="(.*?)".*?<a class="lady-name.*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.S)
        items = re.findall(pattern,page)
        for item in items:
            print item[0],item[1],item[2],item[3],item[4]

spider = Spider()
spider.getContents(1)  

運行結(jié)果如下

http://wiki.jikexueyuan.com/project/python-crawler-guide/images/20.png" alt="" />

文件寫入簡介

在這里,我們有寫入圖片和寫入文本兩種方式

寫入圖片

\#傳入圖片地址,文件名,保存單張圖片
def saveImg(self,imageURL,fileName):
     u = urllib.urlopen(imageURL)
     data = u.read()
     f = open(fileName, 'wb')
     f.write(data)
     f.close()  

寫入文本

def saveBrief(self,content,name):
    fileName = name + "/" + name + ".txt"
    f = open(fileName,"w+")
    print u"正在偷偷保存她的個人信息為",fileName
    f.write(content.encode('utf-8'))  

創(chuàng)建新目錄

\#創(chuàng)建新目錄
def mkdir(self,path):
    path = path.strip()
    \# 判斷路徑是否存在
    \# 存在     True
    \# 不存在   False
    isExists=os.path.exists(path)
    \# 判斷結(jié)果
    if not isExists:
        \# 如果不存在則創(chuàng)建目錄
        \# 創(chuàng)建目錄操作函數(shù)
        os.makedirs(path)
        return True
    else:
        \# 如果目錄存在則不創(chuàng)建,并提示目錄已存在
        return False  

代碼完善

主要的知識點已經(jīng)在前面都涉及到了,如果大家前面的章節(jié)都已經(jīng)看了,完成這個爬蟲不在話下,具體的詳情在此不再贅述,直接帖代碼啦。

spider.py
__author__ = 'CQC'
\# -*- coding:utf-8 -*-

import urllib
import urllib2
import re
import tool
import os

\#抓取MM
class Spider:

    \#頁面初始化
    def __init__(self):
        self.siteURL = 'http://mm.taobao.com/json/request_top_list.htm'
        self.tool = tool.Tool()

    \#獲取索引頁面的內(nèi)容
    def getPage(self,pageIndex):
        url = self.siteURL + "?page=" + str(pageIndex)
        request = urllib2.Request(url)
        response = urllib2.urlopen(request)
        return response.read().decode('gbk')

    \#獲取索引界面所有MM的信息,list格式
    def getContents(self,pageIndex):
        page = self.getPage(pageIndex)
        pattern = re.compile('<div class="list-item".*?pic-word.*?<a href="(.*?)".*?<img src="(.*?)".*?<a class="lady-name.*?>(.*?)</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.S)
        items = re.findall(pattern,page)
        contents = []
        for item in items:
            contents.append([item[0],item[1],item[2],item[3],item[4]])
        return contents

   \#獲取MM個人詳情頁面
    def getDetailPage(self,infoURL):
        response = urllib2.urlopen(infoURL)
        return response.read().decode('gbk')

    \#獲取個人文字簡介
    def getBrief(self,page):
        pattern = re.compile('<div class="mm-aixiu-content".*?>(.*?)<!--',re.S)
        result = re.search(pattern,page)
        return self.tool.replace(result.group(1))

    \#獲取頁面所有圖片
    def getAllImg(self,page):
        pattern = re.compile('<div class="mm-aixiu-content".*?>(.*?)<!--',re.S)
        \#個人信息頁面所有代碼
        content = re.search(pattern,page)
        \#從代碼中提取圖片
        patternImg = re.compile('<img.*?src="(.*?)"',re.S)
        images = re.findall(patternImg,content.group(1))
        return images

    \#保存多張寫真圖片
    def saveImgs(self,images,name):
        number = 1
        print u"發(fā)現(xiàn)",name,u"共有",len(images),u"張照片"
        for imageURL in images:
            splitPath = imageURL.split('.')
            fTail = splitPath.pop()
            if len(fTail) > 3:
                fTail = "jpg"
            fileName = name + "/" + str(number) + "." + fTail
            self.saveImg(imageURL,fileName)
            number += 1

    \# 保存頭像
    def saveIcon(self,iconURL,name):
        splitPath = iconURL.split('.')
        fTail = splitPath.pop()
        fileName = name + "/icon." + fTail
        self.saveImg(iconURL,fileName)

    \#保存?zhèn)€人簡介
    def saveBrief(self,content,name):
        fileName = name + "/" + name + ".txt"
        f = open(fileName,"w+")
        print u"正在偷偷保存她的個人信息為",fileName
        f.write(content.encode('utf-8'))

    \#傳入圖片地址,文件名,保存單張圖片
    def saveImg(self,imageURL,fileName):
         u = urllib.urlopen(imageURL)
         data = u.read()
         f = open(fileName, 'wb')
         f.write(data)
         print u"正在悄悄保存她的一張圖片為",fileName
         f.close()

    \#創(chuàng)建新目錄
    def mkdir(self,path):
        path = path.strip()
        \# 判斷路徑是否存在
        \# 存在     True
        \# 不存在   False
        isExists=os.path.exists(path)
        \# 判斷結(jié)果
        if not isExists:
            \# 如果不存在則創(chuàng)建目錄
            print u"偷偷新建了名字叫做",path,u'的文件夾'
            \# 創(chuàng)建目錄操作函數(shù)
            os.makedirs(path)
            return True
        else:
            \# 如果目錄存在則不創(chuàng)建,并提示目錄已存在
            print u"名為",path,'的文件夾已經(jīng)創(chuàng)建成功'
            return False

    \#將一頁淘寶MM的信息保存起來
    def savePageInfo(self,pageIndex):
        \#獲取第一頁淘寶MM列表
        contents = self.getContents(pageIndex)
        for item in contents:
            #item[0]個人詳情URL,item[1]頭像URL,item[2]姓名,item[3]年齡,item[4]居住地
            print u"發(fā)現(xiàn)一位模特,名字叫",item[2],u"芳齡",item[3],u",她在",item[4]
            print u"正在偷偷地保存",item[2],"的信息"
            print u"又意外地發(fā)現(xiàn)她的個人地址是",item[0]
            \#個人詳情頁面的URL
            detailURL = item[0]
            \#得到個人詳情頁面代碼
            detailPage = self.getDetailPage(detailURL)
            \#獲取個人簡介
            brief = self.getBrief(detailPage)
            \#獲取所有圖片列表
            images = self.getAllImg(detailPage)
            self.mkdir(item[2])
            \#保存?zhèn)€人簡介
            self.saveBrief(brief,item[2])
            \#保存頭像
            self.saveIcon(item[1],item[2])
            \#保存圖片
            self.saveImgs(images,item[2])

    \#傳入起止頁碼,獲取MM圖片
    def savePagesInfo(self,start,end):
        for i in range(start,end+1):
            print u"正在偷偷尋找第",i,u"個地方,看看MM們在不在"
            self.savePageInfo(i)

\#傳入起止頁碼即可,在此傳入了2,10,表示抓取第2到10頁的MM
spider = Spider()
spider.savePagesInfo(2,10)  
tool.py
__author__ = 'CQC'
\#-*- coding:utf-8 -*-
import re

\#處理頁面標簽類
class Tool:
    \#去除img標簽,1-7位空格,&nbsp;
    removeImg = re.compile('<img.*?>| {1,7}|&nbsp;')
    \#刪除超鏈接標簽
    removeAddr = re.compile('<a.*?>|</a>')
    \#把換行的標簽換為\n
    replaceLine = re.compile('<tr>|<div>|</div>|</p>')
    \#將表格制表<td>替換為\t
    replaceTD= re.compile('<td>')
    \#將換行符或雙換行符替換為\n
    replaceBR = re.compile('<br><br>|<br>')
    \#將其余標簽剔除
    removeExtraTag = re.compile('<.*?>')
    \#將多行空行刪除
    removeNoneLine = re.compile('\n+')
    def replace(self,x):
        x = re.sub(self.removeImg,"",x)
        x = re.sub(self.removeAddr,"",x)
        x = re.sub(self.replaceLine,"\n",x)
        x = re.sub(self.replaceTD,"\t",x)
        x = re.sub(self.replaceBR,"\n",x)
        x = re.sub(self.removeExtraTag,"",x)
        x = re.sub(self.removeNoneLine,"\n",x)
        #strip()將前后多余內(nèi)容刪除
        return x.strip()  

以上兩個文件就是所有的代碼內(nèi)容,運行一下試試看,那叫一個酸爽啊

http://wiki.jikexueyuan.com/project/python-crawler-guide/images21.png" alt="" />

看看文件夾里面有什么變化

http://wiki.jikexueyuan.com/project/python-crawler-guide/images/22.png" alt="" />

http://wiki.jikexueyuan.com/project/python-crawler-guide/images/23.png" alt="" />

不知不覺,海量的MM圖片已經(jīng)進入了你的電腦,還不快快去試試看!!