陈奇网络工作室

《docker实战篇》python的docker爬虫技术-python脚本APP抓取(13)

云计算

欢迎转载原创文章。 请转载。 从IT人物语会上转载的。 谢谢你。

原文链接地址:《docker实战篇》python的docker爬虫技术-python脚本APP抓取( 13 ) ) ) ) ) ) ) ) ) ) ) ) ) )。

上次分析了具体APP的请求后连接,这次主要谈python的开发,掌握APP中的信息。 源代码: https://github.com/limingi OS/docker python.git

分析app数据包

看分析

已分析的头

夜神布局

python码,爬分类

#! /usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/1/9 11:06

# @Author : lm

# @Url : idig8.com

# @Site :

# @File : spider_douguomeishi.py

# @Software: PyCharm

导入请求

#header的内容很多。 因为不同的制造商有不同的想法,

#fiddler有很多字段是爬行取出的,部分内容应该不是必须的。 只能在实际的时候试着评论一下。

defHandle_request(URL,data ) :

头={

客户端: 4、

版本: 6916.2、

device: SM-G955N,

SDK:22,5.1.1,

imei: 354730010002552、

channel: zhuzhan,

mac: 00:FF:E2:A2:7B:58,

解决方案: 1440 * 900、

dpi:2.0、

android-id:bcdaf527105cc26f、

pseudo-id:354730010002552,

brand :三星、

呼叫: 2.0、

时间区域: 28800、

语言: zh,

cns:3、

嘉莉:安卓,

#imsi: 310260000000000,

user-agent:Mozilla/5.0(Linux; 安卓5.1.1; sm-g 955 n build/nrd 90 m ( apple WebKit/537.36 ) khtml,like Gecko ) version/4.0 chrome/39.0.0 mobile safari/537.37

lon: 105.566938、

lat: 29.99831,

cid: 512000、

content-type:APP应用程序/x-www-form-urlencoded; charset=utf-8,

Accept-Encoding: gzip,deflate,

Connection: Keep-Alive,

# Cookie: duid=58349118,

Host: api.douguo.net,

#Content-Length: 65

}

response=requests.post(URL=URL,headers=header,data=data ) )

返回响应

def handle_index (

URL=http://API.douguo.net/recipe/flat catalogs

# client=4_ session=1547000257341354730010002552 v=1503650468 _ vs=0

data={

客户端: 4、

_ session:1547000257341354730010002552、

v:1503650468,

_vs:0

}

response=handle_request(URL,data ) ) ) ) ) ) ) ) )。

打印( response.text ) )。

handle_index (

取详细资料,信息通过分类找到里面的详细资料

#! /usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/1/9 11:06

# @Author : lm

# @Url : idig8.com

# @Site :

# @File : spider_douguomeishi.py

# @Software: PyCharm

import json

导入请求

来自多进程导入队列

#创建队列

queue_list=Queue ( )

defHandle_request(URL,data ) :

头={

客户端: 4、

版本: 6916.2、

device: SM-G955N,

SDK:22,5.1.1,

imei: 354730010002552、

channel: zhuzhan,

mac: 00:FF:E2:A2:7B:58,

解决方案: 1440 * 900、

dpi:2.0、

android-id:bcdaf527105cc26f、

pseudo-id:354730010002552,

brand :三星、

呼叫: 2.0、

时间区域: 28800、

语言: zh,

cns:3、

嘉莉:安卓,

#imsi: 310260000000000,

user-agent:Mozilla/5.0(Linux; 安卓5.1.1; sm-g 955 n build/nrd 90 m ( apple WebKit/537.36 ) khtml,like Gecko ) version/4.0 chrome/39.0.0 mobile safari/537.37

lon: 105.566938、

lat: 29.99831,

cid: 512000、

content-type:APP应用程序/x-www-form-urlencoded; charset=utf-8,

Accept-Encoding: gzip,deflate,

Connection: Keep-Alive,

# Cookie: duid=58349118,

Host: api.douguo.net,

#Content-Length: 65

}

response=requests.post(URL=URL,headers=header,data=data ) )

返回响应

