淘女郎模特信息抓取教程

源码地址: cnsimo/mmtao

网址:https://0x9.me/xrh6z

 

判断一个页面是不是Ajax加载的方法:

查看网页源代码,查找网页中加载的数据信息,如果源代码中不显示,证明是Ajax加载。

如果是网站源代码中就包含要爬取的信息,那么就直接只用正则拿数据出来就行了

但是如果网页源码中没有,那么就是Ajax了,可以进行抓包找到获取数据的相关接口,操作如下(以爬取淘女郎美女信息为例):

一、初级

  1. 寻找API接口:获取模特列表。

如果使用的是Chrome的话,可以首先选中XHR来更快速的找出获取数据的API,如果在XHR里面没有再去JS里面一个个的寻找。

  1. 找到API的URL为:https://mm.taobao.com/alive/list.do

经过尝试,后面的参数都是可以去掉的,访问的时候默认page为1,所以如果要获取到所有页,需要使用for循环分别获取每一页的模特列表。

  1. 然后打开一个模特的详情页面,使用红框圈住的地方都是我们要获取到的数据
  1. 打开开发者工具,然后进行和刚刚相似的抓包操作。首先选中XHR进行快速的找出获取数据的API接口,可以很容易的找到这个地址:

二、中级

下面我们抓取所有的妹子数据到文件中:

  1. 不难找到获取后台数据的地址为:https://mm.taobao.com/tstar/search/tstar_model.do?_input_charset=utf-8
  1. 但是我们发现在地址的GET参数中只有一个_input_charset=utf-8,而且默认获取的是第一页的妹子列表,正常情况下我们在GET参数中可以看到page=1类似的项,但这里没有,那么很显然它没有用GET就肯定用了POST,结果一看发现确实是这样子的。
  1. 那么,这就简单了,使用requests库post请求数据,将请求来的json数据保存成表格,这项工作就结束了。

下面贴出代码:

  1. headers.py   -----------这个文件中保存了一些常用的headers头信息

#!/usr/bin/env python

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

# @Date    : 2018-02-02 19:40:50

# @Author  : cnsimo (2020745751@qq.com)

# @Link    : http://www.scriptboy.com

# @Version : 1.0

import random

uaStr = '''Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50

Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)

Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1

Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11

Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)

MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'''

def getUA():

uaList = uaStr.split('\n')

length = len(uaList)

return uaList[random.randint(0,length-1)]

if __name__ == '__main__':

print(getUA())

  1. mmtao.py  ------------主程序

#!/usr/bin/env python

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

# @Date    : 2018-02-02 23:11:08

# @Author  : cnsimo (2020745751@qq.com)

# @Link    : http://www.scriptboy.com

# @Version : 1.0

from myheaders import getUA

import requests

import re

import time

import csv

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

mmUrl = ''

# 获得总共的页数

def getTotalPage():

headers = {'User-Agent': getUA()}

req = requests.get(mmListUrl, headers=headers)

res = req.json()

return res['data']['totalPage']

# 获取列表的函数

def getMMList(cpage = 1):

headers = {'User-Agent': getUA()}

payload = {'currentPage': cpage, 'pageSize': 100, 'sortType': 'default', 'viewFlag': 'A'}

req = requests.post(mmListUrl, headers=headers, data=payload)

res = req.json()

if 'data' in res.keys():

return res['data']['searchDOList']

else:

return

if __name__ == '__main__':

totalPage = getTotalPage()

with open(r'mmlist.csv', 'w+', newline='') as fs:

count = 1

cpage = 1

csvwriter = csv.writer(fs, dialect='excel')

page1 = getMMList(cpage)

csvwriter.writerow(page1[0].keys())

print('正在处理第%s页。。。' % cpage)

for mm in page1:

csvwriter.writerow(mm.values())

print(str(count)+' ', end='')

count += 1

print()

while cpage < totalPage:

cpage += 1

print('正在处理第%s页。。。' % cpage)

time.sleep(2)

mmList = getMMList(cpage)

if not mmList:

break

for mm in mmList:

csvwriter.writerow(mm.values())

print(str(count)+' ', end='')

count += 1

print('')

print('所有数据处理完毕!')

导出的数据如下:

三、高级

虽然说数据已经出来了,但是对模特的描述还是不够具体,想要更具体的数据得通过他们的模特卡获得,例如:https://mm.taobao.com/self/model_info.htm?spm=719.7800510.a312r.22.bKq7m9&user_id=277949921

这里的信息要更加全面一些,所以我们从列表也只获取模特ID,然后通过模特卡来拿到更加详细的信息。

  1. 首先分析模特卡页面,还是通过开发者工具,我们很容易找到了获取数据的URL:https://mm.taobao.com/self/info/model_info_show.htm?user_id=277949921
  1. 这次响应的数据并不是格式的,不过没有关系,我们还可以使用正则表达式将信息匹配出来。
  2. 这样我们仅仅比刚才编写的程序多了一个分析模特卡的步骤,很快就能写出来这个代码了。

代码详见:压缩文件中 mmtao_plus.py

源码地址: cnsimo/mmtao

