不能否认, 它是相当出色的爬虫框架, 其借用的是相似的办法去爬取网页, 即所爬取的是静态页面, 然而实际情形是, 多数网站均为动态的, 我们所见到的正常页面皆是经浏览器渲染后的成果, 倘若径直运用爬取网页的方式, 极有可能无法获取到预期的数据。一种看似理所当然的办法, 便是借助自定义, 采用类似于这种模拟浏览器行为的途径, 从而直接获取到渲染好的html内容, 这般做无疑是行得通的, 而且也能够较为轻易地实现对接, 其存在的欠缺之处在于, 会造成资源消耗的增加。另外存在一种能够直接抵达本质的途径, 那便是寻找到数据的起始源头, 其中有的借助ajax请求去获取数据源, 有的把数据源放置于js代码里, 借助浏览器开发工具对交互过程予以分析, 当找到数据源头后, 要是属于ajax请求, 只要直接请求对应的接口便可以获取到数据, 本文会对数据源在js文件中的提取方式进行介绍。举个例子在此处, 是以某文库的搜索结果当作例子的, 要是直接去进行页面爬取, 那是无法看到下图里的搜索结果的, 经过对页面结构加以分析, 发现源头数据处于脚本之中, 脚本里面大致上就是类似于json的数据对象, 只要获取到js脚本的对象数据, 那就等同于得到了搜索结果。安装能够对js脚本予以解析, 进而获取其中的数据对象, 在此推荐这个库, 它可以直接把js里的数据对象返回, 极为便利, 在使用前需借助pip安装此库。要留意的是, 其核心代码是用c编写而成, 所以在安装时要事先安装c构建工具。1. 如果事先没有安装c构建工具会报错2. 访问上面错误提示中的链接下载c构建工具并安装安装成功之后再次执行pip 安装成功shellShell能够运用交互形式迅速验证用于提取数据的代码, 并非要一次次去运行爬虫进行验证, 极为高效, 接下来就要演示怎样借助shell将js中的数据提取出来。启动 shellscrapy shell https://wenku.baidu.com/search?wordpythonlm0od0frtop_homeieutf-8_wkts_1711155481643wkQuerypython根据返回的结果而言, 已然获取到所爬取的页面内容, 紧接着主要会以其进行数据提取。我们已然清楚数据源处于内里, 径直运用.css()能够获取全部的, 我们所需求的是第二个当中的脚本。从中直接取出js脚本, 通过.css(::text)来进行获取。最后就是导入库执行js代码并获取返回的数据对象import chompjs data chompjs.parse_js_object(js_code)data属于dict字典对象, 所需的数据处于‘’这个键当中, 到这里, 便成功完成啦。我来做个简单总结, 我觉得运用写爬虫根本没必要用到像这般的模拟浏览器下载器, 解决之道是寻找到数据的源头, 没有数据源的话动态网站也就没办法进行渲染了。然而, 此处遗漏了一个关键的环节, 那便是登录, 不同的平台登录机制存在差异, 形形色色的验证码令人烦扰, 直接对抗极有可能撞得头破血流, 所以我不提议将登录部分编写在爬虫之中, 一种更为优良的方案是单独去开发一个池服务, 池服务承担着管理所有平台用户登录的职责, 对于无法自动登录的情况就提供手工登录加以解决, 并且通过 web api 来提供随机获取的功能, 借助调用池的 api 来达成模拟已登录用户状态的目的。