def handle_index (

URL=http://API.douguo.net/recipe/flat catalogs

# client=4_ session=1547000257341354730010002552 v=1503650468 _ vs=0

data={

客户端: 4、

_ session:1547000257341354730010002552、

v:1503650468,

_vs:0

}

response=handle_request(URL,data ) ) ) ) ) ) ) ) )。

#print(response.text )。

index _ response _ DIC=JSON.loads ( response.text )

for item _ index index _ response _ DIC [ result ] [ cs ] :

#print(item_index )。

for item _ index _ CSI nitem _ index [ cs ] :

#print(item_index_cs ) )。

for item in item_index_cs[cs] :

# print (项目) )。

data_2={

客户端: 4、

_ session:1547000257341354730010002552、

keyword:item[name],

_vs :400

}

#print(data_2) )

queue_list.put(data_2) )。

handle_index (

print(queue_list.qsize ) )

对食谱内部的详细信息进行分类

#! /usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/1/9 11:06

# @Author : lm

# @Url : idig8.com

# @Site :

# @File : spider_douguomeishi.py

# @Software: PyCharm

import json

导入请求

来自多进程导入队列

#创建队列

queue_list=Queue ( )

defHandle_request(URL,data ) :

头={

客户端: 4、

版本: 6916.2、

device: SM-G955N,

SDK:22,5.1.1,

imei: 354730010002552、

channel: zhuzhan,

mac: 00:FF:E2:A2:7B:58,

解决方案: 1440 * 900、

dpi:2.0、

android-id:bcdaf527105cc26f、

pseudo-id:354730010002552,

brand :三星、

呼叫: 2.0、

时间区域: 28800、

语言: zh,

cns:3、

嘉莉:安卓,

#imsi: 310260000000000,

user-agent:Mozilla/5.0(Linux; 安卓5.1.1; sm-g 955 n build/nrd 90 m ( apple WebKit/537.36 ) khtml,like Gecko ) version/4.0 chrome/39.0.0 mobile safari/537.37

lon: 105.566938、

lat: 29.99831,

cid: 512000、

content-type:APP应用程序/x-www-form-urlencoded; charset=utf-8,

Accept-Encoding: gzip,deflate,

Connection: Keep-Alive,

# Cookie: duid=58349118,

Host: api.douguo.net,

#Content-Length: 65

}

response=requests.post(URL=URL,headers=header,data=data ) )

返回响应

def handle_index (

URL=http://API.douguo.net/recipe/flat catalogs

# client=4_ session=1547000257341354730010002552 v=1503650468 _ vs=0

data={

客户端: 4、

_ session:1547000257341354730010002552、

v:1503650468,

_vs:0

}

response=handle_request(URL,data ) ) ) ) ) ) ) ) )。

#print(response.text )。

index _ response _ DIC=JSON.loads ( response.text )

for item _ index index _ response _ DIC [ result ] [ cs ] :

#print(item_index )。

for item _ index _ CSI nitem _ index [ cs ] :

#print(item_index_cs ) )。

for item in item_index_cs[cs] :

# print (项目) )。

data_2={

客户端: 4、

# _ session:1547000257341354730010002552,

keyword:item[name],

_vs :400,

订单: 0

}

#print(data_2) )

queue_list.put(data_2) )。

defHandle_caipu_list(data ) :

print (当前食材:data[keyword] ) )。

caipu _ list _ URL=http://API.douguo.net/recipe/s/0/20;

caipu _ response=handle _ request ( caipu _ list _ URL,data ) ) ) ) ) ) ) ) ) caipu _ response=handle ) ) ) ) caipu )

caipu _ response _ dict=JSON.loads ( caipu _ response.text ) )。

forca IPU _ itemincaipu _ response _ dict [ result ] [ list ] :

caipu_info={}

caipu _ info [ shicai ]=data [ keyword ]

if caipu_item[type]==13 :

caipu _ info [ user _ name ]=caipu _ item [ r ] [ an ]

caipu _ info [ shicai _ id ]=caipu _ item [ r ] [ id ]

caipu _ info [ describe ]=caipu _ item [ r ] [ cook story ].replace (\& amp; quot; n,).replace ),) ) ) )。

