遇到这种情况,我们应该如何对网页内容进行爬取呢?一般有两种方法:
(1)从网页响应中找到 JS 脚本返回的数据(大多是 json 格式,也有 xml 格式。);
(2)使用 Selenium 对网页进行模拟访问。
下面我们将介绍第一种方法。第二种方法可以参考这里。
1.2 从网页响应中找到 JS 脚本返回的数据 既然网页内容是由 JS 动态生成加载的,那么 JS 就需要先对某个接口进行调用,然后根据接口返回的数据再进行加载和渲染。那我们可以先找到 JS 调用的数据接口,从数据接口中找到网页中最后呈现的数据。 下面我们就以应用宝的搜索应用页面为例,进行说明。
1.2.1 找到 JS 请求的数据接口
按照如下步骤进行操作:
将看到如下信息:
-
打开应用宝的搜索页面(https://android.myapp.com/myapp/search.htm)
-
按 F12 打开网页调试工具
-
选择 “Network” 选项卡
-
选择 “XHR”(即 XMLHTTPRequest,是 Ajax(Asynchronous JavaScript and XML,异步的 JavaScript 和 XML) 中的概念。 )
-
输入应用名(例如:微信)
在这里,我们看到只有一个 request(其他网页可能会存在多个)。点击这个 request,然后选择 “Preview”,可以看到如下数据:
在上面的数据中,我们发现了“微信”、“多开助手”等信息,这些就是搜索出来的应用列表信息。
通过上面的分析,可以知道搜索出来的应用列表信息正是通过这个 request 获取的。这个 request 对应 URL 为 https://android.myapp.com/myapp/searchAjax.htm?kw=%E5%BE%AE%E4%BF%A1&pns=&sid=(获取方法:将鼠标移动到这个 request 上 -> 然后右键单击 -> Copy -> Copy link address)。
将上面的 URL 在浏览器中打开,会返回一串数据。看起来似乎很乱,但实际上是 JSON 格式的数据。
这样,我们就找到了 JS 请求的数据接口。
1.2.2 URL 编码 上面我们找到的 JS 请求的数据接口是 https://android.myapp.com/myapp/searchAjax.htm?kw=%E5%BE%AE%E4%BF%A1&pns=&sid=,但是其中的 %E5%BE%AE%E4%BF%A1 代表什么意思呢?
实际上 %E5%BE%AE%E4%BF%A1
是中文 微信
的 URL 编码。在 Python 中,可以使用 urllib.parse.quote()
得到,即 '%E5%BE%AE%E4%BF%A1' = urllib.parse.quote('微信')
。
按照标准,URL 中只允许包含英文字母、数字以及部分符号,其他字符(比如中文)是不符合 URL 标准的。这个时候就需要进行 URL 编码。
1.2.3 代码实现
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-Wb1gNnGX-1711060565363)]