本篇目标
1.抓取淘寶MM的姓名,頭像,年齡
2.抓取每一個MM的資料簡介以及寫真圖檔
3.把每一個MM的寫真圖檔按照檔案夾儲存到本地
4.熟悉檔案儲存的過程
1.URL的格式
在這裡我們用到的URL是 http://mm.taobao.com/json/request_top_list.htm?page=1,問号前面是基位址,後面的參數page是代表第幾頁,可以随意更換位址。點選開之後,會發現有一些淘寶MM的簡介,并附有超連結連結到個人詳情頁面。
另外要注意:光理論是不夠的。這裡順便免費送大家一套2020最新python入門到進階項目實戰視訊教程,可以去小編的Python交流.裙 :七衣衣九七七巴而五(數字的諧音)轉換下可以找到了,還可以跟老司機交流讨教!
我們需要抓取本頁面的頭像位址,MM姓名,MM年齡,MM居住地,以及MM的個人詳情頁面位址。
2.抓取簡要資訊
相信大家經過上幾次的實戰,對抓取和提取頁面的位址已經非常熟悉了,這裡沒有什麼難度了,我們首先抓取本頁面的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('
class="lady-name.*?>(.*?).*?(.*?).*?(.*?)',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)
運作結果如下:
2.檔案寫入簡介
在這裡,我們有寫入圖檔和寫入文本兩種方式
1)寫入圖檔
#傳入圖檔位址,檔案名,儲存單張圖檔
def saveImg(self,imageURL,fileName):
u = urllib.urlopen(imageURL)
data = u.read()
f = open(fileName, 'wb')
f.write(data)
f.close()
2)寫入文本
def saveBrief(self,content,name):
fileName = name + "/" + name + ".txt"
f = open(fileName,"w+")
print u"正在偷偷儲存她的個人資訊為",fileName
f.write(content.encode('utf-8'))
3)建立新目錄
#建立新目錄
def mkdir(self,path):
path = path.strip()
# 判斷路徑是否存在
# 存在 True
# 不存在 False
isExists=os.path.exists(path)
# 判斷結果
if not isExists:
# 如果不存在則建立目錄
# 建立目錄操作函數
os.makedirs(path)
return True
else:
# 如果目錄存在則不建立,并提示目錄已存在
return False
3.代碼完善
主要的知識點已經在前面都涉及到了,如果大家前面的章節都已經看了,完成這個爬蟲不在話下,具體的詳情在此不再贅述,直接帖代碼啦。
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()
#擷取索引頁面的内容
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('
class="lady-name.*?>(.*?).*?(.*?).*?(.*?)',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('
(.*?)