caipu _ info [ caipu _ name ]=caipu _ item [ r ] [ n ]

caipu _ info [ Zuo Liao _ list ]=caipu _ item [ r ] [ major ]

打印( caipu _ info ) )

else :

continue

handle_index (

handle _ caipu _ list ( queue _ list.get ) )

料理内部的详细信息

#! /usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/1/9 11:06

# @Author : lm

# @Url : idig8.com

# @Site :

# @File : spider_douguomeishi.py

# @Software: PyCharm

import json

导入请求

来自多进程导入队列

#创建队列

queue_list=Queue ( )

defHandle_request(URL,data ) :

头={

客户端: 4、

版本: 6916.2、

device: SM-G955N,

SDK:22,5.1.1,

imei: 354730010002552、

channel: zhuzhan,

mac: 00:FF:E2:A2:7B:58,

解决方案: 1440 * 900、

dpi:2.0、

android-id:bcdaf527105cc26f、

pseudo-id:354730010002552,

brand :三星、

呼叫: 2.0、

时间区域: 28800、

语言: zh,

cns:3、

嘉莉:安卓,

#imsi: 310260000000000,

user-agent:Mozilla/5.0(Linux; 安卓5.1.1; sm-g 955 n build/nrd 90 m ( apple WebKit/537.36 ) khtml,like Gecko ) version/4.0 chrome/39.0.0 mobile safari/537.37

lon: 105.566938、

lat: 29.99831,

cid: 512000、

content-type:APP应用程序/x-www-form-urlencoded; charset=utf-8,

Accept-Encoding: gzip,deflate,

Connection: Keep-Alive,

# Cookie: duid=58349118,

Host: api.douguo.net,

#Content-Length: 65

}

response=requests.post(URL=URL,headers=header,data=data ) )

返回响应

def handle_index (

URL=http://API.douguo.net/recipe/flat catalogs

# client=4_ session=1547000257341354730010002552 v=1503650468 _ vs=0

data={

客户端: 4、

_ session:1547000257341354730010002552、

v:1503650468,

_vs:0

}

response=handle_request(URL,data ) ) ) ) ) ) ) ) )。

#print(response.text )。

index _ response _ DIC=JSON.loads ( response.text )

for item _ index index _ response _ DIC [ result ] [ cs ] :

#print(item_index )。

for item _ index _ CSI nitem _ index [ cs ] :

#print(item_index_cs ) )。

for item in item_index_cs[cs] :

# print (项目) )。

data_2={

客户端: 4、

# _ session:1547000257341354730010002552,

keyword:item[name],

_vs :400,

订单: 0

}

#print(data_2) )

queue_list.put(data_2) )。

defHandle_caipu_list(data ) :

print (当前食材:data[keyword] ) )。

caipu _ list _ URL=http://API.douguo.net/recipe/s/0/20;

caipu _ response=handle _ request ( caipu _ list _ URL,data ) ) ) ) ) ) ) ) ) caipu _ response=handle ) ) ) ) caipu )

caipu _ response _ dict=JSON.loads ( caipu _ response.text ) )。

forca IPU _ itemincaipu _ response _ dict [ result ] [ list ] :

caipu_info={}

caipu _ info [ shicai ]=data [ keyword ]

if caipu_item[type]==13 :

caipu _ info [ user _ name ]=caipu _ item [ r ] [ an ]

caipu _ info [ shicai _ id ]=caipu _ item [ r ] [ id ]

caipu _ info [ describe ]=caipu _ item [ r ] [ cook story ].replace (\& amp; quot; n,).replace ),) ) ) )。

caipu _ info [ caipu _ name ]=caipu _ item [ r ] [ n ]

caipu _ info [ Zuo Liao _ list ]=caipu _ item [ r ] [ major ]

#print(caipu_info ) )是

detail _ URL=http://API.douguo.net/recipe/detail/str ( caipu _ info [ shicai _ id ] ) )。

detail_data={

客户端: 4、

_ session:1547000257341354730010002552、

author_id:0,

_vs:2803,

EXT:\\& quot; {query:{kw:\\& quot; data[keyword]\\& quot;src: 2803,idx: 1,type: 13,id:\\\& quot;

}

detail _ reponse=handle _ request ( detail _ URL,detail_data ) ) ) ) ) ) ) ) ) ) 65 )

