上一篇Python抓取糗事百科网页信息以及源码下载

也是利用python抓取网页信息,轻车熟路,知道一个之后,轻轻松松就是实现啦。

page=1代表第一页淘女郎信息列表。

页面信息如下;

python 抓取视频地址是blob_python


页面整体的html代码如下:

python 抓取视频地址是blob_ide_02

代码效果如下:

python 抓取视频地址是blob_python_03

基本上可以把美眉的信息以及个人网址抓取到。其中的地址前面缺少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代码进行比对:

python 抓取视频地址是blob_python_04

仔细比对html和正则表达式部分,然后利用(.*?)这个表达式把有用信息进行分组得到想要获取的信息。每个圆括号对应元组的一个值。这里有六个圆括号,每一个元组有六个数据。

python 抓取视频地址是blob_html_05


这里对获取到的六个item数据进行输出。

还是要提醒一句,上面的内容对于我现在是有用的,如果当你看到这篇文章的时候,可能网页的html代码已经改变,则需要调整正则表达式的代码才能与网页进行匹配,进而获取有用的信息。

Github地址,在这里!