1.抓包

  

2.代码

  抓取:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #author tom
  4. import requests
  5. from multiprocessing import Queue
  6. from handle_pymongo import mongo
  7. from concurrent.futures import ThreadPoolExecutor
  8.  
  9. class Douguo():
  10. def __init__(self):
  11. self.queue_list=Queue()
  12.  
  13. #因为所有的请求的请求头都一样,所以放在这边处理,其实请求头也可以放在__init__
  14. def handle_request(self,url,data):
  15. headers={
  16. "client":"",
  17. "version":"6920.4",
  18. "device":"SM-G9350",
  19. "sdk":"22,5.1.1",
  20. "imei":"",
  21. "channel":"qqkp",
  22. # "mac":"2c:c3:82:e2:0b:03",
  23. "resolution":"1024*576",
  24. "dpi":"1.19375",
  25. # "android-id":"4014041355524873",
  26. # "pseudo-id":"28075263",
  27. "brand" :"samsung",
  28. "scale" :"1.19375",
  29. "timezone":"",
  30. "language":"zh",
  31. "cns":"",
  32. # "imsi":"460005263415341",
  33. "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",
  34. "reach" :"",
  35. "newbie":"",
  36. "Content-Type":"application/x-www-form-urlencoded; charset=utf-8",
  37. "Accept-Encoding":"gzip, deflate",
  38. # "Cookie":"duid=59758072", #能不带最好不带
  39. "Host":"api.douguo.net",
  40. # "Content":"-Length 68",
  41. "Connection":"keep-alive"
  42. }
  43. response = requests.post(url=url, headers=headers,data=data)
  44. return response
  45.  
  46. #请求食谱首页
  47. def handle_index(self):
  48. url='http://api.douguo.net/recipe/flatcatalogs'
  49. data={
  50. "client":"",
  51. # "_session":"1557318413116861373280750547",
  52. # "v":"1503650468",
  53. "_vs": ""
  54. }
  55. response_index=self.handle_request(url,data)
  56. indext_response_dict=response_index.json()
  57. #遍历这个三级分类
  58. for index_item in indext_response_dict['result']['cs']:
  59. for items in index_item['cs']:
  60. for item in items['cs']:
  61. #每一个小分类
  62. data2={
  63. "client": "",
  64. # "_session": "1557318413116861373280750547",
  65. "keyword":item['name'],
  66. "order": "",
  67. "_vs": ""
  68. }
  69. self.queue_list.put(data2)
  70.  
  71. #请求具体食材的做法
  72. def handle_caipu_list(self,data):
  73. print("当前处理的食材是:",data['keyword'])
  74. #翻页
  75. for i in range(1,11):
  76. caipu_list_url='http://api.douguo.net/recipe/v2/search/{0}/20'.format(str(i*20))
  77. caipu_list_response=self.handle_request(url=caipu_list_url,data=data)
  78. caipu_list_dict=caipu_list_response.json()
  79. #判断是否有数据
  80. if caipu_list_dict['result']['end']==1:
  81. break
  82. for item in caipu_list_dict['result']['list']:
  83. caipu_info={}
  84. caipu_info['shicai'] = data['keyword']
  85. if item['type']==13:
  86. caipu_info['user_name']=item['r']['an']
  87. caipu_info['shicai_id']=item['r']['id']
  88. caipu_info['describe']=item['r']['cookstory'].replace('/n','').replace(' ','')
  89. caipu_info['caipu_name']=item['r']['n']
  90. caipu_info['zuoliao_list']=item['r']['major']
  91. # print(caipu_info)
  92. #获取详情页的内容
  93. detail_url='http://api.douguo.net/recipe/detail/'+str(caipu_info['shicai_id'])
  94. detail_data={
  95. "client": "",
  96. # "_session": "1557318413116861373280750547",
  97. "author_id": "",
  98. "_vs": "",
  99. "_ext":'{"query": {"kw": '+caipu_info['shicai']+', "src": "2803", "idx": "1", "type": "13", "id": '+str(caipu_info['shicai_id'])+'}}'
  100. }
  101. detail_response=self.handle_request(url=detail_url,data=detail_data)
  102. detail_response_dict=detail_response.json()
  103. caipu_info['tips']=detail_response_dict['result']['recipe']['tips']
  104. caipu_info['cook_step']=detail_response_dict['result']['recipe']['cookstep']
  105. print('当前入库的是:',caipu_info['caipu_name'])
  106. mongo.inset_item(caipu_info)
  107. #g过滤掉广告
  108. else:
  109. continue
  110.  
  111. if __name__ == '__main__':
  112. d=Douguo()
  113. d.handle_index()
  114. pool=ThreadPoolExecutor(max_workers=20)
  115. while d.queue_list.qsize()>0:
  116. pool.submit(d.handle_caipu_list,d.queue_list.get())

  存储:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #author tom
  4. import pymongo
  5.  
  6. class Connect_Mongo(object):
  7. def __init__(self):
  8. self.client=pymongo.MongoClient(host='127.0.0.1',port=27017)
  9. self.db=self.client['doukou_meishi']
  10.  
  11. def inset_item(self,item):
  12. self.collection=self.db['meishi']
  13. self.collection.insert(item)
  14.  
  15. mongo=Connect_Mongo()