Ajax异步信息抓取方式的更多相关文章

  1. 15-分析Ajax请求并抓取今日头条街拍美图

    流程框架: 抓取索引页内容:利用requests请求目标站点,得到索引网页HTML代码,返回结果. 抓取详情页内容:解析返回结果,得到详情页的链接,并进一步抓取详情页的信息. 下载图片与保存数据库:将 ...

  2. 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23866427 今天又遇到一个网页数据抓取的任务,给大家分享下. 说道网页信息抓取 ...

  3. 分析Ajax请求并抓取今日头条街拍美图

    项目说明 本项目以今日头条为例,通过分析Ajax请求来抓取网页数据. 有些网页请求得到的HTML代码里面并没有我们在浏览器中看到的内容.这是因为这些信息是通过Ajax加载并且通过JavaScript渲 ...

  4. Atitit.web的自动化操作与信息抓取 attilax总结

    Atitit.web的自动化操作与信息抓取 attilax总结 1. Web操作自动化工具,可以简单的划分为2大派系: 1.录制回放 2.手工编写0 U' z; D! s2 d/ Q! ^1 2. 常 ...

  5. 网页信息抓取 Jsoup的不足之处 httpunit

    今天又遇到一个网页数据抓取的任务,给大家分享下. 说道网页信息抓取,相信Jsoup基本是首选的工具,完全的类JQuery操作,让人感觉很舒服.但是,今天我们就要说一说Jsoup的不足. 1.首先我们新 ...

  6. 网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp)

    转自原文 网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp) 最近在弄网页爬虫这方面的,上网看到关于htmlagilitypack搭配scrapysharp的文章,于是决 ...

  7. 接口测试——fiddler对soapui请求返回信息抓取

    原文:接口测试——fiddler对soapui请求返回信息抓取 背景:接口测试的时候,需要对接口的请求和返回信息进行查阅或者修改请求信息,可利用fiddler抓包工具对soapui的请求数据进行抓取或 ...

  8. 汽车之家汽车品牌Logo信息抓取 DotnetSpider实战[三]

    一.正题前的唠叨 第一篇实战博客,阅读量1000+,第二篇,阅读量200+,两篇文章相差近5倍,这个差异真的令我很费劲,截止今天,我一直在思考为什么会有这么大的差距,是因为干货变少了,还是什么原因,一 ...

  9. Python网络爬虫(Get、Post抓取方式)

    简单的抓取网页 import urllib.request url="http://google.cn/" response=urllib.request.urlopen(url) ...

随机推荐

  1. java_web学习(四) Date的理解与应用

    1.日期 1.1 日期的本质: 是一个长整型long,最小单位是毫秒 1.2 日期的格式: 本次运用子类simpleDateformat定义格式 1.3 日期的运算 本次运用calendar类来的ad ...

  2. 降维之pca算法

    pca算法: 算法原理: pca利用的两个维度之间的关系和协方差成正比,协方差为0时,表示这两个维度无关,如果协方差越大这表明两个维度之间相关性越大,因而降维的时候, 都是找协方差最大的. 将XX中的 ...

  3. CTF---Web入门第一题 what a fuck!这是什么鬼东西?

    what a fuck!这是什么鬼东西?分值:10 来源: DUTCTF 难度:易 参与人数:7942人 Get Flag:3358人 答题人数:3475人 解题通过率:97% what a fuck ...

  4. AtCoder Regular Contest 076

    在湖蓝跟衡水大佬们打的第二场atcoder,不知不觉一星期都过去了. 任意门 C - Reconciled? 题意:n只猫,m只狗排队,猫与猫之间,狗与狗之间是不同的,同种动物不能相邻排,问有多少种方 ...

  5. hdu_4463(最小生成树)

    hdu_4463(最小生成树) 标签: 并查集 题目链接 题意: 求一个必须包含一条路径的最小生成树 题解: 把那条边初始化成0 保证这条边一定会被选 #include<cstdio> # ...

  6. 简单的面向对象(OO)练习

    学生设备管理系统: 每个学校都有很多班级,每个班级都有很多设备.(设备可以更新)每个设备都有购买价格,每种设备都有折旧率(如每年折旧10%) 按班级进行统计,指定的班级有多少的设数量? 按班级进行统计 ...

  7. ionic2 安装与cordova打包

    1.安装: cnpm install -g cordova ionic ionic start name cd name cnpm install   2.环境配置: http://www.cnblo ...

  8. 小白的Python之路 day5 configparser模块的特点和用法

    configparser模块的特点和用法 一.概述 主要用于生成和修改常见配置文件,当前模块的名称在 python 3.x 版本中变更为 configparser.在python2.x版本中为Conf ...

  9. 一致性哈希java实现

    值得注意的点 哈希函数的选择 murmur哈希函数 该函数是非加密型哈希,性能高,且发生哈希碰撞的概率据说很低 md5 SHA 可以选择guava包,提供了丰富的哈希函数的API 支持虚拟节点+加权, ...

  10. 使用vue框架运行npm run dev 时报错解决

    使用使用vue框架运行npm run dev 时报错 如下: 原因: localhost:8080 有可能其他软件占用了,导致其他问题的出现 我们可以动态修改地址 解决: 进入项目文件的config文 ...