热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

app之---豆果美食

1.抓包2.代码抓取:#!usrbinenvpython#-*-coding:utf-8-*-#authortomimportreques

1.抓包

  

 

2.代码

  抓取:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author tom
import requests
from multiprocessing import Queue
from handle_pymongo import mongo
from concurrent.futures import ThreadPoolExecutor

class Douguo():
    def __init__(self):
        self.queue_list=Queue()
    
    #因为所有的请求的请求头都一样,所以放在这边处理,其实请求头也可以放在__init__
    def handle_request(self,url,data):
        headers={
            "client":"4",
            "version":"6920.4",
            "device":"SM-G9350",
            "sdk":"22,5.1.1",
            "imei":"861373280750547",
            "channel":"qqkp",
            # "mac":"2c:c3:82:e2:0b:03",
            "resolution":"1024*576",
            "dpi":"1.19375",
            # "android-id":"4014041355524873",
            # "pseudo-id":"28075263",
            "brand"    :"samsung",
            "scale"    :"1.19375",
            "timezone":"28800",
            "language":"zh",
            "cns":"3",
            # "imsi":"460005263415341",
            "user-agent":"Mozilla/5.0 (Linux; Android 5.1.1; SM-G9350 Build/LMY48Z) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36",
            "reach"    :"1",
            "newbie":"1",
            "Content-Type":"application/x-www-form-urlencoded; charset=utf-8",
            "Accept-Encoding":"gzip, deflate",
            # "COOKIE":"duid=59758072", #能不带最好不带
            "Host":"api.douguo.net",
            # "Content":"-Length    68",
            "Connection":"keep-alive"
            }
        response = requests.post(url=url, headers=headers,data=data)
        return response

    #请求食谱首页
    def handle_index(self):
        url='http://api.douguo.net/recipe/flatcatalogs'
        data={
            "client":"4",
            # "_session":"1557318413116861373280750547",
            # "v":"1503650468",
            "_vs": "2305"
        }
        response_index=self.handle_request(url,data)
        indext_response_dict=response_index.json()
        #遍历这个三级分类
        for index_item in indext_response_dict['result']['cs']:
            for items in index_item['cs']:
                for item in items['cs']:
                    #每一个小分类
                    data2={
                        "client": "4",
                        # "_session": "1557318413116861373280750547",
                        "keyword":item['name'],
                        "order": "3",
                        "_vs": "400"
                    }
                    self.queue_list.put(data2)

    #请求具体食材的做法
    def handle_caipu_list(self,data):
        print("当前处理的食材是:",data['keyword'])
        #翻页
        for i in range(1,11):
            caipu_list_url='http://api.douguo.net/recipe/v2/search/{0}/20'.format(str(i*20))
            caipu_list_response=self.handle_request(url=caipu_list_url,data=data)
            caipu_list_dict=caipu_list_response.json()
            #判断是否有数据
            if caipu_list_dict['result']['end']==1:
                break
            for item in caipu_list_dict['result']['list']:
                caipu_info={}
                caipu_info['shicai'] = data['keyword']
                if item['type']==13:
                    caipu_info['user_name']=item['r']['an']
                    caipu_info['shicai_id']=item['r']['id']
                    caipu_info['describe']=item['r']['cookstory'].replace('/n','').replace(' ','')
                    caipu_info['caipu_name']=item['r']['n']
                    caipu_info['zuoliao_list']=item['r']['major']
                    # print(caipu_info)
                    #获取详情页的内容
                    detail_url='http://api.douguo.net/recipe/detail/'+str(caipu_info['shicai_id'])
                    detail_data={
                        "client": "4",
                        # "_session": "1557318413116861373280750547",
                        "author_id": "0",
                        "_vs": "2803",
                        "_ext":'{"query": {"kw": '+caipu_info['shicai']+', "src": "2803", "idx": "1", "type": "13", "id": '+str(caipu_info['shicai_id'])+'}}'
                    }
                    detail_response=self.handle_request(url=detail_url,data=detail_data)
                    detail_response_dict=detail_response.json()
                    caipu_info['tips']=detail_response_dict['result']['recipe']['tips']
                    caipu_info['cook_step']=detail_response_dict['result']['recipe']['cookstep']
                    print('当前入库的是:',caipu_info['caipu_name'])
                    mongo.inset_item(caipu_info)
                #g过滤掉广告
                else:
                    continue



if __name__ == '__main__':
    d=Douguo()
    d.handle_index()
    pool=ThreadPoolExecutor(max_workers=20)
    while d.queue_list.qsize()>0:
        pool.submit(d.handle_caipu_list,d.queue_list.get())

  存储:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#author tom
import  pymongo


class Connect_Mongo(object):
    def __init__(self):
        self.client=pymongo.MongoClient(host='127.0.0.1',port=27017)
        self.db=self.client['doukou_meishi']

    def inset_item(self,item):
        self.collection=self.db['meishi']
        self.collection.insert(item)


mongo=Connect_Mongo()

 


推荐阅读
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • 本文详细解析了2019年西安邀请赛中的一道树形动态规划题目——J题《And And And》。题目要求计算树中所有子路径异或值为0的集合数量,通过深入分析和算法优化,提供了高效的解决方案。 ... [详细]
author-avatar
fewtewtewt
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有