python 爬取淘宝模特信息

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> python 爬取淘宝模特信息

点击上方”python宝典”,关注获取python全套视频,

技术文章第一时间送达!

通过本篇博文,介绍一下我对指定信息进行爬取的时候的思路,顺便贴一下代码。

一、首先获取想要爬取的网站的url链接的规则变化

python 爬取淘宝模特信息 python 爬取淘宝模特信息

可以看出来该网站页面的url结构简单,变化的只是https://mm.taobao.com/json/request_top_list.htm?page= page的值

二、对网站页面的DOM树的结构进行分析,方便我们获取我们想要的内容信息,

我写了个简单的网页分析脚本analyze.py:用来输出DOM树,方便我后面做筛选.


# -*- coding:utf-8 -*-

#模块导入
import requests
from bs4 import BeautifulSoup

#想要分析的网站页面
url = "http://mm.taobao.com/json/request_top_list.htm?page=1"
response = requests.get(url)
response.encoding = 'gb2312'
html = response.text 

#使用lxml解析器进行处理
soup = BeautifulSoup(html, 'lxml') 
#把DOM树结构输出
print soup.prettify()

html


html
 body
  div class="list-item"
   div class="personal-info"
    div class="pic-word"
     div class="pic s60"
      a class="lady-avatar" href="//mm.taobao.com/687471686.htm" target="_blank"
       img alt="" height="60" src="//gtd.alicdn.com/sns_logo/i2/TB1XZ1PQVXXXXaJXpXXSutbFXXX.jpg_60x60.jpg" width="60"/
      /a
     /div
     p class="top"
      a class="lady-name" href="//mm.taobao.com/self/model_card.htm?user_id=687471686" target="_blank"
       田媛媛
      /a
      em
       strong
        27
       /strong
       岁
      /em
      span
       广州市
      /span
      span class="friend-follow J_FriendFollow" data-custom="type=14&app_id=12052609" data-group="" data-userid="687471686"
       加关注
      /span
     /p
     p
      em
       平面模特 设计师 T台、展模特
      /em
      em
       strong
        164433
       /strong
       粉丝
      /em
     /p
    /div
    div class="pic w610"
     a href="//mm.taobao.com/photo-687471686-10000854046.htm?pic_id=10003369435" target="_blank"
      img data-ks-lazyload="//img.alicdn.com/imgextra/i4/687471686/TB1TORaKFXXXXc0aXXXXXXXXXXX_!!2-tstar.png" src="//assets.alicdn.com/kissy/1.0.0/build/imglazyload/spaceball.gif"/
     /a
    /div
   /div
   div class="list-info"
    div class="popularity"
     dl
      dt
       1
      /dt
      dd
       span
        总积分:
       /span
       60742
      /dd
     /dl
    /div
    ul class="info-detail"
     li
      新增积分:
      strong
       529
      /strong
     /li
     li
      好评率:
      strong
       90.0
      /strong
      %
     /li
     li
      导购照片:
      strong
       888
      /strong
      张
     /li
     li
      签约数量:
      strong
       406
      /strong
      次
     /li
    /ul
    p class="description"
     你还在为上下衣物搭配而苦恼么..你还在为出门不知道穿什么而烦躁么 ..vvip女神教你一键(_)美美哒 ! 不需要过多的搭配.不需要为不协调而苦恼 ..我们为你选好让你出门美美哒!!
    /p
    div class="J_LikeIt" photo-favor-count="0" photo-id="687471686_10003369435"
     div class="mm-photolike"
      a class="mm-photolike-btn" data-count="0" data-targetid="687471686_10003369435" href="javascript:void(0)"
       喜欢
      /a
      var class="mm-photolike-count radius-3"
       0
      /var
     /div
    /div
   /div
  /div

  input id="J_Totalpage" type="hidden" value="4316"/
 /body
/html

分析的时候我们其实可以只截取一个人的信息,因为输出太多。每个人的结构都是固定的,方便分析!

三、程序代码:


# -*- coding:utf-8 -*-

import requests
from bs4 import BeautifulSoup
import sys
import re
reload(sys)
sys.setdefaultencoding('utf-8')


