mmtao

Ajax数据的爬取(淘女郎为例)

如有疑问,转到 Wiki

淘女郎模特抓取教程

网址: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 数据保存成表格,这项工作就结束了。

下面贴出代码:

a. myheaders.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())

b. 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

  2. 这次响应的数据并不是格式的,不过没有关系,我们还可以使用正则表达式将信息匹配出来。
  3. 这样我们仅仅比刚才编写的程序多了一个分析模特卡的步骤,很快就能写出来这个代码了。

部分数据截图:

代码详见: mmtao_plus.py ,如有疑问,转到 Wiki

Ajax数据的爬取(淘女郎为例)的更多相关文章

  1. 爬虫--selenuim和phantonJs处理网页动态加载数据的爬取

    1.谷歌浏览器的使用 下载谷歌浏览器 安装谷歌访问助手 终于用上谷歌浏览器了.....激动 问题:处理页面动态加载数据的爬取 -1.selenium -2.phantomJs 1.selenium 二 ...

  2. 爬虫开发6.selenuim和phantonJs处理网页动态加载数据的爬取

    selenuim和phantonJs处理网页动态加载数据的爬取阅读量: 1203 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/ ...

  3. PYTHON 爬虫笔记九:利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集(实战项目二)

    利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集 目标站点分析 今日头条这类的网站制作,从数据形式,CSS样式都是通过数据接口的样式来决定的,所以它的抓取方法和其他网页的抓取方 ...

  4. (五)selenuim和phantonJs处理网页动态加载数据的爬取

    selenuim和phantonJs处理网页动态加载数据的爬取 一 图片懒加载 自己理解------就是在打开一个页面的时候,图片数量特别多,图片加载会增加服务器的压力,所以我们在这个时候,就会用到- ...

  5. 使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取

    web scraper 下载:Web-Scraper_v0.2.0.10 使用 Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬 ...

  6. Python_记一次网站数据定向爬取实现

    记一次网站数据定向爬取实现 by:授客 QQ:1033553122 测试环境: Python版本:Python 3.4 Win7 请勿用于商业及非法用途,仅供学习研究用,否则后果自负 数据爬取场景 如 ...

  7. python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制

    CrawlSpider实现的全站数据的爬取 新建一个工程 cd 工程 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com 连接提取器Link ...

  8. Python爬虫之爬取淘女郎照片示例详解

    这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...

  9. APP数据的爬取

    前言 App 的爬取相比 Web 端爬取更加容易,反爬虫能力没有那么强,而且数据大多是以 JSON形式传 输的,解析更加简单.在 Web 端,我们可以通过浏览器的开发者工具监听到各个网络请求和响应过程 ...

随机推荐

  1. backbone 要点知识整理

    1.backbone 是个mvc的库,官方文档说它是个库,而不是个框架.库和框架的区别就是,库只是个工具,方便你的项目应用,不会改变你的项目结构,而框架会有一套自己的机制,项目需要遵循框架的设计来实现 ...

  2. 【机器学习学习】SKlearn + XGBoost 预测 Titanic 乘客幸存

    Titanic 数据集是从 kaggle下载的,下载地址:https://www.kaggle.com/c/titanic/data 数据一共又3个文件,分别是:train.csv,test.csv, ...

  3. 【JavaScript_DOM 百度搜索框】

    今天给大家带来的事一个简单的百度的历史搜索框,大家在搜索东西的时候,百度会自动给你显示你最近搜索过的一些东西,那这个拿js怎么做呢? 我们一起来学习吧 这是一个HTML页面: <!DOCTYPE ...

  4. bzoj:3085: 反质数加强版SAPGAP

    Description 先解释一下SAPGAP=Super AntiPrime, Greatest AntiPrime(真不是网络流),于是你就应该知道本题是一个关于反质数(Antiprime)的问题 ...

  5. HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  6. HDU 1159 Common Subsequence【dp+最长公共子序列】

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. JAVA多线程之CountDownLatch

    前序: 上周测试给开发的同事所开发的模块提出了一个bug,并且还是偶现. 经过仔细查看代码,发现是在业务中启用了多线程,2个线程同时跑,但是新启动的2个线程必须保证一个完成之后另一个再继续运行,才能消 ...

  8. ajax跳转到新的jsp页面

    ajax可以实现局部刷新页面,即在不刷新整个页面的情况下更新页面的局部信息. 项目中遇到一个问题:在用户列表也,当点击某个按钮时需要去查询用户的信息,查询成功跳转到用户详情界面:查询失败,则在原页面弹 ...

  9. 解决导入MySQL数据库提示"Unknown character set: 'utf8mb4'"错误

    今天老左在准备迁移公司一个客户的网站到另外一台服务器中,根据正常的操作备份最新的网页文件和导出数据库,然后在新服务器中创建站点和数据库wget迁移进去解压.因为数据库比较小,所以直接用PHPMyAdm ...

  10. IOS学习:隐藏键盘方法

    1.点击界面的其它空白地方隐藏      由于UIViewController是继承自UIResponder的,所以可以覆写- (void)touchesBegan:(NSSet *)touches ...