爬虫进阶(三)

总第69篇

01|背景介绍:

我们前面的几篇推文都是针对网页版的内容进行抓取,但是有的时候当我们想要的数据没有网页版只有APP端时,这个时候该怎么办呢?是人工去摘抄我们想要的数据吗?我们肯定不想这么做,我们想想怎样网页版和APP版有什么不同,是什么原因导致我们不能够按以往的方式来正常抓取数据。

要想找到原因,我们需要重温一下网页版爬虫的基本流程,查看一下APP版的爬虫是卡在哪里了,通过对比发现,网页版爬虫的第一步就是获取目标URL,但是APP版就卡在第一步,我们没法获取APP版的URL。

那么我们只要解决了APP版URL的这个问题就可以解决APP版爬取数据的问题了。

接下来寻找能够获取APP版URL的工具,看看有没有前人已经造好这样的轮子,在搜索的过程中发现真有这样神奇的工具,那就是Fiddler这个轮子。

02|Fiddler是什么:

(Fiddler官网图片)

汉译及百度:Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯(通俗一点就是它可以记录你所有访问的网站情况),设置断点,查看所有的“进出”Fiddler的数据包扩:cookie,html,js,css等文件。

03|Fiddler的下载与安装:

这里也不重复造轮子了,也直接采用前人的造好的轮子。

天真无邪CSDN博客:http://blog.csdn.net/jiangwei0910410003/article/details/19806999

04|获取目标URL:

把Fiddler安装好以后,在手机上下载好目标APP,然后就可以开始操作了。这里我们以获取收趣APP中热门板块为例。

当我们打开APP中的该页面时,会出现好多api.shouqu.me,Fiddler会把一个页面分成好多URL,我们的重点是找出我们真正需要的那个URL。

(众多api.shouqu.me)

我的逻辑是先找出Content-Type为application对应的api.shouqu.me,然后依次点击前几个出现的内容。

(带有Content-Type的api)

具体查看哪个URL是目标URL,可以通过下图的界面(Fiddler右侧界面)来获取,该界面由request和response两部分组成。

当选中左侧界面的一个URL时,右侧界面会出现下图一这种显示。点击红色框内的部分就会出现图二的内容,通过将图二中的内容和图三中的内容进行对比发现,该URL就是我们想要的目标 URL。

(图一)

(图二)

(图三)

05|请求URL:

获得目标URL以后我们需要利用request来请求URL,在这里我们需要注意请求方式(post/get),同时也需要设置headers,这两部分内容均可以在Fiddler客户端的右侧界面中的上半部分获取。

找到这些以后开始编写代码了,代码如下:

import requests
headers={    
    "User-Agent":"okhttp/3.6.0",    
    "Content-Type": "application/x-www-form-urlencoded",
}
url="http://api.shouqu.me/api_service/api/v1/daily/dailyMark"
response=requests.post(url,headers=headers)
response.text

运行代码以后出现下面的结果,并没有出现预想的结果。

试了好几次,上网查了很久发现是URL的问题,是因为目标url复制的有问题,详细参考下面的博文:

Fiddler抓包——get请求:http://www.cnblogs.com/yoyoketang/p/6765199.html Fiddler抓包——post请求:http://www.cnblogs.com/yoyoketang/p/6771696.html

经过上面的两篇文章以后我们对URL进行了修改,具体如下:

import requests
headers={   
     "token": "3591fabd529e94af851cc995083257b415c6b9054dc",  
     "Content-Type": "application/x-www-form-urlencoded",   
     "Content-Length": "173",    
     "Host": "api.shouqu.me",   
     "Connection": "Keep-Alive",  
     "Accept-Encoding": "gzip",   
     "User-Agent": "okhttp/3.6.0",
}
url="http://api.shouqu.me/api_service/api/v1/daily/dailyMark/s?osv=5.1&dem=Meizu&imei=868746026657881&userId=10127480&pageSize=20&mac=68%3A3e%3A34%3A26%3A24%3A01&apv=2.0.3.1&lastUpDate=1496455596&pageNo=1&pThemeid=0&os=android&model=MX5"
response=requests.post(url,headers=headers)
response.text

运行代码以后出现了ConnectionError,并没有得到预想的结果。

