云计算
欢迎转载原创文章。 请转载。 从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