Python3.x 网络爬虫之淘宝模特照片信息爬取

本文一部分代码参考网络大牛文章,在此深表感谢,如有侵犯请告知,谢谢。

本文主要是作者在学习过程中,对一些学习内容进行总结与练习,期望对后来学习者有一定的帮助。

使用的Python第三方库主要包括以下几个:

import urllib.request,re
import json
import os
import re
from multiprocessing import Pool

其中urllib作用是为了进行网络数据的请求,re负责正则表达式进行数据的提取,json进行一些字符串与json数据之间的转换,multiprocessing是用了其中的进程池,进行多进程下载相关数据与图片(该部分暂未完全实现)。

本实验爬取的目标网站为淘女郎网站(https://mm.taobao.com/search_tstar_model.htm?spm=5679.126488.640745.2.1b545b81eOvhp1点击打开链接)如下图所示:


根据该网页的信息爬取每一位模特的身份信息以及靓照,每一个模特详细页面如下图所示:


爬取结果如下所示,将每一位模特的文字信息及靓图进行下载,保存至本地,纯粹为了学习,切勿用于其它用途。


下面对整个项目进行介绍:

1、解析美女列表页,分析每一位美女的主页地址、以及每一位美女的基本信息,由于淘宝采用ajax数据夹菜机制,在获取的源码中不能获取美女列表,所有需要采用POST请求的方式,动态获取美女列表信息,代码如下:

    firsturl = "https://mm.taobao.com/tstar/search/tstar_model.do?_input_charset=utf-8"

    # 采取动态POST请求的方式请求美女列表
    send_data = {}
    send_data['q'] = r''
    send_data['viewFlag'] = r'A'
    send_data['sortType'] = r'default'
    send_data['searchStyle'] = r''
    send_data['searchRegion'] = r'city:'
    send_data['searchFansNum'] = r''
    send_data['currentPage'] = str(x)
    send_data['pageSize'] = r'100'
    # 必须对原始请求数据进行编码(作者在此处遇到了很大的麻烦)
    data1 = urllib.parse.urlencode(send_data)
    data1 = data1.encode('gbk')
    # 创建POST请求
    request = urllib.request.Request(url=firsturl, data=data1)
    # 发送请求获取服务器内容,即美女们的列表
    response = urllib.request.urlopen(request)
    text_obj = response.read().decode('gbk')
    # 返回的数据为JSon格式,但是初始为txt,使用JSon模块转换为json
    json_obj = json.loads(text_obj)
    # 获取json中的美奴主页地址列表
    girls = json_obj['data']['searchDOList']
    # 创建计数器,计算总共爬取多少位美女
    photocount = 0
    # 创建美女图片存储路径
    if not os.path.exists('GIRLS'):  # 判断GIRLS文件夹是否存在
        os.mkdir('GIRLS')
    for girl in girls:
        # 为每一个美女创建属于自己的文件夹
        temp = 'GIRLS/' + girl['realName']
        if not os.path.exists(temp):
            os.mkdir(temp)
        # 下载美女主页内的所有美女图片
        photocount = photocount + GetPhoto(temp, str(girl['userId']), girl)
        # break

2、获取每一位美女的主页地址,下载该地址网站中所有美女的图片,并将图片保存至本地文件夹,在此处作者将该步骤封装在一个下载函数内,代码如下:

#####根据图片ID下载图片,并保存到指定路径
def GetPhoto(path,id,girl):
    girlmessageurl='https://mm.taobao.com/self/aiShow.htm?spm=719.7763510.1998643336.2.HC43QM&userId='+id
    response=urllib.request.urlopen(girlmessageurl)
    texthtml=response.read().decode('gbk')
    #print(texthtml)
    #获取女孩信息,并进行存储'userId' (859049713592)

    with open('GIRLS/0.txt','a') as f:
        #f.write('姓名:'+girl['realName']+',ID:'+girl['userid']+',城市:'+girl['city']+',身高:'+girl['height']+',体重:'+girl['weight']+',QQ:'+qq+',weixin:'+weixin+',tele:'+tele)
        f.write('姓名:' + girl['realName'] + ',ID:' + str(girl['userId']) + ',城市:' + girl['city'] + ',身高:' + girl['height'] + ',体重:' + girl['weight'] + '\r\n')

    photos=re.findall(r'src="//(.*?)"/>',texthtml)
    i=1
    for photo in photos:
        #urllib.request.urlretrieve('http://img.alicdn.com/imgextra/i1/176817195/TB1a4uZHXXXXXbaXpXXXXXXXXXX_!!176817195-0-tstar.jpg','1.jpg')
        try:
            urllib.request.urlretrieve('http://'+photo,path+'/'+str(i)+'.jpg')
            print('正在下载美女('+girl['realName']+') 的第  '+str(i)+' 张美图')
            i=i+1
        except:
            print('图片下载失败')
    return i

3、在主函数中启动下载任务,并使用多进程进行快速下载(暂未实现),代码如下:

if __name__=='__main__':
    ##print('主函数')
    #pool=Pool(processes=3)
    #for i in range(1,3):
    #    pool.apply_async(main,(i,))
    #    print(str(i)+'  个进程加入')
    #print('kaishi')
    #pool.close()
    #pool.join()
    main()

4、至此整个程序完成,如需帮助联系 qq:3501353029;

淘宝:https://shop165937777.taobao.com/?spm=a230r.7195193.1997079397.2.xufnqZ

当前版本源码下载地址:https://download.csdn.net/download/zz_z123/10301513

Github下载地址:https://github.com/zzzz123zz/GetPhoto-of-model/tree/master






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值