从网页抓取数据(本文聚合到我们自己的系统里提供标准API的方法)
优采云 发布时间: 2021-12-24 15:14从网页抓取数据(本文聚合到我们自己的系统里提供标准API的方法)
最近需要把某个网站的统计数据汇总到自己的系统中,但是网站没有提供标准的API,所以自己去抢了。本文总结了一般方法
分析服务地址
一般网站有两种方式,一种是后端渲染,直接在浏览器中呈现渲染完成的界面;另一个前端是静态页面,后台使用ajax来获取数据
后端渲染
这种网页爬取比较麻烦,因为结构不规范,需要从DOM中提取所需的数据。node平台推荐cheerio,API类似jquery,处理DOM更方便
前端渲染
这种情况比较好处理,因为接口返回的数据结构一般比较规则,关键是要找到接口的地址。建议使用chrome的开发控制台,切换到xhr选项卡。一般很容易找到需要的接口
处理认证
有些服务根本不需要认证,可以直接调用。麻烦的是,大多数接口都需要认证,通常是为了验证用户身份
模拟登录
最完美的方法是模拟登录,先分析登录服务地址,用Charles做代理,用浏览器登录几次,尝试模拟登录请求
但是,这是一种理想情况,通常很难模拟着陆。网站通常使用验证码甚至https来保护
登录后复制cookie
所以比较常用的方法是先正常登录,然后在chrome中查看正常http请求的header等信息。最重要的当然是 Cookie 字段。99% 的 网站 使用 cookie 来识别登录用户。所以我们可以复制普通请求的各种http headers,这样一般都可以调整
推荐使用CocoaRestClient,测试发送http请求非常方便
一般网站,可以通过复制cookies的方案来完成。不过还有一些比较麻烦的网站,会结合一些其他的安全方案,比如调用频率、验证IP等,这个只能详细分析,没有一定可行的办法。
分析网址
有时候url中会收录一些接口的请求参数,比如:
http://www.xxx.com/apps/xxx/reports/load_chart_data?start_date=2015-08-09&end_date=2015-09-07&stats=trend_active_users
这个 url 收录 3 个请求参数。通过构造url,可以实现不同的请求。关键是观察,一般的URL比较容易找到规则
csrf防御机制
有的网站会在网页或者url里面放一个token来防止csrf,所以处理的方法就是找出这个token放到request中