Ethical Hackers潘森sibada技术教程

Python爬虫学习(七)爬取淘女郎

2017-08-22  本文已影响1018人  弃用中
先来一波福利 扒图结果

今天,想用一个实例说明一些关于Ajax的知识,至于例子嘛,就是爬取淘女郎。地址:https://mm.taobao.com/search_tstar_model.htm?spm=5679.126488.640745.2.b17c0adI6uE72

话不多说,直接开车!

分析美人库页面

首先,我们来到https://mm.taobao.com/search_tstar_model.htm?spm=5679.126488.640745.2.b17c0adI6uE72,查看源代码:

然后,我们随便查看一个美女的首页,比如:

地址为:https://mm.taobao.com/self/aiShow.htm?spm=719.7763510.1998643336.36.qMzWeX&userId=143534224

按照我们之前的爬取经验,这个地址应该能够从一开始的页面找到,毕竟是从那跳转过来的,于是,我们在页面源码中查找:

竟然没有?!不论怎么查找,都找不到。这是什么情况?
答案是Ajax
我们用Chrome的开发者工具查看一下,或许能找到答案。

Chrome开发者工具

从图中,我们可以看到好多请求,点击XHR选项卡,

有两个Ajax请求,点击第二个(第一个是第一页的Ajax)查看:

看到了宴宴的信息,原来之前看到的图片个人信息啥的,都是用Ajax加载过来的!

分析个人主页

接下来,我们再谈谈个人主页,来到宴宴的主页,我们观察其URL
https://mm.taobao.com/self/aiShow.htm?spm=719.7763510.1998643336.36.qMzWeX&userId=143534224
发现,请求参数主要是spm和userId,尝试去掉spm,看能不能访问到页面:

原来是可以用https://mm.taobao.com/self/aiShow.htm?userId=XXXXXX访问的!

分析个人相册页

我们来到她的相册页,可以像分析个人主页一样,发现用https://mm.taobao.com/self/model_album.htm?user_id=XXXXXX就可以访问到相册页了。

个人相册

当我们查看个人相册页源码时,又发现:

什么都没有!老一套,于是我们再次打开了Chrome开发者工具,

果然,又是Ajax请求!
这也提醒我们只要,我们获得了这个请求的响应内容,爬取图片什么的,都不是事儿了!

查看头部信息

哈哈,原来只要请求https://mm.taobao.com/self/album/open_album_list.htm?_charset=utf-8&user_id%20=XXXXXX就可以了!!

user_id(XXXXXX)怎么弄

经过孜孜不倦的分析,我们终于发现,原来到达其他网页,比如个人首页,相册页等,最重要的就是user_id那一串数字了,那么那串数字怎么来的呢?

这就得回到我们最开始分析的地方,在分析美人库的时候其实已经得到了:

得到了user_id,再加上我们对URL的分析,我们可以随心所欲了,想爬哪爬哪!

最后附上部分源码,其他的可以根据自己的需求补充或修改:

mport json
import random
import urllib.request
from urllib.request import Request
import chardet
import urllib.parse

user_agent = [
    'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
]

def getMMData(url,currentPage=0):
    formdata = {
        'q':'',
        'viewFlag':'A',
        'sortType':'default',
        'searchStyle':'',
        'searchRegion':'city:',
        'searchFansNum':'',
        'currentPage': currentPage,
        'pageSize': '100'
    }
    formdata = urllib.parse.urlencode(formdata)
    headers = {'User-Agent': random.choice(user_agent)}
    requ = Request(url,data=bytes(formdata,'utf-8'),headers=headers)
    data = urllib.request.urlopen(requ).read()
    data = data.decode(chardet.detect(data)['encoding'])
    dataToDict = json.loads(data)
    return dataToDict['data']['searchDOList']

# 获取ID
def getMMID(data):
    ID = []
    for i in data:
        ID.append(i['userId'])
    return ID

if __name__ == '__main__':
    url = 'https://mm.taobao.com/tstar/search/tstar_model.do?_input_charset=utf-8'
    # for i in getMMData(url,1):
    #     print(i['userId'])
    data = getMMData(url)
    ID = getMMID(data)
    print(ID)

然后再次附上扒图结果:

以上。

上一篇 下一篇

猜你喜欢

热点阅读