js 爬虫抓取网页数据(联想虚拟货币爬取这是酷安老哥找我做的一个项目)
优采云 发布时间: 2022-04-16 05:20js 爬虫抓取网页数据(联想虚拟货币爬取这是酷安老哥找我做的一个项目)
在此期间总共制作了三种爬行动物:
我使用了两种不同的技术。前两个是我自己的想法。我使用 nodejs+express+superagent。说实话,nodejs对后台的数据真的很友好。然后我使用 Sequelize 进行 ORM 对象映射,确实非常好。方便。
这也是要熟悉express的架构,以后再补坑,虽然坑的不多。
我还为 Sequelize 文档做了一个镜像仓库,方便访问。
但是,在 JavaScript 中编写程序时,有一点是无法避免的,那就是异步操作。
JavaScript作为浏览器的主要逻辑实现语言,对于支持网络操作是必不可少的。如果浏览器不使用异步获取数据,就会出现页面加载慢等问题,用JavaScript编写的后端也无法避免处理异步操作。,比较头疼的是循环异步操作。我在网上查了很多文件。主要的解决方案是递归地循环嵌套promise,然后确保获取到最后一个promise对象,然后等待他的resolve或者reject。
让我们详细谈谈这些项目。
丁香园数据爬取
这个项目我是自发开始的,大概用了三四天的时间。
分析页面数据
打开丁香园的网站,右键查看网页源代码,可以看到丁香园的数据是后端渲染出来的,所有需要的数据都嵌入到了JavaScript中json 格式的 HTML。
事实上,最初的丁香园页面并不是这样的。一开始不是很直观,都是用html标签写的。
估计是为了方便网友抓取它的数据吧?毕竟写html+JavaScript对爬虫很有好处
而且里面几乎所有的数据都是完美而严格的json格式,用JSON.parse()就行了。后台没什么好说的,写个定时器,定时爬取。公开一些接口可以在 GitHub ⭐ 上收获。
联想虚拟货币爬行
这是关弟兄让我做的一个项目。毕竟,这是我人生中的第一次外包。我犹豫了两分钟,立刻开始了。第一天,我花了半天时间研究页面并分析困难。
第一点是我在这部分遇到的第一个坑。因为我之前做的是一个不需要登录的页面,只能直接分析得到的html数据,所以上网查了一些资料。
其实解决方法很简单。就是模拟登录操作,获取联想服务器返回的cookie数据,然后带着这个cookie访问币种查询页面。
以下是我对网络安全的一些看法:
网页安全吗?
不,没有网页是安全的,纯网页几乎不可能完全安全,所以很多网上银行都需要外挂一些硬件工具来保证安全。
那么一个网页可以相对安全吗?
是的,而且应该是。
使用 session 或 cookie 或 token 区分用户属性,防止未登录的未知用户查看敏感页面,并添加过期功能,确保数据安全。
使用不可逆加密来保护用户输入的密码。只有这样,后台才能在不知道用户真实密码的情况下确认用户的登录状态。个人认为MD5加密对于我这个级别来说是比较好的用户信息加密方式。
在分析联想的登录界面时,我发现了一个让我哭笑不得的地方。
百度百科
Base64 是 Internet 上传输 8Bit 字节码最常见的编码方法之一。Base64 是一种基于 64 个可打印字符表示二进制数据的方法。可以查看RFC2045~RFC2049,里面有MIME的详细规范。
Base64 编码是一种二进制到字符的过程,可用于在 HTTP 环境中传送更长的标识信息。使用 Base64 编码是不可读的,需要先解码才能读取。
连联想的一些登录页面,密码都是明文传输的……联想的技术水平我真的无语,具体是哪些页面就不说了。
解决了登录问题后,基本搞定了大半。
然后是运维和调优。这段时间,当IP被封时,我设置了爬取时间间隔,基本没有问题。
如何获取信息
有两种主要类型的网页
后端渲染SSR页面,或者prerender预渲染单页应用,前端请求数据前端渲染
第二种对爬虫不友好。只能手动找前端接口,然后看运气能不能请求对应的数据,比较随机。
在第一种情况下,我现在主要使用正则表达式。JavaScript对正则表达式比较友好,操作DOM也很方便。基本流程是
在使用正则表达式之前,您可以使用 DOM 操作工具来缩小搜索范围以方便匹配。