「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水
简介:没用过爬虫,现在有门课正好需要我们去学,于是试了下。想从实践入手,因此,给自己提了个需求:『把微信公众号的授权管理页面的开白名单抓出来』。并没有什么难度,这是我第一次独立写 JavaScript 脚本(以前都是照着教程写小儿科…),道理和 python 是差不多的,我录了视频,对每个步骤、分析过程、基本的道理进行讲解。文末是全部代码。
文章目录
- 视频
- 以下是视频思路与代码
- 问题分析
- 为什么暂时不用 python
- 代码
- 欢迎给我提建议
视频
「自学心得」入门爬虫,先抛开python,从手边的『浏览器』开始玩起!
以下是视频思路与代码
问题分析
这个问题的数据量非常“微小”,我只是想把网页上的东西提取出来而已(取代人的手动复制粘贴)。
我们知道,我们的浏览器之所以能显示网页,原理可以简单理解为:
- 第一步,我们本地的设备给网站发请求
- 第二步,网站验证了我们的权限,给我们发信息(以
.html
.css
.js
文件的形式) - 第三步,我们本地设备的浏览器,理解这些代码,并且根据这些代码的指令,绘制出图片,就是我们看到的“网页”
这也就是为什么我跟我的课程上的:我们能看到的东西,我们一定能爬下来。
因为我们看到的内容,一定都是由 下载到本地的代码
编译出来的。本地的东西,还不许我随便用吗?
为什么暂时不用 python
第一次做爬虫,我没有选择用 python ,因为我发现我这个项目里, python 有点“舍近求远”,体现不出自己的优势。
如上,如果使用 python ,则会在 第二步,网站验证了我们的权限,给我们发信息
这一步有些吃力。
我们需要使用 python 模拟登陆,否则,网站不会认为我们有权限,也就不会把账号里的信息发过来。
那么,何不直接在浏览器中直接进行处理呢?
- 浏览器可以直接“看得懂”的语言是
javascript
- 视频中,我将演示,如何用浏览器快速得定位元素、发现规律,在代码中获取
代码
function get_name_and_account(number=1) {number = number.toString()let name_url_1 = "#app > div.weui-desktop-layout__main__bd > div > div.s_table_wrp.whitelist_table > div.s_table > ul.s_tbody > li:nth-child("let name_url_2 = ") > div > div.s_cell.biz_info.tl > div > span > div > div.info > h4"let account_url_1 = "#app > div.weui-desktop-layout__main__bd > div > div.s_table_wrp.whitelist_table > div.s_table > ul.s_tbody > li:nth-child("let account_url_2 = ") > div > div.s_cell.biz_info.tl > div > div > div > div > div > div > p:nth-child(3) > span"// 把字符串拼接起来,然后根据这个字符串 selector 信息获取元素let name = document.querySelector(name_url_1 + number + name_url_2)let account = document.querySelector(account_url_1 + number + account_url_2)// 获取元素后,用 .textContent 属性提取文本return {"name": name.textContent, "account": account.textContent}
}// get_name_and_account(10);function get_this_page() {let this_page_list = []for (let i=1; i<=10; i++) {try {// 这里我做了一个 try {} catch {}// 考虑到最后一页的元素个数可能小于 10// 因此如果去 get_name_and_account(10)// 会报错;因此,使用 try 把错误抓住// 并让程序继续进行下去,而不是因为错误退出let obj = get_name_and_account(i)this_page_list.push(obj)} catch(e) {console.log(e);return this_page_list;}}return this_page_list;
}function next_page() {let total_page_num = document.querySelector("#app > div.weui-desktop-layout__main__bd > div > div.pagination_wrp > div > span.weui-desktop-pagination__nav > span > label:nth-child(3)")let this_page_num = document.querySelector("#app > div.weui-desktop-layout__main__bd > div > div.pagination_wrp > div > span.weui-desktop-pagination__nav > span > label:nth-child(1)")// 把字符串转换为十进制数值total_page_num = parseInt(total_page_num.textContent, 10)this_page_num = parseInt(this_page_num.textContent, 10)// 这里是在判断:是不是到了最后一页了?// 到了,则不翻页,返回 false ;// 否则,执行之后的翻页逻辑if (this_page_num == total_page_num) {return false;}// 获取 button 元素button = document.querySelector("#app > div.weui-desktop-layout__main__bd > div > div.pagination_wrp > div > span.weui-desktop-pagination__nav > a")// 并调用 click() 方法button.click();// 上述代码并不是总起作用// 因此可以考虑进行改进:// 不用 selector 获取,而是获取 button 类,然后进行条件判断// 有大佬有更好的方法,欢迎告诉我:piperliu@qq.comreturn true;
}function popupCenter(text, title=null, w=800, h=screen.height) {w = w > screen.availWidth? screen.availWidth : w;h = h > screen.availHeight ? screen.availHeight : h;var x = screen.availWidth / 2 - w / 2;var y = screen.availHeight / 2 - h / 2;x = x < 0 ? 0 : x;y = y < 0 ? 0 : y;var win;try {win = window.open('', title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + y + ', left=' + x);win.opener = null;} catch (e) {win = window.open('', title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + y + ', left=' + x);log(e);}if (window.focus) {win.focus();}// 下面事加入一段文本let a = win.document.createElement('a')// 为列表换行,正则表达式全局匹配用 gtext = text.replace(/\},/g, "}\n")text = text + "\n"a.innerText = textwin.document.body.appendChild(a)return win;}function easy() {let this_page_list = get_this_page();s = JSON.stringify(this_page_list).slice(1, -1);console.log(s)popupCenter(s)
// next_page();
}// 运行一次脚本
// 就是调用一次 easy()
// 就会获取本页开白账号列表
easy()function main() {var total_page_list = []do {let this_page_list = get_this_page();total_page_list.concat(this_page_list);} while (next_page());console.log(total_page_list)return total_page_list;
}// test 函数只是用于局部测试
// 没有实际功能
function test() {
// let test_obj_1 = get_name_and_account(1)
// console.log(test_obj_1)// let test_obj_2 = get_this_page()
// console.log(test_obj_2)// let test_obj_3 = next_page();
}// test();// main();
欢迎给我提建议
最后,这是我第一次用 js 解决问题,欢迎加我微信 PiperLHJ ,加入交流群;或者 piperliu@qq.com 给我提批评建议。
「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水相关推荐
- 「SAP技术」SAP 如何看序列号被包在哪些HU里?
「SAP技术」SAP 如何看序列号被包在哪些HU里? 事务代码SE16 ,表名OBJK, 输入物料号,序列号,HeadTable 输入值SER06, 查询结果如下, 根据objlist, 去表ser0 ...
- 【Python爬虫脚本】拒绝黄牛从我做起!Python自动抢购脚本,准点原价秒杀飞天茅台!!!
前言 点击下方视频即可查看详细教程 [Python爬虫脚本]拒绝黄牛从我做起!Python自动抢购脚本,准点原价秒杀飞天茅台!!! 源码领取 上述这份完整版的源码课件已经上传CSDN官方,朋友们如果需 ...
- 「爬虫教程」吐血整理,最详细的爬虫入门教程
初识爬虫 学习爬虫之前,我们首先得了解什么是爬虫.来自于百度百科的解释: 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息 ...
- Python爬虫入门教程:超级简单的Python爬虫教程
这是一篇详细介绍 [Python]爬虫入门的教程,从实战出发,适合初学者.读者只需在阅读过程紧跟文章思路,理清相应的实现代码,30 分钟即可学会编写简单的 Python 爬虫. 这篇 Python 爬 ...
- python爬虫入门教程pdf-从零开始学Python网络爬虫 PDF 原书扫描版
给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.网络爬虫方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小143.9 MB,罗攀编写,目前豆瓣.亚马逊.当当. ...
- 给国企定制小程序,这家「云服务商」 1 个月搞定
知晓云 高效.稳定的知晓云云服务 + 企业定制化服务,已成为各行业上云的首选. 近期,知晓云帮助国企单位党支部顺利上线「智慧政企党建小程序」,为内部员工提供一个集「宣传.管理.教育.服务.沟通.考核」 ...
- ise 时钟约束_「新手入门」ISE工程升级到Vivado及板级信号调试技术
由于疫情,大家最近都只能在家中进行学习.同时实验室的研一同学也在通过Teamviewer进行培训项目的实际操作.这次把两位同学的研究成果给大家分享一下,老司机们可以重温一下当年自己新手时的情景,新司机 ...
- 「数据分析入门」某线下连锁水果店销售数据分析
所有人刚接触到数据分析岗位的时候,大家都在告诉他,数据分析师要有分析思维,懂业务流程balabala-直接给新人劝退,相信大多数的小白跟我当初一样,面对这个问题,我内心是无比的excuse me??? ...
- 「Flask入门」让它跑起来
在 Ubuntu 20.04 上安装 Flask,首先要检查系统是否安装了 python3, python3 -V 对应输出为, Python 3.8.5 则为正常,接着安装 python 的虚拟环境 ...
最新文章
- 如何构建顶部导航条_如何构建导航栏
- plotly可视化绘制共享坐标轴图
- 1249. 移除无效的括号
- mysql游标表间数据迁移_FalseMySQL存储过程--gt;通过游标遍历和异常处理迁移数据到历史表-mysql-第二电脑网...
- C语言核心技术-C语言概述与开发环境搭建
- matlab里vpa怎么用_“学校里的师兄师姐,用英文怎么说?”
- 报错A Database Error Occurred,linux系统被cc***
- sqlplus 登陆报协议适配器错误
- Prolog 语言入门(一)
- 审计 6 SSRF和任意文件读取
- [回帖整理] 创业难
- Anaconda 最新版本的下载和安装
- 怎么两边同时取ln_回归分析为什么要取LN值
- 一篇基金研报--《外包服务:后安迪-比尔时代IT产业的大餐》
- Unity学习Day14--协程和WWW
- python计算单词长度_python – 返回字符串中的单词长度
- VUE解决warning(Emitted value instead of an instance of Error) el-table-column v-for=item in batch问题
- 71.JAVA编程思想——JAVA与CGI
- Idea如何配置svn或集成svn。
- EE4408: Machine Learning: