爬虫笔记37:android控件ListView的讲解、fiddler的安装与使用、fiddler和模拟器的配合使用、案例(爬取豆果美食app)

一、android控件ListView的讲解(了解即可)
ListView的用处:可以用来开发app

环境:
1 、安装jdk :就可以使用java这门语言进行开发了。安装过程中提示jre是否要安装,不用安装:因为jdk里包含了jre。
2 、安装android studio (ec),需要专门单独学习这个开发工具的使用。(就是用这个开发app)

二、fiddler的安装与使用
1、fiddler是什么?
是一个HTTP协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,简单来说就是一个抓包工具。官网 https://www.telerik.com/fiddler
在这里插入图片描述
​2、fiddler的优势
(1) 简单好用
(2)它有一个友好的和用户做交互的界面
(3)支持市面上大多数的浏览器
(4)支持大多数的移动设备

3、fiddler的安装
第一步 :安装fiddler
(1)选择安装路径,完成安装后,在安装路径中找到fiddler.exe建立桌面快捷方式。
在这里插入图片描述
(2)fiddler设置:
在桌面双击快捷键进入fiddler交互界面,依次完成设置:
在这里插入图片描述
在这里插入图片描述
第二步 :switchomega插件的安装
(1)点击网页右上角的图标按步骤完成插件的安装,
在这里插入图片描述
(2)安装完成后,依次点击下图红框,
在这里插入图片描述
进入到选项页面:
在这里插入图片描述
并按下图设置数据:在这里插入图片描述
最后点击:应用选项(即上图中绿色处)
或者也可以参考这篇文章:https://www.cnblogs.com/nicole-zhang/p/11955881.html

4、fiddler的页面结构
在这里插入图片描述
五、fiddler的使用(可以百度一个基础视频看看基本操作介绍)
capture traffic 是否启动抓包
save保存数据包

六、模拟器的配置
(1)在cmd查找ip: 输入ipconfig回车
在这里插入图片描述
(2)在夜神模拟器上的设置:
在这里插入图片描述
(2.1)点击系统设置 – 开启网络桥接模式( 第一次需要安装驱动点击确认即可)
在这里插入图片描述
(2.2)点击手机设置–WLAN – WiredSSID(鼠标左键长按直到出现弹框为止) – 修改网络 – 代理服务器主机名(即cmd-ipconfig查询到的ip) --端口(fiddler设置的端口8888) – 保存
在这里插入图片描述
七、fiddler和模拟器的配合使用(即验证上述配置是否成功)
(1)双击打开夜神模拟器(这是必须的,不然会提示错误)
(2)启动夜神模拟器,双击其界面上的浏览器:
在这里插入图片描述
提示有证书问题,我们来安装证书,点击继续
在这里插入图片描述
在浏览器输入框输入我们的ip地址(即cmd-ipconfig查询到的ip)和fiddler设置的端口号8888,回车
在这里插入图片描述
点击弹出字段的蓝思部分,安装diddler证书。
在这里插入图片描述
并自定义命名:
在这里插入图片描述
在这里插入图片描述
点击确定,

在这里插入图片描述
点击密码,输入zq159821…(因为这里设置了密码,以后登录模拟器的时候,也会要求输入该密码登录)
在这里插入图片描述
弹出这个吐司证明安装成功了。
(3)验证:
首先fiddler打开着,在模拟器的浏览器输入框,输入:www.daomubiji.com,回车;
在这里插入图片描述
浏览器访问到盗墓笔记的网页后,在fiddler里find按钮,查找:盗墓笔记,
在这里插入图片描述
得到结果,即证明上述设置步骤成功了。

八、案例(爬取豆果美食app)
1 、在模拟器是安装豆果美食app
在豌豆荚官网搜索豆果美食,下载该apk文件,并直接拖进模拟器界面内,就完成了安装。

2、爬取
需求: 菜谱分类里面所有分类的数据,如下图:
在这里插入图片描述
第一步 页面结构分析
(1)先打开fiddler,然后在模拟器界面点击进入豆果美食,可以看到fiddler流在不停刷新。
在这里插入图片描述
(2)点击find按钮,输入api.douguo.net,找到recipe行(中文意思是菜谱)并点击选中它,右边的http请求栏和http响应栏,就会跳出,我们都点击Raw按钮。
(2.1)复制http请求栏的内容,如下:

