上一篇Python抓取糗事百科网页信息以及源码下载
也是利用python抓取网页信息,轻车熟路,知道一个之后,轻轻松松就是实现啦。
page=1代表第一页淘女郎信息列表。
页面信息如下;
页面整体的html代码如下:
代码效果如下:
基本上可以把美眉的信息以及个人网址抓取到。其中的地址前面缺少https:,网址加上这个https:就可以了。
但是淘宝牛掰,把网址都使用了安全协议,需要登录认证之后才可以到页面信息中。现在还没有做登录之后的功能,所以目前仅仅把美眉的个人信息以及网址抓取到了。研究好利用python登录的功能之后,在把淘女郎的更加详细的信息以及海量图片抓取到。然后再更新本博客。
整个代码还是比较简单的。
#coding:utf-8
__author__ = 'CQC'
import re
import urllib2
import tool
#抓取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('<div class="list-item".*?pic-word.*?'+
'<a href="(.*?)".target=.*?<img src="(.*?)".alt.*?'+
'<a class="lady-name".href="(.*?)".target=.*?>(.*?)'+
'</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],item[5]])
return contents
#将一页淘宝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]年龄,item[5]居住地
print u"发现一位模特,名字叫",item[3],u"芳龄",item[4],u",她在",item[5]
print u"正在偷偷地保存",item[3],"的信息"
print u"又意外地发现她的个人地址是",item[0] #这个地址需要登录
print u"名字对应的个人信息地址是",item[2] #这个地址有用
#个人详情页面的URL
detailURL = item[0]
print 'detailURL=https:%s' %detailURL
def savePagesInfo(self,start,end):
for i in range(start,end+1):
print u"正在偷偷寻找第",i,u"个地方,看看MM们在不在"
self.savePageInfo(i)
#传入起止页码即可,在此传入了1,10,表示抓取第1到10页的MM
spider = Spider()
spider.savePagesInfo(1,10)
其中关键的部分还是正则表达式部分:
# 这里获取六条信息 个人信息网址,头像图片地址,美眉个人信息页地址,美眉名字,年龄,居住地址
pattern = re.compile('<div class="list-item".*?pic-word.*?'+
'<a href="(.*?)".target=.*?<img src="(.*?)".alt.*?'+
'<a class="lady-name".href="(.*?)".target=.*?>(.*?)'+
'</a>.*?<strong>(.*?)</strong>.*?<span>(.*?)</span>',re.S)
这里需要对照网页的html代码进行比对:
仔细比对html和正则表达式部分,然后利用(.*?)这个表达式把有用信息进行分组得到想要获取的信息。每个圆括号对应元组的一个值。这里有六个圆括号,每一个元组有六个数据。
这里对获取到的六个item数据进行输出。
还是要提醒一句,上面的内容对于我现在是有用的,如果当你看到这篇文章的时候,可能网页的html代码已经改变,则需要调整正则表达式的代码才能与网页进行匹配,进而获取有用的信息。