detail _ reponse _ DIC=JSON.loads ( detail _ reponse.text )

caipu _ info [ tips ]=detail _ reponse _ DIC [ result ] [ recipe ] [ tips ]

caipu _ info [ cook step ]=detail _ reponse _ DIC [ result ] [ recipe ] [ cook step ]

print(JSON.dumps ) caipu_info ) )

else :

continue

handle_index (

handle _ caipu _ list ( queue _ list.get ) )

将数据保存到MongoDB

使用vagrant安装虚拟机

vagrant up

进入虚拟机

ip 192.168.66.100

su -

#密码: vagrant

文档生成器

镜像mongodb

33559 hub.docker.com/r/bitnami/MongoDB

默认端口: 27017

dockerpullbitnami/MongoDB:latest

创建mongodb的容器

mkdir bitnami

cd bitnami

mkdir mongodb

docker run-d-v/path/to/mongod B- persistence:/root/bitnami-p 27017:27017 bitnami/MongoDB:latest

#关闭防火墙

系统停止文件d

使用第三方工具连接

! [ ] [ 3359 upload-images.Jian Shu.io/upload _ images/11223715-aea2f 13184 d 728 C2.png? imagem ogr2/auto-orient/strip|imageview2/2/w/1240 )

连接到mongodb的工具

