1. 程式人生 > >app之---豆果美食

app之---豆果美食

urlencode insert requests afa collect int obi linux break

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()

app之---豆果美食