app之---豆果美食的更多相关文章

  1. python-python爬取豆果网(菜谱信息)

    #-*- coding = utf-8 -*- #获取豆果网图片 import io from bs4 import BeautifulSoup import requests #爬取菜谱的地址 ur ...

  2. 融云(找到“每个App都有沟通的需求”的细分市场)

    近日,国内著名App驾考宝典和融云达成合作,为应用增加IM功能,实现亿级用户之间聊天.消息一出,IM(即时通讯)领域的大佬,同时也是个上线不到两岁的新生力量,再次引发了行业的关注. 对业内人士而言,即 ...

  3. app界面设计字体规范

    通过对不同类型的app进行总结,总结出app的字体规范. 一.字体选择 1.IOS:苹果ios 9系统开始,系统最新的默认中文字体是:苹方.英文字体是: San Francisco 2.Android ...

  4. App界面设计规范-字体规范

    通过对不同类型的app进行总结,总结出app的字体规范. 一.字体选择 1.IOS:苹果ios 9系统开始,系统最新的默认中文字体是:苹方.英文字体是: San Francisco 2.Android ...

  5. 美食查询手机应用"吃了么":NABC

    一 N(need) 当你在一个陌生的地方游玩,想吃到当地的招牌美食时怎么办? 当你听说有一个很好吃的家常菜,也想自己下厨试试时怎么办?打印出菜谱,还是奔波于厨房和电脑之前? 查询周边美食的功能对于那些 ...

  6. 团队作业(五)-笔记app top5

    在互联网快速发展的情况下,各个行业的软件层出不穷,五花八门.各个行业都有相当多的软件介入其中,在如此多的软件之中,便有了相当激烈的竞争角逐.今天我们十五万的总冠军就着笔记APP行业中位列top 5的软 ...

  7. 微信Web APP应用

    微信Web APP即微信公众账号,对web APP的提供者来说这是一个门槛极低,容易到达数亿真实用户且确保用户黏性的分发平台;对用户来说,这是一种前所未有及其简单的应用使用方式;对腾讯来 说,将形成微 ...

  8. Top Android App使用的组件(应用)

    Top Android App使用的组件   唱吧_462 smack:de.measite.smack:??? ???:org.apache:??? smack:org.jivesoftware.s ...

  9. Scrapy——6 APP抓包—scrapy框架下载图片

    Scrapy——6 怎样进行APP抓包 scrapy框架抓取APP豆果美食数据 怎样用scrapy框架下载图片 怎样用scrapy框架去下载斗鱼APP的图片? Scrapy创建下载图片常见那些问题 怎 ...

随机推荐

  1. caffe之mac下环境搭建

    参考 http://www.linuxidc.com/Linux/2016-09/135026.html 1. 安装brew,也叫homebrew,mac下类似于ubuntu的apt-get功能 cu ...

  2. 格式化MyEclipse代码(java、jsp、js)行的长度@修改java代码字体@修改Properties文件编码方式

    每次用MyEclipse/Eclipse自带的快捷键Ctrl+shift+f格式化代码时,如果原来的一行代码大于80列,Eclipse就会自动换为多行.如果想格式化代码后不想让代码换行可以通过以下方式 ...

  3. Java學習筆記(基本語法)

    本文件是以學習筆記的概念為基礎,用於自我的複習紀錄,不過也開放各位的概念指證.畢竟學習過程中難免會出現觀念錯誤的問題.也感謝各位的觀念指證. 安裝JDK 在Oracle網站中找自己系統的JDK下載位置 ...

  4. 高效能Windows人士的N个习惯之一:启动篇

    接触电脑十多年,经历了各种折腾阶段,这几年开始沉静下来,不再追求花哨的界面与应用,只注重工作的效率,逐渐养成了一套自己的操作习惯,感觉不错,特撰文分享.标题借用了一下<高效能人士的七个习惯> ...

  5. javascript学习内容

    http协议 犀牛书 MDN js单线程 let只在代码块内有效 es5只有全局作用域 const变量指向的内存地址不得改动,值不能保证不变 全局变量不加var node.js 更改连接到服务器的方式 ...

  6. selenium&appium中的三种等待方式---基于python

    我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...

  7. Golang: chan定义问题(7)

    通常都是定义读写双向的 chan,定义单向 chan 问题. 专栏的介绍可以参考 <GotchaGolang专栏>,代码可以看<宝库-Gotcha>. 通过 只写 chan 传 ...

  8. Hibernate入门之主键生成策略详解

    前言 上一节我们讲解了Hibernate命名策略,从本节我们开始陆续讲解属性.关系等映射,本节我们来讲讲主键的生成策略. 主键生成策略 JPA规范支持4种不同的主键生成策略(AUTO.IDENTITY ...

  9. Vue组件传递数据

    组件命名 1.字母全小写且必须包含一个连字符 my-componnect 2.使用 kebab-case(短横线分隔命名) 定义一个组件时,你也必须在引用这个自定义元素时使用 kebab-case,例 ...

  10. python爬虫-MongoDB安装配置

    MongoDB安装配置: 在安装配置MongoDB的过程中遇到了很多问题,现在重新梳理一遍安装流程.遇到的问题及其解决方法 系统版本:Windows 10 MongoDB版本:4.2.1 1.下载地址 ...