for num in range(1,4300):
    try:
        URL = 'http://mm.taobao.com/json/request_top_list.htm?page=%d' % num
        #print "现在爬取的网站url是:" + URL
        response = requests.get(URL) 
        response.encoding = 'gb2312'
        text = response.text 
        soup = BeautifulSoup(text, 'lxml') 
        for model in soup.select(".list-item"):
            try:
                model_id =  model.find('span', {'class': 'friend-follow J_FriendFollow'})['data-userid']
                json_url = "http://mm.taobao.com/self/info/model_info_show.htm?user_id=%d" % int(model_id)
                response_json = requests.get(json_url)
                response_json.encoding = 'gb2312'
                text_response_json = response_json.text
                soup_json = BeautifulSoup(text_response_json, 'lxml')

                print "***********************************" + model.find('a', {'class': 'lady-name'}).string + "*********************************"
                print "模特的名字:" + model.find('a', {'class': 'lady-name'}).string
                print "模特的年龄:"+ model.find('p', {'class': 'top'}).em.strong.string
                print "生日:" + soup_json.find('li', {'class': 'mm-p-cell-left'}).span.string
                blood =  soup_json.find_all('li', {'class': 'mm-p-cell-right'})[1].span.string
                if blood is None:
                    blood = "无"
                print "血型:" + blood
                print "学校/专业:" + soup_json.find_all('li')[5].span.string
                print "身高:" + soup_json.find('li', {'class': 'mm-p-small-cell mm-p-height'}).p.string
                print "体重:" + soup_json.find('li', {'class': 'mm-p-small-cell mm-p-weight'}).p.string
                print "三围:" + soup_json.find('li', {'class': 'mm-p-small-cell mm-p-size'}).p.string
                print "罩杯:" + soup_json.find('li', {'class': 'mm-p-small-cell mm-p-bar'}).p.string
                print "鞋码:" + soup_json.find('li', {'class': 'mm-p-small-cell mm-p-shose'}).p.string
                print "模特所在地:"+ model.find('p', {'class': 'top'}).span.string
                print "模特的id:"+ model.find('span', {'class': 'friend-follow J_FriendFollow'})['data-userid']
                print "模特的标签:"+ model.find_all('p')[1].em.string
                print "模特的粉丝数:"+ model.find_all('p')[1].strong.string
                print "模特的排名:"+ [text for text in model.find('div', {'class': 'popularity'}).dl.dt.stripped_strings][0]
                print model.find('ul', {'class': 'info-detail'}).get_text(" ",strip=True)
                print "模特的个人资料页面:" +"http:"+ model.find('a', {'class': 'lady-name'})['href']                                
                print "模特的个人作品页面:" +"http:"+ model.find('a', {'class': 'lady-avatar'})['href']
                print "模特的个人头像:" + "http:" + model.find('img')['src']
                print "***********************************" + model.find('a', {'class': 'lady-name'}).string + "*********************************"
                print "n"

            except:
                print "error"
    except:
        print num + "page is error"

四、数据有差不多三万条 所以我截取部分信息:

python 爬取淘宝模特信息

总结:写的这篇博客整个程序的开发的思路的整个梳理。用到requests和beautiful这俩库。
希望对想做爬虫开发的人有点帮助。在我看来 思路很重要!


原文链接
http://blog.51cto.com/9399369/1953581
python 爬取淘宝模特信息

识别图中二维码,欢迎关注python宝典

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> python 爬取淘宝模特信息


 上一篇
python实现明星专家系统,刷脸识人。 python实现明星专家系统,刷脸识人。
点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 其实一直对电影里面的对×××进行人脸匹配然后,刷出来×××信息很感兴趣,今天晚上一时兴起,就搞了一把小的。 理论上:你可以建立一个你感兴趣的百万级的数据库
2021-04-05
下一篇 
为什么要分表和分区? 为什么要分表和分区?
点击上方”python宝典”,关注获取python全套视频, 技术文章第一时间送达! 为什么要分表和分区?日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时
2021-04-05