又经过一段时间的上网查阅以后,发现是因为User-Agent的问题。在上面的代码中我们可以看出User-Agent:”okhttp/3.6.0”,而实际中是“Mozilla/5.0 (Linux; Android 6.0.1; MI 4LTE Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) ”这种的。我们需要把前面这种切换成后面这种。切换到后面这种形式以后就可以正常request了,具体转化参考博文:

http://www.open-open.com/lib/view/open1480922472121.html

一般情况下,显示的User-Agent都是正常的不需要进行转化,特别APP(比如收趣)需要,下面列举一个不需要进行转化的,以知乎APP为例。

import requests
headers={   
     "Authorization": "Bearer 2.0ABBM1DS23QgAUIJWoZwSCwwAAABgAlVN6C5HWQDE7mp84KUOjpcKU2mlsS8vSN75mg",    "User-Agent": "Futureve/4.52.1 Mozilla/5.0 (Linux; Android 5.1; MX5 Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.146 Mobile Safari/537.36 Google-HTTP-Java-Client/1.22.0 (gzip)",   
     "Cookie": "acw_tc=AQAAAAzKO0a/WAYA07x4q1ddrDhjA2Ck; aliyungf_tc=AQAAAPDogxwrKAYA07x4qwvl2q8qsrho"}
url="https://api.zhihu.com/topstory?action=pull&before_id=29&limit=10&action_feed=True&session_token=27f6e12ef281be55176934dcaf29bba0"
response=requests.get(url,headers=headers)
response.text

通过上面的代码对知乎APP进行数据获取,我们可以得到下图这样的结果,很明显这是得到正确的的响应。

接下来就是利用BS库进行解析获取里面的内容即可,与以往的爬虫一致,由于版面过长就不进行赘述了。

你还可以看以下文章:

爬虫进阶(一)

爬虫进阶(二)

原文发布于微信公众号 - 张俊红(zhangjunhong0428)

原文发表时间:2017-06-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏自动化测试实战

《selenium2 python 自动化测试实战》(13)——上传文件

39360
来自专栏老马寒门IT

05-移动端开发教程-CSS3兼容处理

CSS3的标准并没有全部定稿,目前CSS3的标准分成了不同的模块,具体的标准由各个模块推动标准和定稿,标准制定的过程中,浏览器也在不断的发新的版本来兼容新的标准...

24460
来自专栏DeveWork

WordPress免插件仅代码实现文章归档(模板页面)I

许多博友喜欢为自己的博客建立一个文章归档页面。WordPress 可以用插件来实现,但我们一贯遵守可以不用插件则不用的准则,现在Jeff 就为大家带来免插件仅代...

23880
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET - 插件运行容器

     上一篇AgileEAS.NET之插件接口IModule中我们介绍了EAS.NET模块插件契约,在本文我们将介绍一下调用插件的运行容器,即平台。    ...

22780
来自专栏前端人人

React多页面应用4(webpack自动化生成多入口页面)

本教程总共7篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1.React多页面应用1(webpack开发环境搭建,包...

61950
来自专栏QQ音乐技术团队的专栏

electron 构建跨平台桌面应用

昨日(2016.09.13)本文发表后,获得了一定的阅读和转发量,但经部分网友反馈和仔细审核后发现,在与 NW.js 对比的环节,言辞欠妥,且数据的真实性有待考...

1.3K110
来自专栏君赏技术博客

第一次和你见面,我就深深的爱上你-Xcode Bot

最近研究起了 APP 的自动化测试,发现了 Xcode Bot自动化打包测试发布的功能,就开始研究起来。

20310
来自专栏ionic3+

ionic cordova resources问题说明

ionic cordova resources是用于一键打包生成各分辨率icon和splash的命令,在使用过程中可能会遇到以下问题:

14420
来自专栏日常学python

Ajax网页爬取案例详解

首先列举出一些python中爬虫常用的库,用之前需要先下载好,本文假设你已经安装好相应的库。

44410
来自专栏张戈的专栏

WordPress静态缓存三剑客,强力推荐!

之前一直用的 wp-super-cache,效果确实非常不错!网络不出问题的话,页面基本秒开。可惜,这款插件有时候会缓存我的手机主题,导致在电脑上浏览时,呈现的...

47850

扫码关注云+社区

领取腾讯云代金券