` ` ` python

#! /usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/1/11 0:53

# @Author : liming

# @Site :

# @File : handle_mongodb.py

# @url : idig8.com

# @Software: PyCharm

导入pymongo

frompymongo.collectionimportcollection

classconnect_Mongo(object ) :

def __init__(self ) :

self.client=pymongo.mongo client ( host=192.168.66.100,port=27017 ) ) ) ) ) ) ) ) ) )。

self.db _ data=self.client [ dou _ Guo _ mei _ Shi ]

definsert_item(self,item ) :

db _ collection=collection ( self.db _ data,\\& quot; dou_guo_mei_shi_item___& #039; )

db_collection.insert(item )

#曝光

mongo_info=Connect_mongo (

python爬网的数据用mongo的工具保存在centos7的文档镜像中

#! /usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/1/9 11:06

# @Author : lm

# @Url : idig8.com

# @Site :

# @File : spider_douguomeishi.py

# @Software: PyCharm

import json

导入请求

来自多进程导入队列

from handle _ mongoimportmongo _ info

#创建队列

queue_list=Queue ( )

defHandle_request(URL,data ) :

头={

客户端: 4、

版本: 6916.2、

device: SM-G955N,

SDK:22,5.1.1,

imei: 354730010002552、

channel: zhuzhan,

mac: 00:FF:E2:A2:7B:58,

解决方案: 1440 * 900、

dpi:2.0、

android-id:bcdaf527105cc26f、

pseudo-id:354730010002552,

brand :三星、

呼叫: 2.0、

时间区域: 28800、

语言: zh,

cns:3、

嘉莉:安卓,

#imsi: 310260000000000,

user-agent:Mozilla/5.0(Linux; 安卓5.1.1; sm-g 955 n build/nrd 90 m ( apple WebKit/537.36 ) khtml,like Gecko ) version/4.0 chrome/39.0.0 mobile safari/537.37

lon: 105.566938、

lat: 29.99831,

cid: 512000、

content-type:APP应用程序/x-www-form-urlencoded; charset=utf-8,

Accept-Encoding: gzip,deflate,

Connection: Keep-Alive,

# Cookie: duid=58349118,

Host: api.douguo.net,

#Content-Length: 65

}

response=requests.post(URL=URL,headers=header,data=data ) )

返回响应

def handle_index (

URL=http://API.douguo.net/recipe/flat catalogs

# client=4_ session=1547000257341354730010002552 v=1503650468 _ vs=0

data={

客户端: 4、

_ session:1547000257341354730010002552、

v:1503650468,

_vs:0

}

response=handle_request(URL,data ) ) ) ) ) ) ) ) )。

#print(response.text )。

index _ response _ DIC=JSON.loads ( response.text )

for item _ index index _ response _ DIC [ result ] [ cs ] :

#print(item_index )。

for item _ index _ CSI nitem _ index [ cs ] :

#print(item_index_cs ) )。

for item in item_index_cs[cs] :

# print (项目) )。

data_2={

客户端: 4、

# _ session:1547000257341354730010002552,

keyword:item[name],

_vs :400,

订单: 0

}

#print(data_2) )

queue_list.put(data_2) )。

defHandle_caipu_list(data ) :

print (当前食材:data[keyword] ) )。

caipu _ list _ URL=http://API.douguo.net/recipe/s/0/20;

caipu _ response=handle _ request ( caipu _ list _ URL,data ) ) ) ) ) ) ) ) ) caipu _ response=handle ) ) ) ) caipu )

caipu _ response _ dict=JSON.loads ( caipu _ response.text ) )。

forca IPU _ itemincaipu _ response _ dict [ result ] [ list ] :

caipu_info={}

caipu _ info [ shicai ]=data [ keyword ]

if caipu_item[type]==13 :

caipu _ info [ user _ name ]=caipu _ item [ r ] [ an ]

caipu _ info [ shicai _ id ]=caipu _ item [ r ] [ id ]

caipu _ info [ describe ]=caipu _ item [ r ] [ cook story ].replace (\& amp; quot; n,).replace ),) ) ) )。

caipu _ info [ caipu _ name ]=caipu _ item [ r ] [ n ]

caipu _ info [ Zuo Liao _ list ]=caipu _ item [ r ] [ major ]

#print(caipu_info ) )是

detail _ URL=http://API.douguo.net/recipe/detail/str ( caipu _ info [ shicai _ id ] ) )。

detail_data={

客户端: 4、

_ session:1547000257341354730010002552、

author_id:0,

_vs:2803,

EXT:\\& quot; {query:{kw:\\& quot; data[keyword]\\& quot;src: 2803,idx: 1,type: 13,id:\\\& quot;

}

detail _ reponse=handle _ request ( detail _ URL,detail_data ) ) ) ) ) ) ) ) ) ) 65 )

detail _ reponse _ DIC=JSON.loads ( detail _ reponse.text )

caipu _ info [ tips ]=detail _ reponse _ DIC [ result ] [ recipe ] [ tips ]

caipu _ info [ cook step ]=detail _ reponse _ DIC [ result ] [ recipe ] [ cook step ]

#print(JSON.dumps ) caipu_info ) )

mongo _ info.insert _ item ( caipu _ info )

else :

continue

handle_index (

handle _ caipu _ list ( queue _ list.get ) )

python多线程-在线程池中捕获

python3通过concurrent.futuresimportthreadpoolexecutor

浏览线程池

#! /usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/1/9 11:06

# @Author : lm

# @Url : idig8.com

# @Site :

# @File : spider_douguomeishi.py

# @Software: PyCharm

import json

导入请求

来自多进程导入队列

from handle _ mongoimportmongo _ info

from concurrent.futuresimportthreadpoolexecutor

#创建队列

queue_list=Queue ( )

defHandle_request(URL,data ) :

头={

客户端: 4、

版本: 6916.2、

device: SM-G955N,

SDK:22,5.1.1,

imei: 354730010002552、

channel: zhuzhan,

mac: 00:FF:E2:A2:7B:58,

解决方案: 1440 * 900、

dpi:2.0、

android-id:bcdaf527105cc26f、

pseudo-id:354730010002552,

brand :三星、

呼叫: 2.0、

时间区域: 28800、

语言: zh,

cns:3、

嘉莉:安卓,

#imsi: 310260000000000,

user-agent:Mozilla/5.0(Linux; 安卓5.1.1; sm-g 955 n build/nrd 90 m ( apple WebKit/537.36 ) khtml,like Gecko ) version/4.0 chrome/39.0.0 mobile safari/537.37

lon: 105.566938、

lat: 29.99831,

cid: 512000、

content-type:APP应用程序/x-www-form-urlencoded; charset=utf-8,

Accept-Encoding: gzip,deflate,

Connection: Keep-Alive,

# Cookie: duid=58349118,

Host: api.douguo.net,

#Content-Length: 65

}

response=requests.post(URL=URL,headers=header,data=data ) )

返回响应

def handle_index (

URL=http://API.douguo.net/recipe/flat catalogs

# client=4_ session=1547000257341354730010002552 v=1503650468 _ vs=0

data={

客户端: 4、

_ session:1547000257341354730010002552、

v:1503650468,

_vs:0

}

response=handle_request(URL,data ) ) ) ) ) ) ) ) )。

#print(response.text )。

index _ response _ DIC=JSON.loads ( response.text )

for item _ index index _ response _ DIC [ result ] [ cs ] :

#print(item_index )。

for item _ index _ CSI nitem _ index [ cs ] :

#print(item_index_cs ) )。

for item in item_index_cs[cs] :

# print (项目) )。

data_2={

客户端: 4、

# _ session:1547000257341354730010002552,

keyword:item[name],

_vs :400,

订单: 0

}

#print(data_2) )

queue_list.put(data_2) )。

defHandle_caipu_list(data ) :

print (当前食材:data[keyword] ) )。

caipu _ list _ URL=http://API.douguo.net/recipe/s/0/20;

caipu _ response=handle _ request ( caipu _ list _ URL,data ) ) ) ) ) ) ) ) ) caipu _ response=handle ) ) ) ) caipu )

caipu _ response _ dict=JSON.loads ( caipu _ response.text ) )。

forca IPU _ itemincaipu _ response _ dict [ result ] [ list ] :

caipu_info={}

caipu _ info [ shicai ]=data [ keyword ]

if caipu_item[type]==13 :

caipu _ info [ user _ name ]=caipu _ item [ r ] [ an ]

caipu _ info [ shicai _ id ]=caipu _ item [ r ] [ id ]

caipu _ info [ describe ]=caipu _ item [ r ] [ cook story ].replace (\& amp; quot; n,).replace ),) ) ) )。

caipu _ info [ caipu _ name ]=caipu _ item [ r ] [ n ]

caipu _ info [ Zuo Liao _ list ]=caipu _ item [ r ] [ major ]

#print(caipu_info ) )是

detail _ URL=http://API.douguo.net/recipe/detail/str ( caipu _ info [ shicai _ id ] ) )。

detail_data={

客户端: 4、

_ session:1547000257341354730010002552、

author_id:0,

_vs:2803,

ext:\\\& #039; {query: {kw: \

\\' data[keyword] \\\', src: 2803, idx: 1, type: 13, id: \\\' str(caipu_info[shicai_id]) \\\'}}\\\' } detail_reponse = handle_request(detail_url,detail_data) detail_reponse_dic = json.loads(detail_reponse.text) caipu_info[tips] = detail_reponse_dic[result][recipe][tips] caipu_info[cookstep] = detail_reponse_dic[result][recipe][cookstep] #print(json.dumps(caipu_info)) mongo_info.insert_item(caipu_info) else: continue handle_index() pool = ThreadPoolExecutor(max_workers=20) while queue_list.qsize()>0: pool.submit(handle_caipu_list,queue_list.get())

通过使用代理IP隐藏爬虫

当app运维人员,发现我们的一直在请求他们的服务器,很可能就把咱们的ip给封了,通过代理ip的方式。隐藏自我。

注册申请 abuyun.com

一个小时1元,我申请了一个小时咱们一起使用下

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/1/11 2:40 # @Author : Aries # @Site : # @File : handle_proxy.py # @Software: PyCharm #60.17.177.187 代理出来的ip import requests url = \\\'http://ip.hahado.cn/ip\\\' proxy = {\\\'http\\\':\\\'http://H79623F667Q3936C:84F1527F3EE09817@http-cla.abuyun.com:9030\\\'} response = requests.get(url=url,proxies=proxy) print(response.text)

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/1/9 11:06 # @Author : lm # @Url : idig8.com # @Site : # @File : spider_douguomeishi.py # @Software: PyCharm import json import requests from multiprocessing import Queue from handle_mongo import mongo_info from concurrent.futures import ThreadPoolExecutor #创建队列 queue_list = Queue() def handle_request(url,data): header ={ client: 4, version: 6916.2, device: SM-G955N, sdk: 22,5.1.1, imei: 354730010002552, channel: zhuzhan, mac: 00:FF:E2:A2:7B:58, resolution: 1440*900, dpi:2.0, android-id:bcdaf527105cc26f, pseudo-id:354730010002552, brand:samsung, scale:2.0, timezone:28800, language:zh, cns:3, carrier: Android, #imsi: 310260000000000, user-agent: Mozilla/5.0 (Linux; Android 5.1.1; SM-G955N Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36, lon: 105.566938, lat: 29.99831, cid: 512000, Content-Type: application/x-www-form-urlencoded; charset=utf-8, Accept-Encoding: gzip, deflate, Connection: Keep-Alive, # Cookie: duid=58349118, Host: api.douguo.net, #Content-Length: 65 } proxy = {\\\'http\\\': \\\'http://H79623F667Q3936C:84F1527F3EE09817@http-cla.abuyun.com:9030\\\'} response = requests.post(url=url,headers=header,data=data,proxies=proxy) return response def handle_index(): url = http://api.douguo.net/recipe/flatcatalogs # client=4&_session=1547000257341354730010002552&v=1503650468&_vs=0 data ={ client:4, _session:1547000257341354730010002552, v:1503650468, _vs:0 } response = handle_request(url,data) # print(response.text) index_response_dic = json.loads(response.text) for item_index in index_response_dic[result][cs]: # print(item_index) for item_index_cs in item_index[cs]: # print(item_index_cs) for item in item_index_cs[cs]: #print(item) data_2 ={ client:4, #_session:1547000257341354730010002552, keyword:item[name], _vs :400, order:0 } #print(data_2) queue_list.put(data_2) def handle_caipu_list(data): print(当前的食材:,data[keyword]) caipu_list_url = http://api.douguo.net/recipe/s/0/20; caipu_response = handle_request(caipu_list_url, data) caipu_response_dict = json.loads(caipu_response.text) for caipu_item in caipu_response_dict[result][list]: caipu_info ={} caipu_info[shicai] = data[keyword] if caipu_item[type]==13: caipu_info[user_name] = caipu_item[r][an] caipu_info[shicai_id] = caipu_item[r][id] caipu_info[describe] = caipu_item[r][cookstory].replace(\\\\n,).replace( ,) caipu_info[caipu_name] = caipu_item[r][n] caipu_info[zuoliao_list] = caipu_item[r][major] #print(caipu_info) detail_url = http://api.douguo.net/recipe/detail/ str(caipu_info[shicai_id]) detail_data ={ client:4, _session:1547000257341354730010002552, author_id:0, _vs:2803, ext:\\\'{query: {kw: \\\' data[keyword] \\\', src: 2803, idx: 1, type: 13, id: \\\' str(caipu_info[shicai_id]) \\\'}}\\\' } detail_reponse = handle_request(detail_url,detail_data) detail_reponse_dic = json.loads(detail_reponse.text) caipu_info[tips] = detail_reponse_dic[result][recipe][tips] caipu_info[cookstep] = detail_reponse_dic[result][recipe][cookstep] #print(json.dumps(caipu_info)) mongo_info.insert_item(caipu_info) else: continue handle_index() pool = ThreadPoolExecutor(max_workers=2) while queue_list.qsize()>0: pool.submit(handle_caipu_list,queue_list.get())

PS:本次是app数据抓取的入门。首先是通过模拟器的代理服务,到本地的电脑(安装fiddler),这样fiddler就可以抓取数据了,分析数据这块要凭借自己的经验找到对应的url,如果能分析到url,基本爬虫就写一半。封装请求头。通过fiddler获取的。里面header内容比较多,尝试删除最简化,也是一种反爬虫的策略,有的数据放进去到容易被发现是爬虫了,例如cookies等等,但是有的爬虫爬取数据需要cookies。通过代理的方式设置代理ip,防止爬取过程中同一个ip,一直请求一个接口被发现是爬虫。引入了队列的目的就是为了使用线程池的时候方便提取。然后放入mongodb中。这样使用多线程的app数据就完成了。

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码官网:www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3