zoukankan      html  css  js  c++  java
  • 阿狸V任务页面爬取数据解析

    需求:

    爬取:https://v.taobao.com/v/content/video 所有主播详情页信息

    首页分析

      分析可以得知数据是通过ajax请求获取的.

    分析请求头

     详情页分析

    详情页和详情页数据url对比分析

    经过测试,发现我们只需要更改'''userid'''的值就可以获取到不同的数据.

    分析完毕开始编写代码

    完整代码如下

    import re
    import requests
    import json
    import jsonpath
    import pymongo
    class VtaoSpider:
        headers={
            'referer': 'https://v.taobao.com/v/content/video',
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',
        }
    
        db=None
        def open(self):
            '连接数据库'
            client=pymongo.MongoClient(host='106.12.108.236',port=27017)
            self.db=client['trip']
    
        def get_first_page(self):
            '获取首页所有的数据'
            url_lst=[]
            for i in range(1,26): #25页数据
                '处理页面'
                params={
                    'cateType': 602,
                    'currentPage': i,
                    '_ksTS': '1554971959356_87',
                    '':'',
                    '_output_charset': 'UTF-8',
                    '_input_charset': 'UTF-8',
                }
                start_url='https://v.taobao.com/micromission/req/selectCreatorV3.do'
    
                first_data=requests.get(url=start_url,headers=self.headers,params=params)
                url_lst.append(first_data)
                # print(first_data.text)
            return url_lst
    
    
        def get_detail_url(self):
            '获取详情页的url'
            response_list=self.get_first_page()
            all_detail_url=[]
            for response in response_list:
                dd = response.text
                d_dict = json.loads(dd)
                detail_url = jsonpath.jsonpath(d_dict, '$..homeUrl')
                #detail_url是一个列表
                all_detail_url.extend(detail_url)
            # print(all_detail_url)
            return all_detail_url
    
        def get_detail_data(self):
            url_list=self.get_detail_url()
            # print(url_list)
            for url in url_list:
                try:
                    ex='userId=(.*?)&'
                    user_id=re.findall(ex,url)[0]
                    detail_data_url=f'https://v.taobao.com/micromission/daren/daren_main_portalv3.do?userId={user_id}&_ksTS=1554976401436_17'
                    # print(detail_data_url)
    
                    #获取响应数据
                    data = requests.get(url=detail_data_url, headers=self.headers).text
                    data_json=json.loads(data)
                    darenNick=jsonpath.jsonpath(data_json,'$..darenNick')[0]
                    darenScore=jsonpath.jsonpath(data_json,'$..darenScore')[0]
                    nick=jsonpath.jsonpath(data_json,'$..nick')[0]
                    creatorType=jsonpath.jsonpath(data_json,'$..creatorType')[0]
                    rank=jsonpath.jsonpath(data_json,'$..rank')
                    res_data={
                        'darenNick':darenNick,
                        'darenScore':darenScore,
                        'nick':nick,
                        'creatorType':creatorType,
                        'rank':rank,
    
                    }
                    #存入数据库
                    if self.db['vtaobao'].insert(res_data):
                        print('save to mongo is successful!')
    
                except Exception as e:
                    print(e)
    
    
    if __name__ == '__main__':
        vspider=VtaoSpider()
        #数据库启动只需要执行一次
        vspider.open()
        vspider.get_detail_data()

    一共爬取了450条数据,就是450个主播的相关信息!!!

    此代码为使用多进程,多线程,爬取时间不能如你们所愿,感兴趣的朋友可以把代码重构一下,使用多进程,多线程,再分享一波,让大家学习一番,谢谢!!!

  • 相关阅读:
    How to use VS2012 remote debug Windows Azure Cloud Services
    vue ---05 分页和详情页功能的实现
    vue ----04课程列表的展示
    vue--03 首页和登陆注册
    luffy--03 首页和登陆注册(跨域问题的解决)
    luffy--02 ---项目配置和数据库链接
    luffy---01
    DRF---一些配置/设置
    drf-路由
    drf视图
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10692501.html
Copyright © 2011-2022 走看看