热门标签 | 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()

 


推荐阅读
  • 如何利用Python脚本实现钉钉自动化考勤打卡
    本文详细探讨了利用Python脚本实现钉钉自动化考勤打卡的方法。通过具体实例操作,解决了很多用户在实际应用中遇到的难题,帮助读者高效掌握这一实用技能。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
  • 深入解析 Android Drawable:第六阶段进阶指南 ... [详细]
  • 【Python爬虫实操】 不创作小说,专精网站内容迁移,超高效!(含源代码)
    本文详细介绍了如何利用Python爬虫技术实现高效网站内容迁移,涵盖前端、后端及Android相关知识点。通过具体实例和源代码,展示了如何精准抓取并迁移网站内容,适合对Python爬虫实战感兴趣的开发者参考。 ... [详细]
  • 如何在Android应用中设计和实现专业的启动欢迎界面(Splash Screen)
    在Android应用开发中,设计与实现一个专业的启动欢迎界面(Splash Screen)至关重要。尽管Android设计指南对使用Splash Screen的态度存在争议,但一个精心设计的启动界面不仅能提升用户体验,还能增强品牌识别度。本文将探讨如何在遵循最佳实践的同时,通过技术手段实现既美观又高效的启动欢迎界面,包括加载动画、过渡效果以及性能优化等方面。 ... [详细]
  • APKAnalyzer(1):命令行操作体验与功能解析
    在对apkChecker进行深入研究后,自然而然地关注到了Android Studio中的APK分析功能。将APK文件导入IDE中,系统会自动解析并展示其中各类文件的详细信息。官方文档提供了详细的命令行工具使用指南,帮助开发者快速上手。本文以一个RecyclerView的Adapter代理开源库为例,探讨了如何利用这些工具进行高效的APK分析。 ... [详细]
  • 在上篇文章的基础上,本文将继续探讨 Linux 设备驱动中的设备模型与 `devicedriverbus` 机制。在将设备注册到总线之前,需要先创建 `device` 对象。可以通过静态定义 `device` 结构体变量,并调用 `device_register` 函数来完成这一过程。此外,文章还将详细解析设备模型的内部工作机制,以及 `devicedriverbus` 机制如何实现设备与驱动的自动匹配和管理。 ... [详细]
  • 1.打开google浏览器,输入www.toutiao.com,搜索街拍。2.打开开发者选项,network监看加载的xhr,数据是ajax异步加载的 ... [详细]
  • 一、需求:        将MongoDB表中的数据按照时间戳增量抽取到Mysql表中。二、实现方式:   1.kettle    2.pytho ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 本文深入探讨了NDK与JNI技术在实际项目中的应用及其学习路径。通过分析工程目录结构和关键代码示例,详细介绍了如何在Android开发中高效利用NDK和JNI,实现高性能计算和跨平台功能。同时,文章还提供了从基础概念到高级实践的系统学习指南,帮助开发者快速掌握这些关键技术。 ... [详细]
  • 谢邀。---2016.09.20补充---GitHub-gregmalcolmpython_koans:PythonKoans是个不错的练手项目,我还曾经给它贡献过代 ... [详细]
  • 爬虫实践-爬取简书网用户动态信息
    jianshuwanguser.py:importrequestsfromlxmlimportetreeimportpymongoclientpymongo.MongoClie ... [详细]
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社区 版权所有