10分钟上手爬虫实践笔记
背景
1) 中长期持续的运营分析和数据分析的需要,需要研发掌握基本的爬虫技能。
2) 避免项目重复安装,重复搭建,研发人员日常交叉review和修改的阅读的难点(开发风格和标准不统一)。
3) 沉淀标准的类库,通用解决一些爬虫相关的难度(诸如反爬的解决方案),避免重复开发,提升爬虫开发的效率。
常用java爬虫解决方案总结
1. Jsoup 一般爬虫方案
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。它是支持url请求获取html,也支持cookie传递,可以对html进行dom解析,通过select方法动态定位元素,非常方便开发人员爬取相应的信息。一般无反爬策略的网站可以采用此方案进行爬取,比如国外很多网站都对seo非常友好,采用这个方案简单,粗暴,高效。百度上也有很多教程,上手非常容易~
2. selenium 浏览器爬虫方案
Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。适用于自动化测试,js动态爬虫(破解反爬虫)等领域。在java爬虫领域,一般我们采用google chrome,下载相应的driver驱动,通过api操控浏览器模拟人工行为(诸如模拟点击,模拟拖动,模拟执行脚本等等),通过driver.findElements进行内容解析抓取。采用此方案一般来解决复杂和具备一些反爬策略的网站。百度上也有很多教程,上手不算很难~
标准化解决方案
不断沉淀标准的脚手架和类库,将一些通用的,共性有难度的技术点(特别是针对性的反爬技术整合)形成标准化的解决方案,避免重复造轮子,重复尝试造成的效率下降。
默认引用的组件包含:数据库相关,excel导出相关,selenium-java,Jsoup,bsf-core框架
快速上手方案
1. 下载脚手架(基础组件都已包含和定义好了)。
2. 若是一般爬虫场景,继承BaseJsoupSpider实现, 如:
public class DemoCategoryJsoupSpider extends BaseJsoupSpider { @Override public void run(){ /*此处实现逻辑,脚手架中有demo*/ } }
3. 若是浏览器爬虫场景,继承BaseChromeSpider实现,如:
public class DemoCategoryChromeSpider extends BaseChromeSpider { @Override public void run(){ /*此处实现逻辑,脚手架中有demo*/ } }
注:操作系统系统需要下载chrome。底层在第一次运行时会自动根据chrome的版本号,下载相应驱动(无需手工下载)。同时初始化selenium(默认会带有自动化的一些header特征)时,会尽量抹掉所有自动化爬虫的标记,尽量模拟出真实chrome访问,避免一定的反爬策略(诸如stealth.min.js 可以及时更新)。
4. 简单db操作
public void select(){ List<Map<String,Object>> list = DbHelper.get(Config.getDataSource(), (conn) -> { val ds = conn.executeList("select * from user where id=?", new Object[]{1}); return ds; }); } public void insertOrUpdate(){ DbHelper.call(Config.getDataSource(), (c) -> { c.executeSql("update tb_fbform set nav=? where id=?", new Object[]{"", 1}); }); }
5. 简单excel导出
List<ExcelDemo> excelDemos = new ArrayList<>(); excelDemos.add(new ExcelDemo()); exportExcel("aa.xls",excelDemos);
常见的一些反爬策略沉淀及方案
1. 国内外网络限制
诸如temu和shein等网站,国内都无法访问,假设我们访问,需要通过vpn访问(也有企业级的vpn)。
1)如西柚vpn工具(貌似只能代理浏览器,不能代理java程序)
2) Cisco AnyConnect 工具(服务器链接b2j3.com:1443,用西柚的vpn账号也可以登陆,支持代理java程序)
3)免费开源的第三方工具,如https://github.com/freefq/free。
2. 图形验证码等限制
沉淀中。
3. ip限制。
可以采用第三方代理ip服务,获取代理ip。正在沉淀完善中,近期发布。
4. 手机验证码等限制
沉淀中。
by 车江毅
2023-2-28
文档仅做分享交流,禁止用于非法用途!
开源是一种态度,分享是一种精神,学习仍需坚持,进步仍需努力,.net生态圈因你我更加美好。