POST http://api.douguo.net/recipe/flatcatalogs HTTP/1.1
client: 4
version: 6922.2
device: MI 6
sdk: 19,4.4.2
imei: 863254010385929
channel: zhuzhan
mac: 38:59:F9:B4:F8:D5
resolution: 1440*900
dpi: 2.0
android-id: 3859f9b4f8d53198
pseudo-id: 9b4f8d531983859f
brand: Xiaomi
scale: 2.0
timezone: 28800
language: zh
cns: 0
carrier: CMCC
imsi: 460073859249180
user-agent: Mozilla/5.0 (Linux; Android 4.4.2; MI 6  Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
reach: 1
newbie: 0
lon: 104.526038
lat: 25.835099
cid: 520200
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: duid=69083915
Host: api.douguo.net
Content-Length: 68

client=4&_session=1633786016309863254010385929&v=1503650468&_vs=2305

其中,第一行POST中就体现了我们的目标url,即:

http://api.douguo.net/recipe/flatcatalogs

而最后一行就是我们向目标url发起请求时要携带数据data,即:

client=4&_session=1633786016309863254010385929&v=1503650468&_vs=2305

(注意,要把它改成字典格式)
剩下的中间部分,就是headers,当然了,其中有些是不用一定要的数据,在具体的实践中,我们可以一个个去试,哪些是可以不要的,比如:cookie可以先注释掉,不行再开。

(2.2)复制http响应栏中的内容,如下:

{"state":"success","result":{"nv":"1633780900","cs":[{"name":"\u70ed\u95e8","id":"1","ju":"recipes:\/\/www.douguo.com\/search?key=\u70ed\u95e8&_vs=400","cs":[{"name":"\u5bb6\u5e38\u83dc","id":"18","ju":"recipes:\/\/www.douguo.com\/search?key=\u5bb6\u5e38\u83dc&_vs=400","cs":[{"name":"\u7ea2\u70e7\u8089","id":"7891","ju":"recipes:\/\/www.douguo.com\/search?key=\u7ea2\u70e7\u8089&_vs=400","cs":[],"image_url":""},{"name":"\u53ef\u4e50\u9e21\u7fc5","id":"7892","ju":"recipes:\/\/www.douguo.com\/search?key=\u53ef\u4e50\u9e21\u7fc5&_vs=400","cs":[],"image_url":""},{"name":"\u7cd6\u918b\u6392\u9aa8","id":"7893","ju":"recipes:\/\/www.douguo.com\/search?key=\u7cd6\u918b\u6392\u9aa8&_vs=400","cs":[],"image_url":""},{"name":"\u9c7c\u9999\u8089\u4e1d","id":"7894","ju":"recipes:\/\/www.douguo.com\/search?key=\u9c7c\u9999\u8089\u4e1d&_vs=400","cs":[],"image_url":""},{"name":"\u7ea2\u70e7\u6392\u9aa8","id":"7895","ju":"recipes:\/\/www.douguo.com\/search?key=\u7ea2\u70e7\u6392\u9aa8&_vs=400","cs":[],"image_url":""},{"name":"\u5bab\u4fdd\u9e21\u4e01","id":"7896","ju":"recipes:\/\/www.douguo.com\/search?key=\u5bab\u4fdd\u9e21\u4e01&_vs=400","cs":[],"image_url":""},{"name":"\u897f\u7ea2\u67ff\u7092\u9e21\u86cb","id":"7897","ju":"recipes:\/\/www.douguo.com\/search?key=\u897f\u7ea2\u67ff\u7092\u9e21\u86cb&_vs=400","cs":[],"image_url":""},{"name":"\u6e05\u84b8\u9c88\u9c7c","id":"7898","ju":"recipes:\/\/www.douguo.com\/search?key=\u6e05\u84b8\u9c88\u9c7c&_vs=400","cs":[],"image_url":""},{"name":"\u9178\u83dc\u9c7c","id":"7899","ju":"recipes:\/\/www.douguo.com\/search?key=\u9178\u83dc\u9c7c&_vs=400","cs":[],"image_url":""}],"image_url":"https:\/\/i1.douguo.com\/upload\/article\/d\/3\/d\/d3dde5f60ee0ab38430ef180fa7203dd.jpg"},{"name":"\u4e0b\u996d\u83dc","id":"660","ju":"recipes:\/\/www.douguo.com\/search?key=\u4e0b\u996d\u83dc&_vs=400","cs":[{"name":"\u6cb9\u7116\u5927\u867e","id":"7900","ju":"recipes:\/\/www.douguo.com\/search?key=\u6cb9\u7116\u5927\u867e&_vs=400","cs":[],"image_url":""},{"name":"\u9ebb\u5a46\u8c46\u8150","id":"7901","

我们可以将它在网站json.cn中查看,具体是什么内容:
在这里插入图片描述
我们随意选取name字段的值,通过下面代码,转化成中文:
在这里插入图片描述

import urllib.parse

a='\u70ed\u95e8'
result=urllib.parse.unquote(a)
print(result)

在这里插入图片描述
或者,我们直接点击模拟器http响应栏中的json按钮,如下:
在这里插入图片描述
由此,这里就是我们要爬取的数据。

第二步 实现步骤

import requests
import json

# 发请求获取响应结果
def handel_request(url,data):
    header = {
        "client": "4",
        "version": "6922.2",
        "device": "MI 6",
        "sdk": "19,4.4.2",
        "imei": "863254010448503",
        "channel": "qqkp",
        # "mac": "44:85:00:5E:5B:28",
        "resolution": "720*1280",
        "dpi": "1.5",
        # "android-id": "4485005e5b281516",
        # "pseudo-id": "05e5b28151644850",
        "brand": "Xiaomi",
        "scale": "1.5",
        "timezone": "28800",
        "language": "zh",
        "cns": "3",
        "carrier": "CMCC",
        # "imsi": "460074485009491",
        "user-agent": "Mozilla/5.0 (Linux; Android 4.4.2; MI 6  Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36",
        "reach": "1",
        "newbie": "1",
        "lon": "116.568176",
        "lat": "26.997867",
        "cid": "361000",
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
        "Accept-Encoding": "gzip, deflate",
        "Connection": "Keep-Alive",
        # "Cookie": "duid=57158696",
        "Host": "api.douguo.net",
        # "Content-Length": "68",
    }

    response = requests.get(url=url,headers=header,data=data)
    return response



# 解析数据
def handle_index():
    # 目标url
    url = 'http://api.douguo.net/recipe/flatcatalogs'
    data = {
        "client": "4",
        # "_session": "1537295931652863254010448503",
        # "v": "1503650468",
        "_vs": "2305",
    }

    response = handel_request(url=url,data=data)
    index_response_dict = json.loads(response.text)
    for index_item in index_response_dict['result']['cs']:
        for index_item_1 in index_item['cs']:
            for item in index_item_1['cs']:
                print(item)

if __name__ == '__main__':
    handle_index()

运行结果:(可以直接运行py文件,不用打开fiddler和模拟器,它们只是分析工具)
在这里插入图片描述

补充:爬取全民小视频

import requests
import json


def handel_request(url, data):
    header = {
        "Referer": "https://quanmin.baidu.com/",
        "User-Agent": "Mozilla/5.0 (Linux; Android 5.1.1; MI 6  Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 bdminivideo/3.2.0.10 arsdk/5030 (Baidu; P1 5.1.1)",
        "Host": "quanmin.baidu.com",
        # 'Cookie': 'BAIDUID=35116BA5B916871829C37B1C4CFDF85D:FG=1; BAIDUZID=HIBz0cAVtiQTSJXkx3W19OACU9gPP9ZM2dHuCmGVx-BFhHUBTr2PLvEzV-aACilkuQ1g2LpuJnHD4PZmiCO9pFcO1vfYMO35P1ZsHbl8hZLw; BAIDUCUID=luvI80u-2i0ki2af_aHa8_uU28gqOS8K_u-1u08rva8ykS8xlNWpRyxPA'
    }
    response = requests.post(url, headers=header, data=data)
    return response

def handle_index():
    url = 'https://quanmin.baidu.com/appui/video/feed?log=vhk&tn=1021212e&ctn=1021212e&imei=0&od=&cuid=F551E670DB1D64B2047009C5569DFF2E|VC3EYOTK5&bdboxcuid=null&os=android&osbranch=a0&ua=900_1440_320&ut=MI%206%20_5.1.1_22_Xiaomi&uh=Xiaomi%20,qcom,msm8998,1&apiv=1.0.0.10&appv=3020010&version=3.2.0.10&life=1624977343&clife=1624977343&hid=664A787BC87F85BC5D09FB2E535CF8C5&network=1&network_state=20&sids=10012_3-10033_3-10034_4-15014_2-15094_1-3258_2&teenager=0&oaid=&activity_ext=&c3_aid=A00-5KIB3QK746NCOXYCHF6GPEXXJF6MNJDE-VQWTG7CI&push_source=no_push&yyuser=1&api_name=feed&sign=f22d45e5b28873d3431b610e3c4fe85c'
    data = {
        'subTab': 'faxian',
        'subTag': 'immersion',
        'conf': '%7B%22autoplay%22%3A%220%22%7D',
        'location': '%7B%22prov%22%3A%22%E5%AE%89%E5%BE%BD%E7%9C%81%22%2C%22city%22%3A%22%E5%AE%89%E5%BA%86%E5%B8%82%22%2C%22county%22%3A%22%E5%AE%BF%E6%9D%BE%E5%8E%BF%22%2C%22city-code%22%3A%22130%22%2C%22street%22%3A%22%22%2C%22latitude%22%3A30.004295%2C%22longitude%22%3A116.574989%7D',
        'refresh_type': 'init',
        'is_close_individual': 0,
        'param_ext': '%7B%22entrance_vid%22%3A%220%22%2C%22tabfrom%22%3A%22detail%22%7D',
        'visit_id': '1625033654',
        'refresh_state': 6,
        'refresh_index': 1,
        'confirmed_interes': '%7B%22confirmed_list%22%3A%5B%5D%2C%22threshold%22%3A0%2C%22is_triggered_refresh%22%3A0%7D',
    }

    response = handel_request(url=url, data=data)
    index_response_dict = json.loads(response.text)
    lst = []
    for index_item in index_response_dict['feed']['data']['list']:

        for index_item_1 in index_item['content']['videoInfo']['multiClarity']:

            video_urls = index_item_1['videoPlayUrl']
            lst.append(video_urls)
            # print(lst)
    return lst

def write_data():
    name = 1
    lst = handle_index()
    # print(lst)
    for url in lst:
        video_res = requests.get(url)
        video_result = video_res.content

        with open('video/%s.mp4'%name,'wb') as f:
            f.write(video_result)

        name += 1

write_data()

结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值